3

Git ブック ( http://git-scm.com/book/ch6-7.html ) で説明されている構造を使用して、2 つのリポジトリをセットアップします。基本的に、1 つのレポのコピーとオリジンのマスター ブランチとの関係を維持したかったのです。サブモジュールでこれを行うことができることは知っていますが、それらを更新するプロセスは少し面倒に思えました。とにかく、「RepoB」のサブツリーを持つように「RepoA」をセットアップしました。T シャツへのリンクに記載されている手順に従いました。

「RepoA」のサブツリーに大幅な変更を加えました。同時に、私のチームの他のメンバーが「RepoB」のマスターに変更を加えています。すべてが完了したら、「RepoB」オリジン/マスターから変更をプルし、サブツリーでそれらを RepoA のサブツリーにマージできることを期待しています。ただし、これを行うと (-s サブツリー マージ オプションを --squash および --no-commit と共に使用して)、RepoA のサブツリーに加えたすべての変更が削除されます。サブツリーに追加した新しいファイルも削除されます! どうしてこれなの?サブツリーの使い方を誤解していませんか? 不適切にマージしていますか?どんな助けでも大歓迎です!

さらに、これらをサブツリー マージで適切にマージすることが不可能な場合、それらを手動で、手動でマージし、新しいプロジェクト構造を作成するための唯一の選択肢はありますか?

ありがとう!

4

2 に答える 2

0

RepoB サブツリーが存在する場合、RepoB の RepoA へのサブツリー マージの「git read-tree」ステップは機能しません。読み取りツリーをスキップすると、すべてのファイルがローカルで削除されます。(最初からやり直す)

RepoB サブツリーは、ローカルで git から削除する必要があります。その後、git-read-tree が機能し、ファイルと履歴の両方でマージが正しく行われます。

以前のマージからの RepoB_subtree を持つ RepoA のクローンから始めます。

git remote add -f RepoB <RepoB-url>
git merge -s ours  --no-commit RepoB/master
git rm -r RepoB_subtree
git read-tree --prefix=RepoB_subtree/ -u RepoB/master
git commit -m "Subtree merge of RepoB/master."

RepoA 履歴には、最初に RepoB コミットのブロック全体が表示されます。以前のサブツリー マージ コミットは、RepoB 履歴なしで RepoA に表示されます。

RepoA 内の RepoB 履歴の構成は、思ったほど時間的に直線的ではありませんでしたが、振り返ってみると、RepoA 内の RepoB サブツリーの履歴は完全で読みやすいものでした。

于 2016-03-17T16:58:12.490 に答える