SVN:hg'的模拟;添加删除

SVN:hg'的模拟;添加删除,svn,version-control,mercurial,Svn,Version Control,Mercurial,我们有一个包含多个文件(没有文件夹)的存储库。每次构建时,我们必须从另一个源(db)下载相同的文件夹,然后提交SVN更改-更新现有的、删除不存在的和添加新文件 所以,我们的想法是在SVN的每个构建中都有db脚本的“副本”(这就是为什么使用MSBuild) 问题是,我不知道hg的addremove的类似功能,它会自动同步两个文件夹 有人知道如何模拟addremove吗?对于这种情况,我只使用mercurial,并通过以下方式签入和签出svn: ... 可能不是您想要的。我一直使用svn附带的svn

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

所以,我们的想法是在SVN的每个构建中都有db脚本的“副本”(这就是为什么使用MSBuild

问题是,我不知道hg的addremove的类似功能,它会自动同步两个文件夹


有人知道如何模拟addremove吗?

对于这种情况,我只使用mercurial,并通过以下方式签入和签出svn:
... 可能不是您想要的。

我一直使用svn附带的
svn\u load\u dirs.pl
脚本来实现此目的。

我个人有一个小bash脚本来实现这一点(在linux上):

编辑:由于,这里有一个更简单的版本:

svn status | gawk '/^\?.*/ {print $2}' | xargs -r svn add
svn status | gawk '/^\!.*/ {print $2}' | xargs -r svn remove
(改进@Eric Karl的回答)

工作对象:

  • 具有“空格”字符的路径
  • 带有“@”字符的路径
  • 带有“\”字符的路径(在MSYS shell中)


这篇文章包含两个shell别名(一个名为add_all,另一个名为rm_all)。这基本上可以让您运行“add_all&&rm_all”来完成“hg addremove”的功能,但要使用subversion。我不敢相信这是不可能与svn,但我不知道如何。如果没有更好的选择,您可能想考虑使用HgSub来维护本地HG RePO,使用“代码> HG AdvDebug <代码>,然后将这些更改推回到Svn。为什么不跳过GRIP,只与它一起:<代码> SvN状态> GAWK’/^?*/{打印2美元} xARGS -R Svn添加< /代码> @匿名好问题,可能是因为我在尝试使用grep之前已经通过管道查看了实际输出。当然,实际上没有阅读gawk手册页,因此不知道该语法。谢谢。包含空格的文件名呢?我不知道足够的gawk语法,无法将记录分隔符更改为\0。。。
svn status | gawk '/^\?.*/ {print $2}' | xargs -r svn add
svn status | gawk '/^\!.*/ {print $2}' | xargs -r svn remove
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@'