我已经陷入了一个奇怪的境地,在我的一个分支机构中,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".
输出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包含小写结尾.
使用从文件系统中物理删除的文件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`