2

アプリケーションの一連の構成ファイルを含むディレクトリ構造があります。構造は Subversion で維持され、いくつかのシステムではそのディレクトリ構造がチェックアウトされています。開発者はリポジトリ内の構造に変更を加え、サーバー上のスクリプトは定期的に「svn update」を実行します。

ただし、ディレクトリの 1 つの下にある .svn ディレクトリをうっかり削除したり、属していないファイルを貼り付けたりする人がいることがあります。私は手続き上の不誠実な人の手を遮断するためにできることをしますが、更新スクリプトがこれらの変更を適切に (まあ、自動的に) 処理できることを望んでいます。

したがって、私が必要としているのは、Subversion に含まれていないファイルを削除する方法と、リポジトリ内の何かの邪魔になっているローカル ディレクトリを踏みにじる方法です。したがって、次のような警告

Fetching external item into '/path/to/a/dir'
svn: warning: '/path/to/a/dir' is not a working copy

Fetching external item into '/path/to/another/dir'
svn: warning: Failed to add directory '/path/to/another/dir': an unversioned directory of the same name already exists

自動的に解決されるはずです。

スクリプトで svn status 出力を解析するか、svn C API を使用して独自の「クリーンアップ」プログラムを作成して、これを機能させる必要があるのではないかと心配しています (そうです、このように機能する必要があります; rsync / tar+scp など、さまざまな理由でオプションにならないものがあります)。しかし、誰かが問題を処理する解決策 (または部分的な解決策) を持っている場合は、それについて聞いていただければ幸いです。:)

4

2 に答える 2

0

最初に svn cleanup を実行してロックを処理する perl スクリプトを作成し、次に svn status の --xml 出力を解析して、状態の悪いものをすべて削除します (少し複雑な外部を除く)。

それから私はこれを見つけました : http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean私のコードの一部で、これを少し強化するだけです。私の XML 解析はそれほどきれいではありませんが、これはシステム コマンド (非常に大きなリポジトリと 5 分ごとに実行されるコマンドで重要です) を起動するよりもいくらか高速であると確信しています。

私は最終的に、この質問への回答でそのスクリプトを見つけました-Subversionのバージョン管理されていないファイルを自動的に削除します-Tortoise SVNを使用するためのすべての提案の中に隠されています。

于 2012-04-15T02:56:22.457 に答える