4

自己完結型のリポジトリを取得するためにサブモジュールから離れようとしていますが、サブツリーのマージ戦略はこのユースケースに一致しているようです。

ただし、マージされたリポジトリの履歴は、私自身のプロジェクトの履歴に表示されます。これは、かなり面倒です。

すべてのサブツリーのファイルをプロジェクトのルートに書き換えるgit filter-branch --subdirectory-filter path/to/subtree/ HEADサブツリーを更新しようとするまで、どちらが機能するか試してみました。git pull -s subtree my-subtree master

これをgitでネイティブに実現する方法はありますか?

4

2 に答える 2

9

apenwarrgitサブツリーには、--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サブツリー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"
于 2010-09-18T10:53:29.727 に答える
0

'git log'を読むときに煩わしいだけの場合は、次のことを試してみてください。

git log --first-parent

コミットと(単一の)マージコミットのみが表示され、リモートのコミットは表示されません。

差分で表示したい場合(マージコミット用に1つの大きな差分が作成されます):

git log -p -m --first-parent

追加のツールは必要ありません:)

于 2010-12-20T09:55:56.137 に答える