2014-10-16 72 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