将文件添加到git的阶段什么都不做,无法提交

时间:2013-07-22 22:32:07

标签: git

我已经陷入一种奇怪的境地,在我的一个分支机构中,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”。

编辑1

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包含小写结尾。

编辑2

从文件系统中物理删除文件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上,并且在我的路径上不能有两个文件,只有大小写不同。

2 个答案:

答案 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`