2009-04-20 57 views
20

这可能是不可能的,但我会问无论如何。如何在命令行中跨多个外部进行单个SVN提交?

没有深入讨论为什么它是这样的细节,我有两个主要的结账,我工作,一个用于生产发布分支,一个用于主干。它们中的每一个都是svn:externals对子项目引用的小集合,在检出的svn目录下没有直接内容。

也就是说,四个svn:externals指令添加了每个结帐目录中的所有内容。

当我通过Eclipse(/ Subclipse)进行提交时,我可以一次性提交所有外部项目的更改,这很好,因为它们只是在同一个存储库中的单独子项目,这使我避免连续对同一个仓库进行4次单独的提交。

从命令行执行同样的事情是不可能的吗?对于每个外部提交者来说,当然可以为一个命令编写脚本和别名,但是我宁愿避免在提交日志中单独提交以尽可能进行相关更改。

回答

7

不幸的是,你的假设是正确的。当前的Subversion命令行工具不会在提交期间递归到不相关的外部工作副本中。 Eclipse可能会发现它们都是相同的,并调整所有内容以便它只进行单个提交事务。

客户端的这个缺点实际上被列为在项目中定义外部项时要注意的问题之一。截至1.6.1客户端,这种限制依然存在。

9

您可以在命令行客户端中指定要提交的所有文件和文件夹,包括外部。由于CL没有递归到外部,你必须分别在你的提交命令中指定那些:

svn ci working_copy externals1 externals2 -m "log message" 

虽然没有尝试过。如果它不起作用,则必须单独指定所有修改的文件和文件夹,而不仅仅指定外部的“根”文件夹。

+0

可惜我不能在我现有的设置中测试这个作为两个外部虚假的共同的父目录,所以我在尝试你的解决方案时收到一个错误,指出它不是工作目录(因为它不是):svn ci htdocs/intra htdocs/update scripts includes -m“msg” – 2009-04-20 18:32:30

+0

...并且在脚本和包含中没有更改提交。 – 2009-04-20 18:33:58

-2

你可以这样做:

svn ci -m"my comment" * 
1

如果你只有内容没有属性修改,你可以做的东西一起:

svn st | egrep "^M" | awk '{print $2}' | xargs svn ci -m 'your message' 

如果添加/删除,...文件,您可能会修改egrep正则表达式以满足您的需求。

0

我遍历所有外部组件,并执行“S​​VN提交”每个,如:

for dir in $(svn propget svn:externals . | awk '{print $2}'); do svn commit $dir; done 
2

有了你可以做最新的SVN:--include-的外部

相关问题