是否可以仅检出SVN存储库中修订版或修订版范围内的文件,而不检出任何未修改的文件?如何才能检出在SVN修订版本中修改过的文件?
回答
我的建议是在同一行弗洛洛建议。但是,需要一个范围。 你可以使用下面的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
}
如果你使用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共同命令序列。
现在有一种方法可以直接获取已更改的文件,而不是全部。
我的想法是:使用列表的详细输出(显示最后更改的版本),通过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文件(你可以保存以上,但这将有可读性)
我们这样做是一个MSBuild脚本:
第1步: - 使用diff命令来获得修改的文件列表,输出重定向到目标目录中的临时文件 第2步: - 读取临时文件到的ItemGroup
<Exec command="$(svnExecutable) diff -r $(StartRevision):$(EndRevision) $(DOUBLE_QUOTES)$(SvnRepositoryPath)/$(DOUBLE_QUOTES) --no-diff-deleted --summarize > $(TempFilePath)" WorkingDirectory="$(WorkDirectory)" />
对不起粘贴代码没有工作 - 如果有人要来看看添加在这里评论 – user41040 2008-11-26 14:39:31
另取在nswering你的问题:
假设你有一个现有的工作副本,你应该在包含你正在查看的文件的目录的根目录的根目录下使用'svn update',因为它检索你当前的版本和HEAD版本之间的变化尽可能少的数据。
较早的源代码管理系统,如CVS和VSS要求每个文件服务器有这个文件改变了吗?,而颠覆只是将一个树的变化作为一个动作发送。当你将一个文件列表传递给svn更新时,你没有这个优势。
因此转移发生了什么变化的最有效的方式是刚刚更新。这只会将HEAD中变化的二进制比较与工作副本的基本版本进行比较。
如果你正在试图解决的问题是, SVN更新是慢,那么我们正在努力解决Subversion版本1.7。
这个版本将引入一个新的工作拷贝的数据存储格式,这将使具有更快地锁定整个工作副本(例如更新)简单的操作。
在几乎大部分人都认为,同一行(但只有在使用grep和awk的系统),你可以通过执行
svn log -v --revision <revision_number> | grep "^ " | awk '{print $2}'
获取列表。
SVN DIFF -r starting_revision:ending_revision_or_HEAD --summarize
- 1. Phabricator SVN修订版文件上下文
- 2. SVN更新修订历史记录中的修订版本
- 3. 如何跳过svn版本库中的修订
- 4. SVN:如何获取文件的第一个修订版本?
- 5. SVN:改变过去的修订版,并在当前有改变
- 6. 如何从远程SVN树中读取文件/目录版本/修订版本?
- 7. tortoise svn过滤日志的修订版
- 8. PHP导出特定的SVN修订版?
- 9. 如何比较本地和版本库SVN修订版本?
- 10. 如何冻结SVN中文件的修订版
- 11. 如何查看在特定修订版本签出的文件?
- 12. svn比较版本的修订范围
- 13. SVN修订版关键字
- 14. 我如何定制SVN修订版?
- 15. 当前svn修订版本号更新版本在appengine-web.xml中
- 16. svn:修订版中不存在路径
- 17. 如何查看修改了文件给定行的所有修订版本?
- 18. 在修改svn时,以前的所有修订版本是否都已更新?
- 19. 如何找出文件被删除的修订版本?
- 20. 能否从SVN中删除特定的修订版本?
- 21. 显示每个NetBeans项目文件的svn修订版本号
- 22. svn查找具有不同修订版本的文件
- 23. SVN能否在修订版本X上创建标签,但排除一些以前的修订版本?
- 24. git-svn:如何知道git-svn工作副本的当前SVN修订版本?
- 25. 如何才能选择revision_id超出当前活动修订版本的行?
- 26. Eclipse中的树比较修订版SVN
- 27. 在版本库中修改版本而无需修改版本
- 28. Jenkins插件用于检出SVN中的单个修改文件
- 29. 修订版本与版本
- 30. SVN错误 - 保留本地修改或版本的文件,
它不工作,如果目录或文件中有空格按计划 – Parasu 2016-10-05 11:37:40