如何获取SVN中分支的原始修订版?

时间:2012-08-18 02:53:03

标签: svn branch

根据this blog post此命令应告诉我何时创建了protobuf的release-2.0.2rc1标记:

  

svn log -v -r0:HEAD -l1 --stop-on-copy http://protobuf.googlecode.com/svn/tags/release-2.0.2rc1/

然而它没有:

svn log -v -r0:HEAD -l1 --stop-on-copy http://protobuf.googlecode.com/svn/tags/release-2.0.2rc1/
------------------------------------------------------------------------
r54 | kenton@google.com | 2008-09-29 20:26:43 -0400 (Mon, 29 Sep 2008) | 3 lines
Changed paths:
   M /tags/release-2.0.2rc1/configure.ac
   M /tags/release-2.0.2rc1/java/pom.xml
   M /tags/release-2.0.2rc1/python/setup.py

Update version number in 2.0.2rc1 release branch.

如果我查看修订版53,我会得到实际副本:

svn log -v -r53 -l1 --stop-on-copy http://protobuf.googlecode.com/svn/
------------------------------------------------------------------------
r53 | kenton@google.com | 2008-09-29 20:23:29 -0400 (Mon, 29 Sep 2008) | 3 lines
Changed paths:
   A /tags/release-2.0.2rc1 (from /trunk:52)

Tagged release candidate 2.0.2rc1.

因此该命令似乎在复制后让我得到修订。我如何获得给我修改分支的命令?

3 个答案:

答案 0 :(得分:2)

你正在做的是将repo的整个空间过滤到你想要的分支,并询问'该分支上的第一个修订是什么'。很明显,之前的修订版(创建它的那个)并不是其中的一部分,因为分支在创建之前不存在。

因此,第一个命令的作用是告诉您使用分支的初始修订 - 第一个提交或复制。它没有给你修改前一个版本(添加分支时),因为这不是你的分支的修改,而是父的修改。 (想想看,就像svn中的每个目录都不是你在资源管理器中看到的目录,其中添加子目录是添加一个新子目录,而是将每个目录视为带有子目录列表的文本文件)

出于实际目的,它工作正常,除非您想要对父目录(标签目录)进行操作,您不需要找到它所分支的修订版本,只需要对分支进行第一次修改,并停止 - on-copy为您提供。

答案 1 :(得分:1)

-l限制要显示的日志条目数,因此如果您有多个提交,则只会获得最新的提交。如果您省略-l1,您将获得完整列表,其中最后一个条目是创建分支的条目。

当然,如果您正确地使用标签,那么您的第一个命令就可以正常工作了。你只有一个标签提交,这是你创建它的副本。之后你永远不应该修改标签。将它们视为书签: - )

答案 2 :(得分:1)

这有时需要两个命令。我没有尽力编写问题脚本,因为我的目标是从SharpSvn获取此信息,而不是从SVN命令行获取。但是,从命令行执行此操作的过程如下:

svn log -v -r0:HEAD -l1 --stop-on-copy http://protobuf.googlecode.com/svn/tags/release-2.0.2rc1/
REM inspect the output and see that there is no mention of /tags/release-2.0.2rc1/ being created or copied.
svn log -v -r53:0 -l1 --stop-on-copy http://protobuf.googlecode.com/svn/tags/release-2.0.2rc1/