【问题标题】:Seeing release markers in svn log在 svn 日志中查看发布标记
【发布时间】:2010-04-09 11:02:04
【问题描述】:

每当我们发布项目时,我们都会创建一个标签来捕获快照。能够查看在某些版本中使用了主干历史记录中的哪些修订版将非常有帮助。我知道 TortoiseSVN 修订图显示了此信息,但我想知道是否有办法在命令行 svn 日志中查看它?

我来自 Clearcase 背景,我们将能够在历史记录中看到发布标签。

【问题讨论】:

    标签: svn tags logging


    【解决方案1】:

    tags 目录的日志应该包括它在创建标签时提交的修订,那么您的trunk 的修订号会小于那个。

    还是我误会了什么?

    看看我的类库:WebSVN view for my class library tags' directory

    您可以看到每个构建最终的修订版,因为它是同一个存储库,因此标记的修订号比主干中已标记更改的最大可能修订版高 1。

    使用简单的svn log 命令如下所示:

    [C:\Temp] :svn log http://svn.vkarlsen.no/svn/LVK/LVK_3_5/tags
    
    -----------------------------------------------------------------------
    r751 | lassevk | 2009-10-04 13:45:07 +0200 (sø, 04 okt 2009) | 1 line
    
    Build 750
    -----------------------------------------------------------------------
    r636 | lassevk | 2009-07-31 07:00:11 +0200 (fr, 31 jul 2009) | 1 line
    
    Build 635
    -----------------------------------------------------------------------
    r632 | lassevk | 2009-07-25 06:19:27 +0200 (lø, 25 jul 2009) | 1 line
    
    Build 631
    -----------------------------------------------------------------------
    r614 | lassevk | 2009-07-23 06:18:58 +0200 (to, 23 jul 2009) | 1 line
    
    Build 612
    
    |----|
      ^
      +-- this column here shows the tag commit revision, trunk is less than that
    

    或者用xml:

    [C:\Temp] :svn log http://svn.vkarlsen.no:81/svn/LVK/LVK_3_5/tags --xml
    <?xml version="1.0"?>
    <log>
    <logentry
       revision="751">                         <-- this
    <author>lassevk</author>
    <date>2009-10-04T11:45:07.445750Z</date>
    <msg>Build 750</msg>
    </logentry>
    <logentry
       revision="636">                         <-- and this
    <author>lassevk</author>
    <date>2009-07-31T05:00:11.796875Z</date>
    <msg>Build 635</msg>
    </logentry>
    

    这是一个 python 脚本,它会输出一些东西,它的格式不是很好,因为它不能正确处理修订版 cmets 中的换行符,但它应该能让你继续前进。

    from xml.dom.minidom import parse;
    
    # files created by:
    #   svn log http://svn.vkarlsen.no:81/svn/LVK/LVK_3_5/tags --xml >tags.xml
    #   svn log http://svn.vkarlsen.no:81/svn/LVK/LVK_3_5/trunk --xml >trunk.xml
    
    def get_revs(filename):
        log = parse(filename);
        try:
            for rev in log.getElementsByTagName("logentry"):
                revision = int(rev.getAttribute("revision"));
                rev.getElementsByTagName("msg")[0].normalize();
                comment = rev.getElementsByTagName("msg")[0].firstChild.nodeValue.rstrip();
                yield (revision, comment);
        finally:
            log.unlink();
    
    tag_revs = [tr for tr in get_revs("tags.xml")];
    trunk_revs = [tr for tr in get_revs("trunk.xml")];
    tag_revs.insert(0, (max((tr[0] for tr in trunk_revs)), "HEAD"));
    
    tag_rev_lookup = {};
    for tag_rev in tag_revs:
        tag_rev_lookup[tag_rev[0]] = tag_rev[1];
    
    prev_tag = -1;
    for trunk_rev in trunk_revs:
        tag_rev_for_trunk_rev = min((tr[0] for tr in tag_revs if tr[0] >= trunk_rev[0]));
        if tag_rev_for_trunk_rev != prev_tag:
            print("tag #%d: %s" % (tag_rev_for_trunk_rev, tag_rev_lookup[tag_rev_for_trunk_rev]));
            prev_tag = tag_rev_for_trunk_rev;
        print("  rev #%d: %s" % trunk_rev);
    

    这会输出这个(截断):

    tag #879: HEAD
      rev #879: Fixed build properties and added FinalBuilder project. Need PostSharp 2 to work properly for x64.
      rev #878: Adjusted property targets.
    Fixed references to SQLite for 32 and 64-bit.
      rev #877: Removed 32-bit only SQLite library.
      rev #876: Removed 32-bit only SQLite library.
      rev #875: Removed 32-bit only SQLite library.
      rev #874: Cleaned up dependencies on SQLite.
      rev #873: Removed SQLite connection editor from UI.Windows project.
      rev #872: Added separate projects for SQLite functionality.
      rev #870: Changes to allow code to compile without resource files.
      rev #859: Added Any CPU target.
    

    我添加了一个名为 HEAD 的人工标签以确保所有日志条目都存在,但您可以轻松删除它并忽略它。

    代码在这里:WebSVN repository for above example code

    我将其更改为输出 xml,格式与原始 svn log --xml 的格式有些相同,存储库中的代码有这些更改,输出现在看起来像:

    <?xml version="1.0" ?>
    <tags>
      ...
      <tag revision="8">                                         --+
        <logentry revision="8">         --+                        |
          <author>                        |                        |
            lassevk                       |                        |
          </author>                       |                        |
          <date>                          |                        |
            2007-12-08T20:36:18.730377Z   +-- from tags.xml        |
          </date>                         |                        |
          <msg>                           |                        |
            Created folder remotely       |                        |
          </msg>                          |                        |
        </logentry>                     --+                        |
        <revisions>                                                +-- repeated
          <logentry revision="7">       --+                        |   for each
            <author>                      |                        |   tag
              lassevk                     |                        |
            </author>                     |                        |
            <date>                        |                        |
              2007-12-08T20:36:14.324041Z +-- from trunk.xml       |
            </date>                       |   repeated for each    |
            <msg>                         |   revision             |
              Created folder remotely     |                        |
            </msg>                        |                        |
          </logentry>                   --+                        |
        </revisions>                                               |
      </tag>                                                     --+
    </tags>
    

    每个&lt;tag...&gt; 节点都有一个&lt;logentry...&gt; 子节点,它是来自标签xml 日志的标签日志条目,然后是一个节点&lt;revisions&gt;,其中所有子节点都是来自主干xml 日志的相关日志条目。

    【讨论】:

    • 确实如此,但我们不会以这种方式看到标签之间的中间主干提交
    • 哇 Lasse,感谢您让我了解 WebSVN!界面看起来很棒
    • 不,你看不到中间主干提交,我知道没有来自 svn 的内置格式可以做到这一点,但是知道标签的修订版,你可以轻松构建一个小型工具,获取主干日志和标签日志的输出并将其集成。
    • @Pekka 是的,它目前在主干代码中存在一些小错误,但没有任何阻碍。如果你想要我的临时错误修正,请告诉我。该错误基本上是有时它会丢失有关其所在存储库的信息,因此它默认返回第一个,但保留所有其他路径,这通常以空显示结束。
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多