git mv并且仅更改目录的大小写

虽然我发现了类似的问题,但没有找到解决问题的答案


当我尝试通过该目录从FOO重命名为foo git mv FOO foo我得到


fatal: renaming 'FOO' failed: Invalid argument

好。所以我尝试git mv FOO foo2 && git mv foo2 foo


但是,当我尝试提交通过git commit .我得到


# On branch master

# Untracked files:

#   (use "git add <file>..." to include in what will be committed)

#

# foo

nothing added to commit but untracked files present (use "git add" to track)

当我通过git add foo任何方式添加目录时,都不会更改,并git commit .再次给我相同的消息。


我究竟做错了什么?我以为我使用的是区分大小写的系统(OSX),为什么我不能简单地重命名目录?


元芳怎么了
浏览 652回答 3
3回答

慕村9548890

您处于不区分大小写的环境中。此外,如Git所理解-A的mv那样,添加no 将不会照顾到remove的一面。警告!执行此操作时,请确保没有其他更改或未跟踪的文件,否则它们将作为更改的一部分得到落实! git stash -u首先,执行此操作,然后再执行git stash pop。继续:要解决此问题,请执行以下操作:mv foo foo2git add -Agit commit -m "renaming"mv foo2 FOOgit add -Agit commit --amend -m "renamed foo to FOO"这是更改工作目录,提交然后折叠2个提交的引出方式。您可以只在索引中移动文件,但是对于git的新手来说,它对发生的事情可能不够明确。较短的版本是git mv foo foo2git mv foo2 FOOgit commit -m "changed case of dir"如其中一项注释中所建议,您还可以进行交互式重新编排(git rebase -i HEAD~5如果在5次提交之前引入了错误的案例)来修复该案例,而不会在历史记录中的任何位置出现错误的案例。如果要执行此操作,则必须小心,因为从那时起的提交哈希值将有所不同,其他人将不得不根据分支的最近历史重新建立或重新合并其工作。

桃花长相依

您要将选项设置core.ignorecase为false,这将使Git注意本机不支持它的文件系统的大小写。要在您的仓库中启用:$ git config core.ignorecase false然后,您可以使用来重命名该文件,git mv它将按预期工作。

BIG阳

我能够通过使用临时文件名使用git 1.7.7解决此问题:$ git mv improper_Case improve_case2$ git mv improve_case2 improve_case$ git commit -m "<your message>"
打开App,查看更多内容
随时随地看视频慕课网APP