2011-12-05 13 views
10

gitで遊んでみると、時には試してみることがありますが、あまりに時間がかかりすぎるコマンドを中止することがあります(たとえば、ネットワーク上で問題が発生するgit svnコマンドなど)。これは私に考えさせました:gitリポジトリを変更するコマンドがクラッシュしたり、中止されたりすると、gitリポジトリが壊れることがありますか?

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

gitで作業している賢い人たちがこれを考慮していなければならないと確信していますが、gitマニュアルやオンラインでは情報が見つかりませんでした。

答えて

9

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

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

+0

レポとプッシュアクションがトランザクションであるという参考情報(gitソースまたはドキュメント)がありますか? –

関連する問題