虽然我发现类似question但我找不到问题的答案
当我尝试通过 git mv FOO foo
将目录从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)为什么我不能简单地重命名目录?
10 回答
您处于不区分大小写的环境中 . 此外,添加
-A
将不会处理mv
的删除方面,因为Git理解它 . Warning! Ensure that no other changes or untracked files are around when you do this or they will get committed as part of this change!git stash -u
首先,执行此操作然后git stash pop
. 继续:要解决此问题,请执行以下操作:这是改变工作目录,提交然后折叠2次提交的方法 . 你可以只在索引中移动文件,但对于git新手的人来说,它可能不够明确到底发生了什么 . 较短的版本是
正如其中一条评论中所建议的那样,你也可以做一个交互式的rebase(
git rebase -i HEAD~5
,如果错误的情况是在5次提交之前引入的),以便在那里修复案例并且没有错误的案例出现在历史的任何地方 . 如果你这样做,你必须要小心,因为从那时起提交哈希将是不同的,而其他人将不得不将他们的工作重新组合或重新合并到最近的分支 .这与更正文件名有关:Is git not case sensitive?
您希望将选项
core.ignorecase
设置为false,这将使Git关注本机不支持它的文件系统上的大小写 . 要在您的回购中启用:然后,您可以使用
git mv
重命名该文件,它将按预期工作 .我能够通过使用临时文件名使用git 1.7.7来解决这个问题:
(
git mv
-免费版本 . )我在Mac OS X 10.9上的Git中遇到了这个问题 . 我解决了如下:
git rm -r --cached /path/to/directory
这将在Git中删除目录,但实际上并没有删除任何物理文件(
--cached
) . 这也使得现在具有正确情况的目录显示在未跟踪的文件中 .所以你可以这样做:
然后Git会识别出你已经重命名了文件,当你执行
git status
时,你会看到许多renamed:
行 . 检查它们并确保它们看起来正确,如果是这样,您可以正常提交更改 .使用-f选项强制它:
这是一个快速且错误安全的解决方案:
警告!始终重命名重命名的文件夹中的所有文件(使用/ *) .
不要重命名单个文件 . 这导致了一个错误,在answer中描述 .
如果您首先想要查看结果,请使用
-n
:在你做了
mv
之后:提交更改
结帐到任何其他修订版
退房 .
现在Git应该在其内部文件和文件系统中重命名文件夹BOTH .
除非您明确选择,否则您不会在OS X中使用区分大小写的文件系统 . HFS可以区分大小写,但默认情况下不区分大小写 .
我有一个相关的问题 .
一个名为'Pro'的文件夹(先创建)和另一个'pro'(错误创建) . 在Mac中,它是相同的,但根据git不同 .
git config将文件重命名为正确的文件夹(谢谢),还在'pro'中创建了ghost文件(No !!) . 我无法将鬼文件更改添加到轨道,我无法检查其他分支,除非随身携带那些文件,我也无法以某种方式重置它 .
而不是那样,我做到了
为了使它更安全,我在一个单独的修复分支中完成它,然后我合并回主分支
对于创建的ghost文件问题,任何大师都可以解释How和Why?提前致谢 .
Here's a really simple solution around all the gitfoo on this page.
手动将文件复制出项目 .
git rm所有文件 .
git提交正常 .
手动添加文件 .
git添加所有文件 .
git提交正常 .
利润 .
改善Adam Dymitruk的答案(愚蠢的是,SO不让我评论他的答案),使用“git mv”将自动准确移动文件 . 不需要存储,可以避免风险的“git add -A”: