3

根据this blog post这个命令应该告诉我release-2.0.2rc1protobuf标签的创建时间:

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.

因此,该命令似乎让我在复制后进行了修订。如何获得为我提供分支修订版的命令?

4

3 回答 3

2

这有时需要两个命令。我没有为问题编写脚本,因为我的目标是从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/
于 2012-08-19T12:25:27.180 回答
2

您在那里所做的是将存储库的整个空间过滤到您想要的分支,并询问“该分支的第一个修订版是什么”。现在很明显,以前的修订版(创建它的那个)不是其中的一部分,因为分支在创建之前并不存在。

因此,第一个命令的作用是告诉您使用该分支的初始修订版 - 第一次提交或复制。它不会为您提供对先前版本的修改(添加分支时),因为那不是对您的分支的修改,而是对父分支的修改。(认为​​它就像 svn 中的每个目录都不是您在资源管理器中看到的目录,其中添加子目录是添加一个新子目录,而是将每个目录视为一个包含子目录列表的文本文件)

出于实际目的,它可以正常工作,除非您想对父目录(标签目录)采取行动,否则您不需要找到分支的修订版,您只需要对分支进行第一次修改,然后停止复制给你。

于 2012-08-19T12:41:20.900 回答
1

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

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

于 2012-08-18T03:20:32.553 回答