2017-06-20 90 views
-1

即時通訊使用Windows系統將我的更改推送到用戶使用macOS提交的git linux服務器,這可能是無效差異更改的問題嗎?不會更改的更改會顯示爲已刪除,並稍後以新的方式重新添加。即時通訊使用的崇高,也tryed NetBeans支持相同的行爲...Git diff太多錯誤的更改

Wrong diff output image

+1

[git-diff忽略^ M]的可能重複(https://stackoverflow.com/questions/1889559/git-diff-to-ignore-m) – LuFFy

回答

0

遠程回購混合cr/lf lineendings,以爲它是unix,現在我只是設置原始的lineending,如果它再次發生。

0

Windows和基於* NIX操作系統使用文件結束字符不同的線路。在你的情況下,你要在你的文件中添加Windows Carriage return字符,並在MacOSX上刪除它們。

在您的Sublime上,您可以更改保存的行結束字符以匹配MacOSX的行尾。請參閱is there a way to convert files line ending on saving。這樣你就不會看到這些變化。

您也可以指示git自動使用core.autocrlf配置進行轉換。請參閱GitHub dealing with line endings

0

GitHub suggests您應該確保只使用\ n作爲git處理的回購庫中的換行符。有一個選項來自動轉換:

$ git config --global core.autocrlf true 

當然,這是說,轉換CRLF到LF,而要轉換CR到LF。我希望這仍然工程...

然後將您的文件:

# Remove everything from the index 
$ git rm --cached -r . 

# Re-add all the deleted files to the index 
# You should get lots of messages like: "warning: CRLF will be replaced by LF in <file>." 
$ git diff --cached --name-only -z | xargs -0 git add 

# Commit 
$ git commit -m "Fix CRLF" 

Git Config Manual

core.autocrlf

將此變量設置爲 「真」 幾乎是與在文本文件不是 之外的所有文件上將文本 屬性設置爲「自動」相同保證被規範化:存儲庫 中包含CRLF的文件不會被觸及。如果要在工作目錄中使用CRLF行 結尾,即使存儲庫不包含 具有標準化的行結尾,也可以使用此設置。該變量可以設置爲輸入,在 哪種情況下不執行輸出轉換。

+0

有三種不同的行結束符,但Git只提供他們兩個人 (???)。 Windows使用'CRLF',Linux使用'LF'和OS X使用'CR'。因爲Git似乎沒有這樣做,所以我們在makefile中有食譜來標準化行尾。 – jww

+0

將此變量設置爲「true」幾乎與將文本屬性設置爲「auto」在所有文件中幾乎相同,只是文本文件不能保證被標準化:存儲庫中包含CRLF的文件將不會被觸摸。即使存儲庫沒有標準化的行結尾,如果要在工作目錄中擁有CRLF行結尾,請使用此設置。該變量可以設置爲輸入,在這種情況下不執行輸出轉換。 – LuFFy

+0

我有四臺OS X從10.4到10.10的機器。 (我的測試環境還包括帶有GCC 3的Fedora 1和帶有Visual C++ 6.0的Windows XP)。 – jww