-1

3 つの Git リポジトリのマージに関するアドバイスまたは警告を探しています。コミット履歴とすべてのブランチを維持する必要があります。

私はこの質問この質問を調べました.「git-subtree」コマンド私が望むことをしたようですが、そのコマンドは削除されたか何かのようです(コメントはこの問題で競合しているようです.) 「git subtree」コマンドですが、それが何をするのかわかりません。ドキュメントはかなり薄いです。

それぞれ Maven プロジェクトを含む 3 つの Git リポジトリがあります。ファイルとリポジトリはまったく重複していません (たとえば、プロジェクトは他のプロジェクトの Git サブモジュールではありません)。A を参照する B と C のコードを除いて、それらは完全に分離されています。

ProjectA.git
    pom.xml
    /src/....

ProjectB.git
    pom.xml
    /src/...

ProjectC.git
    pom.xml
    /src/...

それらを 1 つの「親」リポジトリにマージしたいと思います。

Parent.git
    /ProjectA
        pom.xml
        /src/...
    /ProjectB
        pom.xml
        /src/...
    /ProjectC
        pom.xml
        /src/...

コミット履歴とすべてのブランチを維持する必要がありますが、個々のリポジトリをサブモジュールまたは個別のリポジトリとして維持することには興味がありません。実際、人々がそれらを使い続ける誘惑に駆られないように、このプロセスの後にそれらがなくなった方が良いでしょう.

これを行う最も簡単で信頼できる方法は何ですか? git-subtree コマンド (Git 1.8.0 を使用して Windows 7 で実行しています) にアクセスする方法、またはそのコマンドを使用せずにこのマージを行う方法はありますか?

4

2 に答える 2

2

git subtreeリポジトリを不可逆的に結合したいだけなので、このユースケースではやり過ぎかもしれません。

まず、既存の各リポジトリで、関連するプロジェクト サブディレクトリ (projectA など) を作成し、git mv. それらの変更をコミットします。次に、他の各ブランチを順番にチェックアウトし、ブランチごとにそのプロセスを繰り返します。

次に、リポジトリの各ペアの同じ名前のブランチの各ペアに対して、を使用git remote addしますgit fetchgit mergeいずれかのリポジトリに一意の名前のブランチがある場合は、それらをマージする必要がありますmaster( FROM と TO のどちらをマージするかに応じて、-s oursまたはマージ戦略を使用します)。-s theirsそうしないと、プロジェクトの 3 分の 2 が失われるため、非常に奇妙になります (ただし、他の 3 分の 2 は他のブランチにまだ存在するため、それは問題ではない可能性があります)。

これで競合がなくなるため、これは機能し、すべての履歴が保持されるはずです。しかし、私はこれを試していないので、うまくいかない場合に備えて、古いリポジトリをしばらく削除しないでください!

于 2013-10-26T21:31:25.607 に答える
0

あなたは何について話していますか?git subtree最初の質問のコード例で説明されているように、 と入力して git-subtree を実行します。

于 2013-10-26T21:20:50.003 に答える