2017-06-29 15 views
0

私は2台のリモートサーバーを使用しています。複数のリモートで異なる履歴があります

異なる履歴開始点を作成することは可能ですか?例えば

:この場合

Remote 1: commit1 -> commit2 -> commit3 -> commit4

Remote 2: commit3 -> commit4

、私はあなたがしたいことができない場合commit3は、リモート2.

答えて

1

説明している場合、Repo 2は「浅い」リポジトリです。あなたがレポ1

A -- B -- C -- D 

を持っているなら、あなたは

git clone --mirror --depth=2 --no-single-branch file://localhost/path/to/repo1 repo2 

としてレポ2を作成することができ、今レポ2は、このレポで

C -- D 

であるあなたは、Cが親を持っていることがわかりますの親として表示されているBのSHA IDが表示されます。コミットB自体(およびその履歴)は存在しません。

mirrorは、これを第2のリモートとして記述したため、mirrorを使用しました。だから、これは裸で、ブランチをリモートブランチの代わりにローカルブランチとして設定します。必要に応じて、ミラーではない浅いレポ(--bareの有無にかかわらず)を作成することができます。実際の鍵はdepthです。

デフォルトでは、depthは1つのブランチのみをコピーしますは、その特定のブランチの参照をフェッチするように設定します。 no-single-branchは、すべてのrefをマッピングする通常の動作を復元します。つまり、Repo1に大きな履歴や複雑な履歴が含まれている場合は、ここに示したものと同じくらい簡単ではない場合があります。

ローカルパスを使用する場合、depthは無視されます。上記の理由で私はfile://のURLを使用しています。

これは間違いなく特別なケースです。コミットのIDは完全な履歴を符号化します(これは、Cが親SHA IDを「知っていなければならない理由」を調べる方法の1つです)、一般に履歴が異なるとRepoに異なるコミット(おそらく同様のことが起きる可能性があります) Repo 2よりも1;彼らは単一の、一貫したローカルレポのためのリモコンとして共存できませんでした。しかし、最も初期の履歴を一点まで除外したいという特定のケースでは、現代のgitがこの解決法を提供します。

-1

の履歴出発点になりたいです同じローカルリポジトリでそれを行う。

リポジトリを2回複製することができます。最初のリモコンには最初のクローンを、2番目のリモコンには2番目のクローンを保存します。 2番目のクローンでは、履歴を書き直す必要があります:https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

これは私が考えている唯一の解決策です。同じリポジトリ(ローカル/リモート)に対して異なる履歴を持つことはできません。

関連する問題