Gitは、電源が切れたときにどの程度堅牢ですか?


24

ある日、私はGitを使用しており(まだ使用しています)、コミット中に電気が切れました。

私(実際には電気)が戻ったとき、gitリポジトリは破損していました。正確な名前は覚えていませんが、「無効なref」などのようなものでした。

操作の途中でコミットが中断されたと推測するのは簡単です(インデックスの追加を自動的に行うIntelliJを使用してコミットしていました)。また、実際には、「commit」は同じ名前のDBMS操作ほどACIDではないことを推測するのは簡単でした。

Q:レポ変更操作が原子性を尊重するようにする方法はありますか?すなわち、電気が再び落ちて、私がコミットしている場合、ファイルシステムが破損した状態にならないようにしたいです。


10
UPSを購入しますか?.....
ロバート・ハーヴェイ

毎日のバックアップを作成しますか?
ラチェットフリーク

それは問題を解決しません-gitリポジトリがサーバー上にあり、ローカルリポジトリからプッシュすることを想像してください。サーバーでコミットを吸収している間、エネルギーは再び低下します。同じ問題が、今回は人間の存在なし。
ルイスマスエリ

回答:


10

Gitのコミットを完全に時間切れの電源障害に耐えられるようにする方法があるかどうかはわかりませんが、リポジトリを修正できるかもしれません。

Gitオブジェクトは不変であると想定されているため、古いコミットはすべて有効のままです。この答えによれば、ハッシュ.git/refs/heads/<branch-name>を変更して、作業していたブランチのヘッドを前のコミットに変更できます(それらはで確認できます.git/logs/HEAD)。

その答えに対するコメントは、このメソッドは「まだリポジトリを壊れた状態のままにしますが、これはそれを回復することを可能にします」と言っています。私はこれをテストしませんでした(あなたの状況をどのように再現するのか分かりません)が、リカバリはを介して行われgit gc、破損したコミットを削除すると想定しています。


6
「あなたの状況を再現する方法がわからない」プラグを抜く?;)
ヤニス

3
...これはSVNだったが、Gitのコミットは、ヒトのタイミングの能力のために速すぎているかもしれない場合@YannisRizos
IDAN Arye

5
Gitはオープンソースですよね?だから、問題を再現するデータがディスクに保存される前にブレークポイントを設定するコードを、構築する-と、その後プラグを引っ張ります。
ジョンサンダース

10

Gitのストレージシステムはトランザクション対応ではないため、ハードウェアの問題が原因で一貫性のない状態になる可能性があります。一方、Gitは非常に高速であるため、「電源障害」の種類の問題に遭遇するのは本当に不運でなければなりません(ディスクの系統的な問題は別の問題です)。速度の一部は、トランザクションではないという事実に正確に基づいています。トランザクションは、データを書き込んだことをディスクから確認するまで待たなければならないため、非常に高価です。(データベースはこのコストを隠そうとあらゆる種類のことを行いますが、最終的にはまだ価格を支払います。競合するDVCSの一部トランザクション型であり、はい、gitと同じハードウェアではかなり遅いです。)

最悪の場合-壊滅的なディスク障害(これは私が見たことがあります)-DVCSが回復する唯一の方法は、分散されているという事実を使用することです。ごく最近まで別のシステムに変更をプッシュし、それらが多くの異なるホストと共有している場合、リカバリはこれらの他の場所の1つをアーティファクトソースとして使用するだけで、ブランチを(一時的であっても)。そのように、興味深いブランチの履歴を取り戻し、非常に迅速に作業を再開できるようになります。一度に配布されたリポジトリのコピーを大量に消してしまうものは、その後のプログラミングを心配しないような災害(major石への大きな影響を考えてください)か、あからさまな敵の行動です。(そのような敵を作らないように…)これは、すべてをホストする中央サーバーを失うことが致命的な打撃である非分散システムとはまったく対照的です。


5
ブランチをプッシュせず、バックアップを保持せず、UPSを使用しない場合、ハードウェアの問題ですべてがなくなった場合にのみ責任を負うことになります。ツールを入手しました…
ドナルフェローズ

1
git操作がトランザクションであることを保証する方法やプラグインはありませんか?そのようなオプション-またはプラグイン-が存在した場合、それら(つまり操作)が遅くなることは気にしません。幸いなことに、ハードウェアに問題はありません。残念ながら、この建物ではエネルギーが頻繁に消えます(2週間に1回は自分の存在になると言います)。幸いなことに、私はそれをgithubにリモート(クローン/プッシュ)しました。残念なことに、すべてをロールバックして、プロジェクトを再度複製する必要があるとき、私は時間を失います。
ルイスマスエリ

2
作業中の頻繁な停電は、ハードウェアに損傷を与えないとしても、ファイルシステムの破損のリスクを本当に高めていることを意味します。UPSを入手するというアイデアを楽しんでいないのはなぜでしょうか。UPSは、記載されている問題のほとんどを解決し、おそらく最良の答えになるでしょう。
バートシルバース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.