SVN:类似于hg的addremove

时间:2011-05-13 12:14:10

标签: svn version-control mercurial

我们有一个包含多个文件(没有文件夹)的存储库。每个构建时间我们必须从另一个源(db)下载相同的文件夹,然后提交到SVN更改 - 更新现有,删除不存在并添加新文件。

所以想法是在每次构建时在SVN中“复制”db脚本(这就是使用 MSBuild 的原因)

问题是我不知道 hg addremove 的模拟 - 它会自动同步两个文件夹。

有谁知道如何模拟 addremove

4 个答案:

答案 0 :(得分:9)

我个人有一个小的bash脚本来做这件事(在linux上):

svn status | grep "^\?" | gawk '{print $2}' | xargs -r svn add
svn status | grep "^\!" | gawk '{print $2}' | xargs -r svn remove

编辑:感谢cesar,这是一个更简单的版本:

svn status | gawk '/^\?.*/ {print $2}' | xargs -r svn add
svn status | gawk '/^\!.*/ {print $2}' | xargs -r svn remove

答案 1 :(得分:1)

对于这类事情,我只使用mercurial,并使用以下命令检入和退出svn: https://www.mercurial-scm.org/wiki/HgSubversion ......可能不是你想要的。

答案 2 :(得分:0)

为此,我一直使用svn附带的svn_load_dirs.pl脚本。

答案 3 :(得分:0)

(改进@ Eric-Karl的回答)

适用于:

  • 带有'空格的路径'字符
  • 路径与' @'字符
  • 路径与' \'字符(在MSYS shell中)
svn status | perl -ne 'print "$1\0" if /^\?\s+([^\r\n]+)/' | xargs -0 -r -I FILE svn add 'FILE@'
svn status | perl -ne 'print "$1\0" if /^\!\s+([^\r\n]+)/' | xargs -0 -r -I FILE svn remove 'FILE@'