在Git存储库中,如何正确重命名目录?

qaz*_*wsx 565 git directory rename

我认为它应该工作复制到被重命名为与所需名称的新目录的目录,并删除旧的目录,并且git add, git commitpush一切.但这是最好的方法吗?

CB *_*ley 1025

基本重命名(或移动):

git mv <old name> <new name>
Run Code Online (Sandbox Code Playgroud)

区分大小写的重命名 - 例如.从 - casesensitiveCaseSensitive- 你必须使用两步:

git mv casesensitive tmp
git mv tmp CaseSensitive
Run Code Online (Sandbox Code Playgroud)

(更多关于Git中的区分大小写...)

...然后提交和推送将是重命名git仓库中目录的最简单方法.

  • 但是如果你想从`casesensitive`重命名为`CaseSensitive`,你可以这样做:`git mv casesensitive Temp`然后`git mv Temp CaseSensitive` (219认同)
  • @ViliusK如果您正在处理区分大小写的目录,我发现的任何简单方法都是`git rm -rf --cached path/to/your/directories`然后重新添加和提交 (21认同)
  • 但是为什么 GIT 没有对包/目录的名称更改提供适当的支持?为什么我什至需要创建一个单独的文件夹。当我更改包的名称时,它不应该将其视为差异并在提交和推送时处理它吗? (6认同)
  • 它是否保存所有日志和统计信息? (3认同)
  • 非常感谢。对我来说,我必须首先执行“git config core.ignorecase false”,然后连续运行命令,否则,对于第二部分,我会收到“源为空”错误。 (3认同)
  • 在 Windows 10 上,重命名目录时,“git mv”会抱怨:“从 [x] 重命名为 [y] 失败。” 我应该再试一次吗?(y/n)` 即使具有管理员权限。仅当我关闭正在查看包含我要重命名的目录的父目录的文件资源管理器窗口时,重命名才从控制台成功。 (3认同)
  • @ViliusK感谢区分大小写的技巧;) (2认同)

Jac*_*urt 93

如果收到此错误:致命:重命名'foldername'失败:参数无效

试试这个:

git mv foldername tempname && git mv tempname folderName

  • 这正是我在目录中进行大小写更改所需要的. (7认同)

aks*_*har 51

1.将文件夹的名称从oldfolder更改为newfolder

git mv oldfolder newfolder
Run Code Online (Sandbox Code Playgroud)

2.如果newfolder已经在您的存储库中并且您想要覆盖它并使用: - force

git mv -f oldfolder newfolder
Run Code Online (Sandbox Code Playgroud)

在使用git mv重命名后,不要忘记将更改添加到索引并提交它们.

3.在不区分大小写的文件系统上将foldername重命名为folderName

使用普通mv命令(而不是git mv)进行简单重命名不会被git识别为文件更改.如果您使用'git mv'命令尝试它,如下一行所示

git mv foldername folderName
Run Code Online (Sandbox Code Playgroud)

如果您使用的是不区分大小写的文件系统,例如,您使用的是Mac并且未将其配置为区分大小写,则会遇到如下错误消息:

致命:重命名'foldername'失败:参数无效

以下是您可以做的工作: -

git mv foldername tempname && git mv tempname folderName
Run Code Online (Sandbox Code Playgroud)

这通过首先将文件夹重命名为完全不同的foldername来拆分重命名过程.将其重命名为不同的foldername后,该文件夹最终可以重命名为新的folderName.在那些'git mv'之后,再次,不要忘记添加和提交更改.虽然这可能不是一种漂亮的技术,但它的工作原理非常好.文件系统仍然无法识别字母大小写的变化,但git会将其重命名为新的foldername,这就是我们想要的全部:)


Ole*_*ksi 10

您可以使用文件系统重命名目录.然后你可以做(git rm <old directory>帮助页面).然后你可以提交并推送.git add <new directory>

Git将检测到内容是相同的,并且它只是一个重命名操作,它将在历史记录中显示为重命名条目.您可以在使用提交之前检查是否属于这种情况git status

  • 嘿,但是这样,我将放弃整个提交历史. (11认同)
  • @topper请注意,无论使用哪种方法移动文件,您仍然必须使用--follow查看历史记录. (5认同)
  • @topper不,git mv只是rm + add的别名.使用git mv是一个更好的解决方案. (4认同)
  • 如果使用 -follow 标志,则可以保留它。 (2认同)
  • 两个命令而不是一个命令,并且必须添加一个标志?这比 git mv 更好吗? (2认同)

kri*_*tiz 6

这是重命名目录的示例。

git mv src/dir1/ src/dir2/
Run Code Online (Sandbox Code Playgroud)

如果您收到错误提示Permission Denied,您可以尝试

git mv src/dir1 src/temp/
git mv src/temp src/dir2
Run Code Online (Sandbox Code Playgroud)


Yin*_*non 5

很多正确的答案,但是当我来到这里复制并粘贴一个带有历史重命名文件夹时,我发现这个

git mv <old name> <new name>
Run Code Online (Sandbox Code Playgroud)

旧文件夹(本身)移动到新文件夹中

尽管

git mv <old name>/ <new name>
Run Code Online (Sandbox Code Playgroud)

(注意“/”)将嵌套内容旧文件夹移动新文件夹

这两个命令都没有复制嵌套文件的历史记录。我最终分别重命名了每个嵌套文件夹?

git mv <old name>/<nest-folder> <new name>/<nest-folder>
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

289498 次

最近记录:

6 年,8 月 前