2009-05-26 61 views
4

我開始測試從cvs移動到git,並且我的所有測試都有問題。自定義git diff來忽略一些衝突

我們維持FreeBSD源代碼的自定義副本,所以在CVS我們做當一個新的FreeBSD版本發佈如下:

  1. 導入新的FreeBSD源作爲賣主分支
  2. 合併頭部
  3. 變化

我試圖做同樣的使用Git,和它的工作,但幾乎所有的FreeBSD文件有一個自定義ID是這樣的:

$FreeBSD: release/7.0.0/COPYRIGHT 175036 2008-01-01 09:36:30Z imp $

這些行總是會改變,並且由於它們存儲在svn倉庫(release/7.0.0,7.1.0,7.2.0)中,git會產生很多需要手動修復的衝突。

我想知道是否有一種方法來配置git忽略這些行上的差異並使用新的沒有問。

我可以用diff命令忽略那些行,這樣做:

diff -q -I'[$]FreeBSD:.*$'

預先感謝您。

+0

謝謝你的「接受」答案,但你想出了一個腳本做你想要的嗎?如果是的話,你可以在這裏發佈給我們其他人使用;) – VonC 2009-05-27 21:03:00

回答

1

我不確定您可以避免在合併期間因爲這些更改而發生衝突。

你能做什麼,不過,能列出所有文件要合併,對他們每個人做你的diff -q -I'[$]FreeBSD:.*$'一個小腳本,併爲那些沒有差異,做一個

git checkout --theirs theFreeBSDFile 

然後合併的簡歷將能夠補充衝突的合併。

'git checkout --theirs'檢查階段#3(他們的)未合併路徑。

實際上,git mergetool對於這項工作來說是完美的:在合併涉及FreeBSD文件之前,將您的mergetool實用程序設置爲該腳本,如問題Is it possible for git-merge to ignore line-ending differences?中所述。
如果您將mergetool配置設置爲信任該腳本的退出代碼,則除FreeBSD自定義行之外不顯示任何差異的任何文件將爲'git checkout --theirs',並據報道「合併」,另一文件不會被相同腳本合併。
最後,如果恢復仍顯示衝突的文件,請將您的合併工具重置爲您最喜歡的difftool,然後解決其餘衝突的文件。