SVNリポジトリはどのように破損するのですか?
-
22-07-2019 - |
質問
すでに何度か、SVNリポジトリの1つが破損し、プロジェクトの一部のバージョンまたはブランチで何をすることができるかがわからない状況に陥りました。リポジトリが破損する原因は何ですか?
クライアント間の非互換性は、特に文字セットで問題を引き起こす可能性があるようです。
解決
基本的に3つの異なるケースがあります:
- 障害のあるハードウェア(メモリ、fsの破損など)
- サーバーへのログインアクセス権を持つユーザーは、リポジトリファイルを破損する可能性があります。
- Subversionのバグ。
障害のあるハードウェアは、最も明らかな場合を除いて、通常、見つけるのが最も困難です。ケース2は、サーバーへのログインアクセスを制限することで防止できます。 その他すべてはSubversionのバグです。 (これには、クライアントとサーバー間の互換性の問題が含まれます。)Subversionクライアントを使用するだけで(クライアントにIMOのバグがあっても)決して破損しないようにする必要があります。
他のヒント
ファイルシステムの破損の可能性、または内部のsvnディレクトリをいじくり回している可能性がありますか?
ハードウェアに障害がある可能性は常にあります。メモリのビットエラーのようなものは、単にコンピューターをクラッシュさせるのではなく、サイレント破損を引き起こす可能性があります。 svnサーバープロセスが影響を受ける場合、リポジトリが破損する可能性があります。
リポジトリがsvnサーバーのローカルディスクではなくNFSにある場合、berkley db形式を使用していると破損する可能性があります。 svn 1.5では、FSFSは新しいリポジトリのデフォルトになりました。NFSのようなロックされていないファイルシステムで生活することは完全に幸せです。
私はそれを数回経験しました。サーバーが特定のことを行うのに長い時間を費やしている間にクライアントがいなくなった場合、SVNはうまく対処できないようです。正確な詳細はわかりませんが、読み取り専用プロセスだと思ったものに対していくつかの kill -9
を実行し、最終的に svnadmin cleanup
を実行する必要がありました。 >その後、サーバーが再び応答する前に。
レポの破損が発生したため、しばらく時間がかかりました。サーバー上で、レポ内の.svn dirの所有者を誤って関係のないユーザーに変更してしまいました。 SVNを使用すると、リポジトリを削除して再作成するまで、破損エラーが発生しました。修正した後でも。 おでこ
これは file://
ベースのリポジトリでは非常に一般的ですが、リポジトリにアクセスするユーザー/サービスが1人だけの場合、これは発生しません。