我已经陷入一种奇怪的境地,在我的一个分支机构中,web.config文件无法添加到舞台上。
的输出git add path/to/web.config
git status
与添加文件前相同。 Web.config似乎需要修改,并且尚未添加到舞台中。
也许更有趣的是,当我从文件系统中删除Web.config并运行git status
时,我得到输出,表明我已经准备好删除了两个web.config 文件并没有上演。
# Changes not staged for commit:
# deleted: path/to/Web.config
# deleted: path/to/web.config
请注意,一个是大写的W,另一个是小写的w。我在实际文件系统中删除的文件是大写的“W”。
git ls-files --stage
的输出表明在索引中确实存在两个不同的文件。
100644 63cd5911b9b12bbad559bb69b1b596708b932061 0 path/to/Web.config
100644 d60ab44bb38f05ffce126ddd3c3293b06e6e4096 0 path/to/web.config
我将每个文件输出到git cat-file -p <hash> > <file>
的文件中并比较这两个文件。虽然文本内容相同,但大写的Web.config包含CRLF结尾,而小写的web.config包含小写结尾。
从文件系统中物理删除文件git reset HEAD
会生成此输出,但文件系统上的文件未恢复,因此无法添加。
Unstaged changes after reset
D path/to/Web.config
D path/to/web.config
我希望工作目录中的文件具有CRLF,因为我在Windows上工作,但我希望将文本文件与LF一起存储在内部Git数据库中。所以,我认为这将是63cd591,但我可能会离开这里。
如何在此方案中从索引中永久删除path / to / web.config?我在Windows上,并且在我的路径上不能有两个文件,只有大小写不同。
答案 0 :(得分:22)
此特定问题的最终解决方案是从git缓存中删除web.config条目,提交任何更改,然后将所需的Web.config文件重新添加回git。
git rm --cached path/to/web.config
git rm --cached path/to/web.config
git commit -m "Repair confused cache"
git add path/to/Web.config
git commit -m "Add Web.config"
答案 1 :(得分:11)
通常当git进入混乱状态时,删除并重新添加文件到缓存会修复它:
git rm --cached foo
文件处于混乱状态的最常见方式是从命令行执行mv
。
我发现使用git mv
代替mv
有助于防止遇到此问题。
http://linux.die.net/man/1/git-mv
最后,如果您要从git存储库中删除文件,请使用git rm
而不是rm
。
Why use 'git rm' to remove a file instead of 'rm'?
https://www.kernel.org/pub/software/scm/git/docs/git-rm.html`