私は現在、多くのユーザーがおり、参照されたレポが自動的に(頻繁に)更新されるときにgit clone --reference
を最適化として使用するのが安全かどうかを調査中です。Gitクローン - 参照と同時更新
主なリポジトリが離れているため(ゆっくりと)多数の大きなリポジトリを使用する多くのユーザーが1台のサーバーにいるという計画です。
初期クローン速度とサーバーディスク領域の両方を最適化するために、ユーザーはgit clone --reference /home/robot/repo.git <repo>
のクローンスクリプトを使用して、ほとんどのデータを共有します。
"ロボット"ユーザーは、cronジョブで頻繁にgit fetch
操作を実行します。
Gitリポジトリへの同時アクセスは、同じユーザが所有していても、ディレクトリが書き込み可能な場合でも安全ですが、この場合、参照リポジトリは読み取り専用ですユーザーはロックファイルをそこに書き込むことができません。
私の質問は、「ロボット」レポが他のユーザーがリポジトリにアクセスしている間にfetch/gc/repackを実行するとどうなりますか?遠隔レポからのフェッチへのクローン/フェッチ/プルフォールバックをゆっくりと行いますか?ログ/チェックアウト/リベースなどの他のコマンドは失敗しますか?ユーザーリポジトリで破損が発生する可能性がありますか?
注:
- 私はそれを読むために開始さ前に、ユーザー・プロセスは、レポがロックされているかどうかを確認することができます確信しています。私はの間に書き込み操作について質問しています。の読み取り中です。
- ドキュメントでは、ガベージコレクトが参照されたクローンを壊す可能性があることを認識していますが、この場合は早送りの更新のみが行われるため、削除されることはありません。
- 私はドキュメントを見てきましたが、 "concurrent"という単語は表示されませんので、私はその件に関する公式声明を見つけるのに苦労しています。
- このサイトのその他のほとんどの質問は、同時プル、プッシュ、フェッチに関するものです。その場合、これらの操作はアトミック(参照が変更されているか、変更されていない)なので安全です。パックされたオブジェクトファイルへの継続的なアクセスが必要となるため、共有または参照されたクローンの場合はあまり明らかではないようです。
- あなたはかなり複雑なの束のために安全だなど、
ありがとうございます。私が理解している重要な点は、オブジェクトがそこに2回あるかもしれないが、決してそこにはないことであり、パックファイルは原子的に作成されるということです。これは安心です。 :-) – ams
彼らは本当に原子的ではありませんが、それらは*原子性をシミュレートします(私は最近、参照用クローンを使用するように$作業を確信していますので、まだ多くの経験はありませんが、 。 – torek
ファイルを側面に作成し、それを位置に移動することは、ファイルシステムでは不可能です。私はそれを取る。 – ams