2012-11-16 116 views
2

我們有一個自動生成的JavaScript文件,在我們的git存儲庫中進行跟蹤。問題在於它在評論中包含一個(無用的)時間戳,這通常會給我們造成微不足道的合併衝突。我想避免發生這些衝突。如何讓git忽略某些文件衝突和差異?

我以爲我發現了a solution with .gitattributes and filter/smudge。我把它通過以下方式,使這個時間戳行是從文件剝離時提交或結賬:

.gitattributes:

<the file>.js filter=tsfilter 
<the file>.js smudge=tsfilter 

的.git /配置:

[filter "tsfilter"] 
     clean = perl -pe \"s/\\/\\/.*<the pattern>.*$//\" 
     smudge = perl -pe \"s/\\/\\/.*<the pattern>.*$//\" 

雖然這似乎消除了合併衝突,但它引入了另一個煩惱,因爲這個文件現在仍處於修改狀態。也就是說,由於本地(預過濾)副本包含時間戳行(但提交的文件沒有),因此「狀態」劇照會將其顯示爲已修改。

有沒有更好的方式去解決這個問題,它避免了合併衝突,同時也隱藏了對這部分文件的局部更改?

+1

如果它是自動生成的,爲什麼需要跟蹤它? – Neil

+0

它由eclipse插件自動生成。如果這可以在命令行完成,那麼我們可以刪除它。 –

回答

3

我可能會錯誤地解釋你的問題,但聽起來好像你可以用ourstheirs合併策略來處理相關文件。基於答案this question,你可以做到以下幾點:

.gitattributes:

file.js merge=ours 

的.git /配置:

[merge "ours"] 
    name = Keep my file 
    driver = true 

這將始終保持你的文件的版本。

A theirs合併只是稍微困難 - 您不能只是將驅動程序更改爲false,您需要定義腳本以保持其更改。上面鏈接的問題更詳細地涵蓋了theirs策略。

+0

儘管上述行並不重要,但文件的其他部分可能來自我們和他們的獨特貢獻。由於此文件僅由開發人員生成,因此合併需要保留這些差異。 –

+0

這也是您可以用來重新生成文件的策略。 'true'實際上只是一個shell腳本,所以如果你能夠確定從命令行運行文件生成的方法,這是一種可能的實現方法。 – cjc343

1

您可以修改生成該文件的程序,使其不包含時間戳,或者爲程序編寫一個可以刪除時間戳的包裝程序。

+0

不幸的是,該程序是一個eclipse插件,我們目前沒有自己構建,所以我不確定這會很容易。 –