树外文件的3向合并?

时间:2017-10-25 19:58:35

标签: git merge

我们的代码库从不同的代码库导入文件,并修改它们以适应我们的代码库。出于实际原因(与问题无关),我们无法分享代码库的历史。

如何执行导入文件的3向合并?其中:

  • 共同祖先是源代码库以前导入的版本
  • 分支1是源代码库的更新版本
  • 分支2是我们的修改版本。

我最好使用git来执行此合并,以避免依赖于外部工具,但git与在这种情况下不存在的共享历史密切相关,而且我不会这样做。我知道如何强制git只在文件中进行合并而没有历史记录。

1 个答案:

答案 0 :(得分:2)

您可以使用git merge-filehttps://git-scm.com/docs/git-merge-file)逐个文件地执行此操作。如果涉及许多文件,这可能非常繁琐。

或者,您可以创建临时"集成回购"在哪里进行合并。

mkdir merge-repo
cd merge-repo
git init
# copy in the previous imported version of each file 
git add .
git commit -m base
git branch source
# copy in the current version of each file with your changes (note you're still on master)
git add .
git commit -m ours
git checkout source
# copy in the current version of each file from the source repo
git add .
git commit -m theirs
git checkout master
git merge source
# copy the merged files back to your repo
cd ..
rm -rf merge-repo #if you don't want to keep it around, you don't need it any more

后者可能有更多可移动的部分,但我敢打赌你可以编写脚本,并且比逐个文件分阶段提出单个merge-file命令要简单得多。