3

In my project I have a folder with resources which I don't want to manually add or remove to the repository as I add or remove them to my working copy.

I wrote a simple bash script that checks svn state and calls svn add for files marked with a ? and svn remove for files with a !. I added this bash script to my build script. The problem is, svn remove returns an error when called with a file that doesn't exist locally anymore. This results in my build script being aborted and returning an error too.

Is there a way to suppress these errors? I tried --force and --quiet. Didn't help.

Example:

MacBook-Pro:proj Bill$ echo "test" > foo.bar
MacBook-Pro:proj Bill$ svn st
?       foo.bar
MacBook-Pro:proj Bill$ svn add foo.bar 
A         foo.bar
MacBook-Pro:proj Bill$ rm foo.bar 
MacBook-Pro:proj Bill$ svn st
!       foo.bar
MacBook-Pro:proj Bill$ svn rm foo.bar
D         foo.bar
svn: 'foo.bar' does not exist
4

2 に答える 2

4

(少なくとも)svn stat感嘆符付きの行を印刷する2つの異なるケースがあります。

  1. ファイルはリポジトリに存在し、作業ディレクトリに存在せず、svn rm使用されませんでした。
  2. ファイルはリポジトリに存在せずsvn add、ファイルで使用され、ファイルは作業ディレクトリに存在しなくなりました。

svn rm最初のケースでは機能しますが、2番目のケースではエラーで終了します。この問題を解決するには、何を達成したいかに応じて、いくつかの方法があります。

  • どちらの場合もファイルを削除する場合は、次のようにします
    touch "$filename" ; svn rm --force "$filename"
  • 2番目のケースでのみファイルを削除し、最初のケースで元に戻す場合は、次のようにします
    svn revert "$filename"
于 2012-05-19T20:02:31.093 に答える
3

だから、私の質問に答えるために、を使用し--keep-localて問題を修正しました。

これが私が使用することになったスクリプトです。これにより、バージョン管理されていない(?)としてマークされたファイルがチェックされ、それらが呼び出さsvn addれます。次に、欠落()としてマークされたファイルをチェックし、それら!を呼び出しsvn rmます。

svn st "$Resources" | grep '^?' | sed 's_^?       \(.*\)$_svn add "\1"_g' | sh
svn st "$Resources" | grep '^!' | sed 's_^!       \(.*\)$_svn rm --keep-local  "\1"_g' | sh
于 2012-05-19T19:57:49.550 に答える