在我的项目中,我有一个包含资源的文件夹,当我将其添加或删除到我的工作副本时,我不想手动添加或删除到资源库。
我编写了一个简单的bash脚本,用于检查svn state
并为svn add
调用标有?
和svn remove
的文件,以查找!
的文件。我将这个bash脚本添加到了我的构建脚本中。问题是,svn remove
在使用本地不存在的文件调用时返回错误。这导致我的构建脚本被中止并返回错误。
有没有办法来抑制这些错误?我尝试了--force
和--quiet
。没有帮助。
示例:
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
答案 0 :(得分:4)
有(至少)两种不同情况,其中svn stat
打印带有感叹号的行:
svn rm
。svn add
,工作目录中不再存在该文件。 svn rm
适用于第一种情况,但在第二种情况下退出时出错。有几种方法可以解决这个问题 - 取决于您想要实现的目标:
touch "$filename" ; svn rm --force "$filename"
。svn revert "$filename"
。答案 1 :(得分: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