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

Rya*_*lor 23 git

我已经陷入了一个奇怪的境地,在我的一个分支机构中,web.config文件无法添加到舞台上.的输出

git add path/to/web.config
git status
Run Code Online (Sandbox Code Playgroud)

与添加文件前相同.Web.config似乎需要修改,并且尚未添加到舞台中.

也许更有趣的是,当我从文件系统中删除Web.config并运行时,git status我得到的输出表明我有两个web.config文件已准备好被删除而且没有暂存.

# Changes not staged for commit:
#   deleted: path/to/Web.config
#   deleted: path/to/web.config
Run Code Online (Sandbox Code Playgroud)

注意,一个具有大写字母W而另一个具有小写字母w.我在实际文件系统上删除的文件是大写的"W".

编辑1

输出git ls-files --stage显示确实有两个文件在索引中按大小写不同.

100644 63cd5911b9b12bbad559bb69b1b596708b932061 0 path/to/Web.config
100644 d60ab44bb38f05ffce126ddd3c3293b06e6e4096 0 path/to/web.config
Run Code Online (Sandbox Code Playgroud)

我将每个文件输出到一个文件,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
Run Code Online (Sandbox Code Playgroud)

我希望工作目录中的文件具有CRLF,因为我在Windows上工作,但我希望将文本文件与LF一起存储在内部Git数据库中.所以,我认为这将是63cd591,但我可能会离开这里.

如何在此方案中从索引中永久删除path/to/web.config?我在Windows上,并且在我的路径上不能有两个文件,只有大小写不同.

Rya*_*lor 24

此特定问题的最终解决方案是从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"
Run Code Online (Sandbox Code Playgroud)


spu*_*der 13

通常当git进入混乱状态时,删除并重新添加文件到缓存将修复它:

git rm --cached foo
Run Code Online (Sandbox Code Playgroud)

似乎文件处于混乱状态的最常见方式是mv从命令行执行a .
我发现使用 git mv 而不是mv帮助来防止遇到这个问题. http://linux.die.net/man/1/git-mv

最后,如果你打算从一个Git仓库中删除一个文件,使用git rm的只是代替rm
为什么要用"git的RM"来删除一个文件,而不是"RM"?

https: // www.kernel.org/ pub/ software/ scm/ git/ docs/ git- rm.html`