我有以下情況:我在一個分支上做了幾個提交,然後我使用了一個工具從一個新分支的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上提交了此代碼。現在我想合併回主並保留B和C的內容,以便能夠手動將我的實現插入方法框架。這裏的問題是,git並不認爲這是一個衝突,因爲它認爲在提交C行被合法地刪除,並插入新的方法骨架。
我增加了一些更多的解釋。問題是我的腳本沒有被調用,git認爲沒有衝突。 –