私はネットワーク経由で接続されていない2つのリポジトリを同期させたいという問題に遭遇しています。私はgitバンドルを使用して2つのファイルを同期させましたが、コーナーケースを実行しました。git bundleを使ってairgapped reposを同期させる
私は経由でのgitバンドルを作成しています:<timestamp of lastBundle>
がlastBundle
タグに関連するコミット時間から選ばれた
git bundle create --since=<timestamp of lastBundle> --all <my_bundle_path>
。これにより、デルタだけをバンドルし、すべてのブランチですべての新しいコミットを取得することができます。この特定のシナリオが
master 2017-12-4 <dev who committed c2 finally gets around to pushing it to origin>
|\
| \
| c3 <lastBundle> 2017-12-3 <commit that was synched>
| |
c2 | 2017-12-2 <commit from dev, timestamped to when s/he committed it to their local repo>
\ |
\ |
c1 2017-12-1 <base commit>
lastBundle
が同期して発生し、airgappedレポのほとんど電流基準に対応し、誰かが自分の地元に早い時間でc3
よりc2
を犯したとき
コーナーケースがありますレポのコピーを作成し、原点への参照をすぐにプッシュしませんでした。したがって、次にlastBundle
以降のすべてのコミットをバンドルしてドライブに入れ、それを他のマシンにロードすると、c2
がマスターにマージするだけであるため、検証に失敗します。
私は共通の祖先を見つけることができるかどうかを確認するためにgit merge-base
を見て、その代わりに使用します。それは仕事をすることができますが、この状況は0,1、または複数のブランチで同時に発生する可能性があるため、ブランチごとにlastBundle
タグが必要になると思います。それは最適ではないようです。
理想的には、リポジトリ全体ではなく、git履歴内の特定の場所に対してgit bundle verify <mybundle>
を実行できるようにしたいと考えています。そうすれば、ディスクに置く前に失敗することを確認でき、バンドル時にコミットするまでの距離を変更するだけです。私が何をしようとしているか他の方法がない限り。
アイデア?
問題が解決されたので、タグを保存する方法の詳細な解説を追加することができます。それと似たような質問をしている人にも役立ちます。 –