2 つのリポジトリ URL があり、両方に同じものが含まれるように同期したいと考えています。Mercurial では、私がやろうとしていることは次のようになります。
hg pull {repo1}
hg pull {repo2}
hg push -f {repo1}
hg push -f {repo2}
これにより、両方のリポジトリで 2 つのヘッドが生成されます (2 つのヘッドを持つことは一般的ではないことはわかっていますが、同期化のためにこれを行っているため、非対話的である必要があります。ヘッドはリポジトリの 1 つから手動でマージされ、次に同期が再度実行されます)。
Gitでも同じことをしたいです。たとえば、ユーザーの操作なしで、すべての変更を両方のリポジトリに取得し、複数のブランチ/ヘッド/後でマージするものをすべて取得します。リモート (?) を追加するのではなく、コマンドで URL を使用してこれを実行しようとしています。これは、多数のリポジトリが関係している可能性があり、それらすべてにエイリアスを設定すると、スクリプトがより複雑になるためです。
現在、レポのクローンを作成しgit clone --bar {repo1}
ていますが、「更新」に苦労しています。試してみましget fetch {repo1}
たが、変更が反映されないようです。git log
repo1 に追加された変更セットはまだ表示されません。
私も--mirror
自分のpush
andclone
で使用してみましたが、両方のリポジトリからの変更を保持する必要があるのに対し、ローカルに存在しない repo2 から変更セットをリモートにしているように見えました:/
これを行う最善の方法は何ですか?
編集:私がやろうとしていることを少し明確にするために...
私は 2 つのリポジトリ (例: BitBucket と GitHub) を持っており、人々がどちらにもプッシュできるようにしたいと考えています (最終的には 1 つは Git、もう 1 つは Mercurial になりますが、単純化するために今のところは両方とも Git であると仮定しましょう)。両方のリポジトリに両方の変更セットが含まれるように「同期」するスクリプトを実行できる必要があり、後で手動でマージする必要がある場合があります。
最終的に、これはリポジトリの 1 つ (たとえば、Mercurial のもの) と対話するだけでよいことを意味し、私のスクリプトは、マージできる Git の変更を定期的に取り込み、その後プッシュバックされます。
Mercurial では、これは些細なことです。両方のリポジトリからプルし、プッシュし-f/--force
て複数のヘッドをプッシュできるようにします。その後、誰でもリポジトリの 1 つを複製し、ヘッドをマージして、プッシュ バックできます。Git で最も似たようなことを行う方法を知りたいです。100% 非インタラクティブである必要があり、プロセスを無限に繰り返すことができる状態に両方のリポジトリを保持する必要があります (つまり、履歴の書き換えや変更セットの変更などはありません)。