14

をいじっているときgit、私はときどきいろいろ試してから、時間がかかりすぎるコマンド (たとえば、git svnネットワークの問題でハングするコマンド) を中止します。これは私に考えさせました:

コマンド (Ctrl-C または ) を強制的に中止することは常に安全killですか? コマンドがクラッシュした場合 (メモリ不足、バグ、ネットワーク/FS の問題)? 不完全な変更が「ロールバック」されるという意味で、リポジトリの変更は「トランザクション」ですか (バージョン管理ファイルシステムのように)? または、その場合、リポジトリが破損する危険がありますか?

git に取り組んでいる賢明な人々はこれを考慮に入れているに違いないと確信していますが、git マニュアルまたはオンラインで情報を見つけることができませんでした。

4

1 に答える 1

12

はい、リポジトリは完全にトランザクションです。

作業ツリーはほとんどトランザクションですが、簡単に処理できないコーナーケースがあります。Checkoutは必要なすべてのチェックを実行し、新しいコンテンツを一時ファイルに書き込みます。その間、中断しても何も変更されません。ただし、ファイルの名前を1つずつツリーに変更し、最後にHEAD refを更新します。そのフェーズで中断すると、ツリーに部分的な変更が加えられる可能性があります。それを原子的に行うことを可能にするための大量の名前変更はありません。

于 2011-12-05T11:06:50.850 に答える