3

在我的项目中,我有一个文件夹,其中包含我不想手动添加或删除到存储库中的资源,因为我将它们添加或删除到我的工作副本中。

我编写了一个简单的 bash 脚本,它检查svn state并调用svn add标有 a?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
4

2 回答 2

4

(至少)有两种不同的情况会svn stat打印带有感叹号的行:

  1. 该文件存在于存储库中,不存在于工作目录中,并且svn rm未被使用。
  2. 该文件在存储库中不存在,svn add已在该文件上使用,并且该文件不再存在于工作目录中。

svn rm在第一种情况下有效,但在第二种情况下退出并出现错误。有几种方法可以解决此问题 - 取决于您想要实现的目标:

  • 如果您想在这两种情况下删除文件,请执行以下操作:
    touch "$filename" ; svn rm --force "$filename"
  • 如果您只想在第二种情况下删除文件,并在第一种情况下恢复,请执行以下操作:
    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 回答