私はgit 1.8.2でサブツリーのマージを学び始めています。メイン プロジェクトに移行するサード パーティのリポジトリへの変更をテストする簡単な例を作成しました。
私は6.7 Git Tools - Subtree Mergingの例に従っています。
「サブ」プロジェクトは、「メイン」プロジェクトのサブディレクトリとして含まれています。
「サブ」プロジェクトに変更を加えた後、その変更を「メイン」プロジェクトにマージしようとすると、git が競合を報告します。
テストのまとめ
- プロジェクト 'main' および 'sub' (ラックではなくサブ) のリポジトリを作成しました
- sub_remote という名前のリモートを、サブを参照するメインに追加します
- sub_branch を使用して sub_remote を追跡する
- 「サブ」プロジェクトのファイルの 1 行を変更してコミットする
- sub から main/sub_branch に変更をプルします
- 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