2014-10-16 43 views
5

我的autocrlf等于true。在我的cygwin-shell git status给了我一个我所有更改的正确列表。处理Cygwin Git和Git for Windows中的EOL字符访问同一存储库

在Git Bash git status说我修改了项目中的所有文件。我也在Git GUI和IntelliJ中的Changes-tab中看到了这一点。

这怎么可能,更重要的是,我该如何解决它?

+3

Git和Windows - 不是在天堂做的匹配,这是肯定的! – 2014-10-16 15:00:21

+0

什么'git config --get core.autocrlf'打印? – ryenus 2014-10-16 15:07:46

+0

在所有情况下'true' – 2014-10-16 15:09:55

回答

3

感谢Cygwin提供的仿真,Cygwin Git“看待世界”就好像它运行在POSIX平台—上。与此相反,Git for Windows是一个本地 Windows程序,它不使用任何仿真,并尝试尽可能接近Windows标准(尽管非常愚蠢)。这导致的是,对于Cygwin Git,LF是标准的EOL字符,而对于Windows的Git,本地EOL序列是CRLF。所以这两种工具都能以不同的方式看待世界,这就解释了你所观察到的。请阅读this recent thread了解更多信息(尤其是this message)。

无论在哪种情况下,consider setting core.autocrlf to false anyway都避免了这种“魔法”的麻烦。我仅使用GfW,最后将该设置切换为false(默认为true)。

您可能还会发现评论得非常好的.gitattributes file from the Mono project是有趣的研究。

+0

好的,谢谢!几个问题:(1)所以你建议将autocrlf设置为false? (2)任何想法,如果有某种方式使用cygwin具有git的GUI表示形式?我有时必须做复杂的阶段/提交,其中添加所有修改的文件不是一个选项。 – 2014-10-16 21:44:11

+0

@ArthurC,对于长时间的延迟抱歉。 1)是的,将它切换为假将关闭任何与EOL序列相关的魔术,这将使双方的Gits有相同的想法w.r.t. EOLS。然后您可以通过'.gitattributes'强制使用某些(或全部)文件的CRLF。或者,如果可能的话,确保您使用的文本编辑器对于唯一的LF没有问题,例如Emacs和Vim就是两个例子。 2)我相信Cygwin构建了Tcl/Tk,因此存储了Git的GUI工具,'gitk'和'git gui'应该在那里可用。 – kostix 2014-10-19 15:09:40

+0

@ArthurC,2),继续。请注意,完全可以仅使用命令行工具进行细粒度的分段:'git add'可用于分段任何选定的文件,'git add --patch'可用于将选定的* hunk *如果你可以做一些简单的'git add',那么这些变化将会上演。通过'git reset --patch'和'git checkout --patch',也可以选择性地撤销这些更改:前者将从索引中取消更改,而后者对工作树执行相同的操作。不是我建议你不要使用'git gui'等人,只是表示他们没有做任何特殊的纯Git不能做的事情。 – kostix 2014-10-19 15:13:13