2008-11-26 154 views

回答

2

我的建议是在同一行弗洛洛建议。但是,需要一个范围。 你可以使用下面的shell函数。

function checkout_files_in_revrange() 
{ 
    svn_url=$1; 
    start_rev=$2; 
    end_rev=$3; 
    for theCheckoutCanditate in `svn log -r $start_rev:$end_rev --verbose --incremental | grep " M " | cut -f5 -d' ' | cut -f3- -d/` 
    do 
    svn co $svn_url/$theCheckoutCandidate -q; 
    done 
} 
+0

它不工作,如果目录或文件中有空格按计划 – Parasu 2016-10-05 11:37:40

0

我不完全地知道这是可能的,但你也可以做这样的事情:

svn checkout --revision <revisionNumber> 

得到一定的修正和

svn log --revision <revisionNumber> 

列出在chaned所有文件修订

+0

这将始终是指给定的修订版的所有文件(即在给定的版本没有发生变化的文件,他会给你它的最后一个版本) – flolo 2008-11-26 13:41:31

+0

盛衰SVN的日志是我脑子里想的 – Drejc 2008-11-26 15:00:09

1

如果你使用svn日志与-v(详细选项):

svn log -r <revision> -v <path> 

你会得到包括修改过的文件的输出:

r3 | ciaran | 2008-11-16 12:24:30 +0000 (Sun, 16 Nov 2008) | 1 line 
Changed paths: 
    A /trunk/apache/apache.conf 
    A /trunk/application/controllers 

Commit message goes here 

你应该能够操纵与一些grepping等生产SVN共同命令序列。

2

现在有一种方法可以直接获取已更改的文件,而不是全部。

我的想法是:使用列表的详细输出(显示最后更改的版本),通过awk进行过滤,并检查其余部分。例如。搜索这42版更改的文件,我会用这个

VERSION=42 
svn list -v -R -r $VERSION svn://... | awk "/^[ ]*$VERSION/ {print \$7}" > files_to_checkout 

后来又做了svn update -r $VERSION 'cat files_to_checkout'(或共同的URL,这取决于你将要运行的命令)。

编辑:其他甚至更短: 使用svn diff命令,并用svn co替换为-x和--diff-cmd diff命令。这需要一些论点转移黑客(我不会在这里详细说明),但只需要一行,没有intermedate文件(你可以保存以上,但这将有可读性)

1

我们这样做是一个MSBuild脚本:

第1步: - 使用diff命令来获得修改的文件列表,输出重定向到目标目录中的临时文件 第2步: - 读取临时文件到的ItemGroup

<Exec command="$(svnExecutable) diff -r $(StartRevision):$(EndRevision) $(DOUBLE_QUOTES)$(SvnRepositoryPath)/$(DOUBLE_QUOTES) --no-diff-deleted --summarize &gt; $(TempFilePath)" WorkingDirectory="$(WorkDirectory)" /> 

+0

对不起粘贴代码没有工作 - 如果有人要来看看添加在这里评论 – user41040 2008-11-26 14:39:31

0

另取在nswering你的问题:

假设你有一个现有的工作副本,你应该在包含你正在查看的文件的目录的根目录的根目录下使用'svn update',因为它检索你当前的版本和HEAD版本之间的变化尽可能少的数据。

较早的源代码管理系统,如CVS和VSS要求每个文件服务器有这个文件改变了吗?,而颠覆只是将一个树的变化作为一个动作发送。当你将一个文件列表传递给svn更新时,你没有这个优势。

因此转移发生了什么变化的最有效的方式是刚刚更新。这只会将HEAD中变化的二进制比较与工作副本的基本版本进行比较。


如果你正在试图解决的问题是, SVN更新是慢,那么我们正在努力解决Subversion版本1.7。

这个版本将引入一个新的工作拷贝的数据存储格式,这将使具有更快地锁定整个工作副本(例如更新)简单的操作。

0

在几乎大部分人都认为,同一行(但只有在使用grep和awk的系统),你可以通过执行

svn log -v --revision <revision_number> | grep "^ " | awk '{print $2}'获取列表。

0

SVN DIFF -r starting_revision:ending_revision_or_HEAD --summarize

相关问题