2012-03-30 144 views
10

我有一個在TFS中啓動的項目,然後轉移到Git。不幸的是,把它移動到Git的人只是檢查了當前文件而不是使用git-tfs。我試圖在Git中使用git-tfs從TFS提交的提交之前重新提交他在Git中的新提交。爲什麼git會顯示兩個顯然相同的添加文件之間的衝突?

要做到這一點,我只是基礎重建的混帳TFS提交的頂了他的提交。 (我知道這會搞亂遠程的Git分支,但我們是一個小團隊,它會好起來的。我也試了櫻桃採摘代替,但我打的是同樣的問題。)

我的問題m跑成是一組矛盾,看起來是這樣的:

<<<<<<< HEAD 
namespace OurNiftyProject 
{ 
    public enum CardType 
    { 
     Visa = 0, 
     MasterCard = 1 
    } 
} 
||||||| merged common ancestors 
======= 
namespace OurNiftyProject 
{ 
    public enum CardType 
    { 
     Visa = 0, 
     MasterCard = 1 
    } 
} 
>>>>>>> Add a bunch of stuff. 

看來,這是間從添加了這些文件的TFS側的承諾有衝突,並就加入他們的Git側的承諾(因爲Git回購開始空洞)。

順理成章的事情將跳過此承諾,也許,但也有它的幾個文件(比如說十個有幾百的)那是新的。當然,這些不會引起衝突。

爲什麼Git不能自行判斷這兩個文件是相同的?即使我在重新綁定時使用了--ignore-whitespace,Git仍然會顯示幾十個像這樣的文件,看起來完全相同。我不知道如何解決這個問題。

+0

'差異'也給你一個區別嗎? – Reactormonk 2012-03-30 21:52:15

+4

它可能是行結束的差異? – ebneter 2012-03-30 22:01:33

+0

尾隨空格或許 – 2012-03-30 22:29:07

回答

9

應該差不多行結束差異,ebneter評論。
我已經詳細的很久以前的git合併如何不擅長忽視這些差異(而不是空格差異):
Is it possible for git-merge to ignore line-ending differences?

這就是爲什麼一致 EOL轉換政策是必要的針對異構環境中的這些存儲庫。
請參閱「Distributing git configuration with the code」。

+0

Git是否真的考慮與空白區別不同的行結束區別!?我認爲行結尾*是*空格! – 2012-03-31 00:49:12

+0

@Kyralessa:不完全。 http://gitster.livejournal.com/28862。html提到'cr-at-eol':帶有'trailing-space',如果在這樣的回車符之前的字符不是空格,而是默認不* *,則不觸發。 – VonC 2012-03-31 09:22:12

5

我在做類似的事情,只是發現了「-X忽略空間-AT-EOL」。它可用於合併和rebase。似乎是做正確的事情,但使我的死亡緩慢。

+1

也許他們發現了一個加速,因爲我加入國旗不會減慢我的速度。 git版本1.9.5.msysgit.0 – AnneTheAgile 2015-04-16 23:44:39

1

我只是碰到了這個問題,其次是這個職位只是意識到這是我的一個行結束的情況也是如此。因爲我曾經有過「使用Windows樣式行結束符」,但是在某個時候,對於不同的項目,我將其重新配置爲「使用Unix樣式行結束符」(這些配置是可從Git安裝程序獲得)。

返回到「使用Windows風格的行尾」解決了這個問題,而不使用「 - 忽略空格」

1

如果可以排除由於不同的行尾無形的變化,你可能要檢查的文件有不同的模式(例如,如果可執行位被設置)。當文件模式改變時,Git在diff中顯示完整文件。

相關問題