我开始学习 git 1.8.2 中的子树合并。我创建了一个简单的示例来测试将第三方存储库迁移到主项目的更改。
我正在关注6.7 Git 工具 - 子树合并例子。
“子”项目作为子目录包含在“主”项目中。
对“子”项目进行更改后,当我尝试将更改合并到“主”项目中时,git 报告冲突。
测试总结
- 为项目“主”和“子”创建存储库(子而不是机架)
- 将名为 sub_remote 的远程添加到引用 sub 的 main 中
- 使用 sub_branch 跟踪 sub_remote
- 更改并提交“子”项目中文件中的一行
- 将更改从子分支拉到主/子分支
- 将 main/sub_branch 合并到 main/master 中。
合并因冲突而失败。 Merge 对于保留更改行的哪个版本感到困惑。
<<<<<<< HEAD
main
=======
main upstream change
>>>>>>> sub_branch
main.git
sub
sub.git
tm
完整的测试脚本
#!/bin/sh
# initialize empty repos
for i in main sub
do
rm -rf $i{,.git}
mkdir $i.git
cd $i.git;
git --bare init;
cd ..;
git clone $i.git
cd $i
echo $i > readme.md
git add readme.md
git commit -a -m "added readme.md"
git push origin master
cd ..
done
# add data to sub
ls > sub/data
cd sub
git add data
git commit -m "Added data"
git push origin master
cd ..
# add sub as a sub-tree in main
cd main
git remote add sub_remote ../sub.git
git fetch sub_remote
git checkout -b sub_branch sub_remote/master
git checkout master
git read-tree --prefix=sub/ -u sub_branch
git commit -m "Added sub"
git push origin master
cd ..
# make change to sub
cd sub
sed -i -e 's/main$/main upstream change/' data
git commit -a -m "upstream change made to data"
git push origin master
cd ..
# merge sub change to main
cd main
git checkout sub_branch
git pull
#merge sub_branch changes into master
git checkout master
git merge -s subtree sub_branch
cat sub/data
What read-tree
在这种情况下所做的只是将另一棵树的内容添加到当前树中的目录中。这些内容的添加就像创建和添加常规文件和目录一样,没有历史记录。所有这些文件都将被视为您创建的文件。
当您尝试合并进程失败时,因为它看到 sub_branch 历史创建了data
文件,并且目标目录还包含不同的data
您创建的文件。
您正在使用的页面缺少使子树正常工作的非常重要的步骤,以便您实际上能够对其进行更新。
正确的示例可以在这两个页面中看到:https://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html
https://help.github.com/articles/working-with-subtree-merge
您的情况缺少的是在创建子树时正确链接历史记录:
# create the merge record but not change anything in your tree yet
git merge -s ours --no-commit sub_branch
# bring the changes and place them in the proper subdirectory
git read-tree --prefix=sub/ -u sub_branch
在此之后你的main
存储库将包含历史记录sub
存储库。对失败的合并的调用现在应该可以正常工作。呼唤git log --graph
会让你看到不同的提交是如何合并的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)