2012-10-29 23 views
4

我有一個包含C#代碼的git存儲庫,並且我在Windows上運行的是MSysGit更改文件中的一個字符導致MSysGit認爲整個文件已更改

core.autocrlf被打開,而我利用this question.gitattributes,並作爲在this Github guide的底部所提及的我「renormalised」我回購。

現在對於的.cs文件在我的倉庫的一些,如果我改變甚至一個字,MSysGit認爲整個文件已經改變。

我克隆了新鮮的倉庫。我試圖先在Visual Studio中編輯文件,但後來我試圖在SciTE中打開它,它顯示了行結尾和製表符,並且我相信它不會對文件做任何奇怪的事情(如更改編碼)。

所以,我克隆庫新鮮:

$ git clone git clone [email protected]:my-repo.v2.git 
$ cd my-repo/ 

我檢查庫和文件:我開在賽特文件

$ git status 
# On branch master 
nothing to commit (working directory clean) 
$ git diff path/to/myfile.cs 
$ 

(注意行結束CRLF有沒有標籤):

using System; 
using System.Collections.Generic; 
... 

並改變一個字符(並且注意CRLF,無標籤仍然如此):

using System; 
!using System.Collections.Generic; 
... 

現在混帳認爲一切都改變了:

$ git diff path/to/myfile.cs 
diff --git a/path/to/myfile.cs b/Dpath/to/myfile.cs 
--- a/path/to/myfile.cs 
+++ b/path/to/myfile.cs 
@@ -1,116 +1,116 @@ 
-<U+FEFF>using System; 
-using System.Collections.Generic; 
-using System.Linq; 
-using System.Text; 
-using Microsoft.Practices.EnterpriseLibrary.Data; 
-using DataModel.Models; 
-using DataModel.Mappers.Interfaces; 
-using System.Data.Common; 
-using System.Data; 
... 

常規差異程序並不認爲這兩個文件是如此的不同,git diff在Unix上沒有按認爲他們太不同了,但msysgit呢。

有沒有人遇到過這個或有任何想法?

+0

當我重新啓動計算機時問題得到解決。 *嘆*。 –

回答

3

有幾件事情,可以讓Git的顯示整個文件的更改:

  • 行結束 - 但你說你檢查了這些,他們是一樣的;
  • 縮進 - VS(特別是如果您安裝了某些擴展)可能會將縮進從製表符更改爲空格,反之亦然。你可以用「顯示空白」來檢查(VS中的Ctrl-R,Ctrl-W或不同的相關選項)。
  • 編碼 - 如果VS決定以某種不同的編碼重新編碼文件(例如UTF16),它可能會顯示爲完全更改,儘管文本表示看起來相同。
+0

我的第一個想法是行結尾,但考慮到已被檢查,下一行將是縮進的製表符/空格問題。 – ChrisF

+0

它似乎不是標籤/空格。我如何檢查編碼?雖然從我以前的經驗來看,UTF-16編碼被git視爲二進制文件,而我的文件不是。 –

+0

經過一番調查後,我重寫了這個問題 –

相關問題