如何在命令行中跨多个外部进行单个SVN提交?

时间:2009-04-20 17:15:27

标签: svn

这可能是不可能的,但无论如何我都会问。

我没有详细说明为什么会这样,我有两个主要的结账工作,一个用于生产发布分支,一个用于主干。它们中的每一个都是对子项目的svn:externals引用的一小部分,在签出的svn目录下没有直接内容。

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

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

是不是可以从命令行执行相同的操作?每个外部的提交肯定可以编写脚本并别名为一个命令,但是如果可能的话,我宁愿避免使用单独的提交来混淆提交日志。

6 个答案:

答案 0 :(得分:11)

您可以在命令行客户端中指定要提交的所有文件和文件夹,包括外部。由于CL不会递归到外部,因此您必须单独在commit命令中指定它们:

svn ci working_copy externals1 externals2 -m "log message"

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

答案 1 :(得分:7)

不幸的是,你的假设是正确的。当前的subversion命令行工具将不会在提交期间递归到脱节的外部工作副本。 Eclipse可能会发现它全部都是相同的并且调整了所有内容,所以它只进行一次提交事务。

客户端的这个缺点实际上被列为在项目中定义外部时需要注意的问题之一。从1.6.1客户端开始,此限制仍然存在。

答案 2 :(得分:4)

使用最新的SVN,您可以: - include-externals

答案 3 :(得分:1)

如果您只有内容且没有属性修改,则可以执行以下操作:

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

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

答案 4 :(得分:0)

我遍历所有外部,并在每个外部执行“svn commit”,例如:

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

答案 5 :(得分:-2)

你可以这样做:

svn ci -m"my comment" *