私はローカルのLANにsvnサーバーを持っています。開発者はそれを使用してチェックイン/チェックアウトします。より安全を期すために、ラックスペースから Linux のサーバーを取り上げました。ローカル svn サーバーからリモート svn サーバーへの毎週の自動同期を行うことは可能ですか。リモートのものは主にリモートバックアップとして使用されますが、誰かがアクセスしたい場合に備えて、私たちのLANには静的または外部IPがないため、アクセスできます.
3 に答える
これにはsvnsyncを使用することをお勧めします。post-commit フックからトリガーされると、このツール (svn ディストリビューションの一部) により、2 つ (またはそれ以上) の svn サーバー間のライブ同期が可能になります。
svnadmin dumpを使用して、リポジトリ全体をダンプできます。postcommit フックを同じコマンドと共に使用して、後で再適用できるスタンドアロン形式でコミットをダンプできます。
これらと rsync を組み合わせると、サーバーを他のサーバーに効果的に複製できます。バックアップ サーバーが読み取り専用でのみアクセスされる限り、使用できます。障害が発生した場合、単純な svn スイッチにより、開発者はバックアップ サーバーを使用できます。
バックアップ サーバーがマスターにならない限り、バックアップ サーバーへの書き込みを禁止するようにACL を設定することをお勧めします。
ピーターが言及した別の解決策は svk である可能性がありますが、完全な自動同期には使用できません。両方のサーバーで競合する変更が行われた場合はどうなりますか? スクリプトは失敗するか、これを台無しにします。分散マージのようなものは、人間がレビューする必要があります。
さらに別の解決策は svn --mirror 方法です
リポジトリの同期を維持するための詳細については、これを読むようにしてください: How to synchronize two Subversion repositories? :)
バックアップ サーバーが読み取り専用で使用されている限り、rsync のような基本的なものが機能するはずです。しかし、誰かが何かをコミットしている間に状態を正確に同期しないように、同期するものがなくなるまで同期を続ける再試行ループを実装したい場合があります。
両方のサイトで読み取り/書き込みアクセスが必要な場合は、git などを使用し、「後方互換性」としてクライアント側で git-svn を使用する方が安全で簡単な場合があります。
もう 1 つのオプションは、SVK の上に構築された分散バージョン管理システムであるSVKを使用することです。しかし、それはクライアントに対して完全に透過的ではありません。