apenwarr的git subtree有一個--squash
選項,可能會做得非常接近你想要的。在它生成的提交的提交信息
remote=libfoo
branch=master
prefix=helpers/libfoo
git fetch "$remote" &&
git subtree add --prefix="$prefix" --squash "$remote/$branch"
: Later, once there are changes to pick up.
git subtree pull --prefix="$prefix" --squash "$remote" "$branch"
git的子樹記錄額外的信息;這種額外的信息使其能夠有效地進行合併,而不必合併被合併的子樹的實際歷史記錄。
如果你知道你將永遠不會給子樹的任何變化,在「超級」存儲庫(即所有的子樹中的變化總是會從別的庫),那麼你可以做無混帳子樹,並重復子樹合併方法的git read-tree --prefix=
部分(儘管您必須先從兩個索引中清除當前子樹)。
remote=libfoo
branch=master
prefix=helpers/libfoo/
: replace the local subtree with whatever the other repository has
git fetch "$remote" &&
git rm -r --ignore-unmatch "$prefix" &&
git read-tree --prefix="$prefix" "${remote}/${branch}" &&
git checkout -- "$prefix" &&
git commit -m "update $prefix from $remote $branch"
我希望它是能夠維持地方在不依賴依賴的情況下爲子樹創建分支,似乎無法在這裏擁有你的蛋糕並將其吃掉......我將這個問題留待了幾天,以防有人想出一些神奇的方式來只使用git來實現這一點。謝謝克里斯。 – julien 2010-09-18 12:31:24