2013-05-27 48 views
0

我有以下情況:我在一個分支上做了幾個提交,然後我使用了一個工具從一個新分支的UML模型生成代碼。不幸的是,這個工具非常笨拙,並且不能很好地支持往返世代。因此,我的所有代碼都被刪除,只有生成的框架被保留。合併所有文件和union並觸發mergetool

我想通過保留兩個版本文件的所有行(並理想地觸發每個文件上的mergetool)來合併這兩個分支。

我做了什麼至今:

我創建的工作樹的根shell腳本:

#!/bin/sh 
echo "union merge" 
git merge-file --union "${1}" "${2}" "${3}" 
exit 1 # trigger merge conflict 

創建一個.gitattributes文件:

**.cpp merge=mytool 
**.h merge=mytool 

和編輯我的.gitconfig:

[merge "mytool"] 
name = union merge 
driver = ./union-merge.sh %A %O %B 

我可以檢查.gitattributes文件確實設置了合併屬性的所有文件:

$ git check-attr -a src/file.cpp 
customn/appopt.cpp: merge: mytool

但是,不執行我的腳本(我加回聲,以確保公正)。相反,正常的git合併被執行,留給我另一個分支的內容。我怎樣才能正確地做到這一點?

編輯:一些更多的信息:

這是歷史

 

    A --- B ------- D (master) 
      \  /
      ---C---  (toolbranch) 

,我已經COMMITED我的變化。我從那裏創建了一個新的分支,使用上面提到的代碼生成器來生成方法框架(以及它需要的一些標記註釋)。這一步已經消除了我在B處的更改,因爲之前的模型基於A,並且我在toolbranch上提交了此代碼。現在我想合併回並保留BC的內容,以便能夠手動將我的實現插入方法框架。這裏的問題是,git並不認爲這是一個衝突,因爲它認爲在提交C行被合法地刪除,並插入新的方法骨架。

回答

0

嗯,我不知道如果我得到你的問題所在,但基本上是mergetool未在合併自動執行。

標準的工作流程是,你犯了一個git merge,那麼當有衝突的git告訴你,這件事,所以你決定如何解決問題。那麼如果你說git mergetool它會問你使用哪個工具來解決它。如上設置你的union-merge後,它應該只需要一個簡單的ENTER打電話給你的腳本,做這些文件的定製加工。

+0

我增加了一些更多的解釋。問題是我的腳本沒有被調用,git認爲沒有衝突。 –

相關問題