我有以下场景:我在一个分支上进行了几次提交,然后我使用了一个工具,该工具从新分支上的 UML 模型生成代码。不幸的是,这个工具相当愚蠢,不能正确支持往返生成。因此,我的所有代码都被删除了,只保留了生成的骨架。
我想通过保留两个版本的文件中的所有行来合并这两个分支(理想情况下触发每个文件上的合并工具)。
到目前为止我做了什么:
我在工作树的根目录中创建了一个 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:合并:mytool
但是,我的脚本没有被执行(我添加了 echo 只是为了确保)。相反,执行正常的 git 合并,将其他分支的内容留给我。我怎样才能正确地做到这一点?
编辑:更多信息:
这是历史
A --- B ------- D(主) \ / ---C---(工具栏)
在B,我已经提交了我的更改。我从那里创建了一个新分支,使用上面提到的代码生成器来生成方法框架(以及它使用的一些需要的标记注释)。此步骤已删除我在B的更改,因为以前的模型是基于A 的,并且我在 toolbranch 上提交了此代码。现在我想合并回master并保留B和C的内容,以便能够手动将我的实现插入到方法框架中。这里的问题是 git 不认为这是一个冲突,因为它认为在提交C中这些行被合法地删除了,并且新的方法框架被插入了。