1. ホーム
  2. git

[解決済み] 2 つの Git リポジトリをマージする方法は?

2022-03-18 09:21:10

質問

次のようなシナリオを考えてみましょう。

私は小さな実験的プロジェクトAを独自のGitレポで開発しました。それが成熟してきたので、A を大きなプロジェクト B の一部としたいと思います。B は独自の大きなリポジトリを持っています。そこで、A を B のサブディレクトリとして追加したいと思います。

A を B にマージするにはどうすればよいでしょうか。

どのように解決するのですか?

他のリポジトリの単一のブランチは、その履歴を保持するサブディレクトリの下に簡単に配置することができます。例えば

git subtree add --prefix=rails git://github.com/rails/rails.git master

これは、Rails masterブランチのすべてのファイルが"rails"ディレクトリに追加された、単一のコミットとして表示されます。 しかし、コミットのタイトルには古いヒストリーツリーへの参照が含まれています。

<ブロッククオート

コミットから'rails/'を追加 <rev>

どこ <rev> はSHA-1コミットハッシュです。まだ履歴を見ることができ、いくつかの変更を責めることができます。

git log <rev>
git blame <rev> -- README.md

これは実際の古いブランチをそのまま残したものなので、ここからディレクトリのプレフィックスを見ることはできないことに注意しましょう。 これは通常のファイル移動のコミットと同じように扱うべきです。

# finishes with all files added at once commit
git log rails/README.md

# then continue from original tree
git log <rev> -- README.md

他の回答にあるように、手動で行うか、履歴を書き換えるなど、より複雑な解決方法があります。

git-subtree コマンドは公式の git-contrib の一部であり、いくつかのパケットマネージャはデフォルトでこれをインストールします (OS X Homebrew)。 しかし、gitに加えて自分でインストールする必要があるかもしれません。