【问题标题】:See when a directory was branched/tagged in SVN查看目录何时在 SVN 中被分支/标记
【发布时间】:2011-06-23 14:09:48
【问题描述】:

我目前正在一个大型项目的发布过程中工作。

我只需要知道一个目录在树干被标记之后是否被修改(所以我们需要制作一个新标记并发布新版本)。

我可以使用 TortoiseSVN、CLI 和 Subclipse。

尝试使用修订图但没有发现任何有用的...(或者至少我无法正确使用它)

谢谢

【问题讨论】:

    标签: svn tags tortoisesvn subclipse


    【解决方案1】:

    您需要分两步完成:

    1. 获取被标记的版本。这可以通过检查标签创建的版本来完成,从命令行使用svn info 并检查最后更改的版本。
    2. 检查源目录中的任何更改之后该修订。在命令行中使用svn log -r 470:HEAD,其中470 是在步骤1 中找到的修订号。

    【讨论】:

    • 第 1 步告诉创建标签的修订号。它没有说明实际标记的内容。例如,如果主干的版本为 469,我可以使用svn cp -r123 ^/trunk ^/tags/foobar。现在svn info ^/tags/foobar 说“上次更改的版本:470”。要稍后找出我标记的修订版本,您必须执行svn log --stop-on-copy -v ^/tags/foobar。当然,我也可以svn cp -r123 ^/trunk/onething ^/tags/foobar/onething; svn cp -r231 ^/trunk/anotherthing ^/tags/foobar/anotherthing,所以现在没有标签对应的单一修订版。
    • @slowdog:你是对的。我假设在标记时,复制的是 HEAD,而不是特定的(可能较旧的)版本。
    【解决方案2】:

    我想你可以从根目录运行

    svn log path/to/directory --verbose
    

    并且应该为您提供该目录上所有活动的列表。如果你有一个修订号,你也可以用它来缩小范围。

    http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.log.html

    【讨论】:

    • 嗯,这就是修订号的好处,如答案中的示例,但它仍然是相同的子命令。
    【解决方案3】:

    我只需要知道一个目录在被标记后是否在trunk中被修改(所以我们需要制作一个新标签并发布新版本)。

    您可能对此感兴趣:您是否想过使用像Jenkins 这样的持续构建系统。每次有人提交时,Jenkins 都会运行一个构建。

    那么,这对您有什么帮助?很简单,您可以使用 Jenkins 来标记和标记在 Jenkins 中正确标记的构建。您可以简单地查看项目的网页并查看标记了哪些构建。如果在最后一个标记后有新的签入,Jenkins 将构建它。而且,你会在 Jenkins 中看到它。更棒的是,Jenkins 甚至可以自动为你标记它。

    这使开发人员可以轻松查看构建、构建的输出、更改、这些更改发生的原因以及进行更改的人员。如果您有缺陷跟踪系统,Jenkins 可以链接到该系统,更新已构建的问题,并直接从 Jenkins 提供指向该问题的链接。

    Jenkins 可以运行您所做的测试并绘制图表,运行 Checkstyle 和 Findbugs(http://findbugs.sourceforge.net/) 等开发软件,甚至可以标记无法达到您无可挑剔的标准的构建。它会在每次构建错误后向开发人员发送电子邮件,以便他们解决问题。

    Jenkins 易于设置和管理。

    这不是你问的,但詹金斯可能会做到这一点。

    【讨论】:

    • +1 表示非常有趣的选项。由于我不控制构建,并且构建是手动完成的,因此我无法接受您的回答。有一天,如果我要管理一个项目,我肯定会考虑这种发布管理
    • @djechelon:我没想到你会接受我的回答,但继续下载 Jenkins 并尝试一下。它的重量很轻。您只需要一个 1.6 Java 运行时(顺便说一句,您无需成为 Java 商店即可使用 Jenkins)。启动并运行它大约需要 5 分钟。根据您的应用程序构建的难度,设置您的构建可能需要另外 20 分钟到一个小时。然后,看你喜不喜欢。如果这样做,请向您的开发人员和发布经理展示。如果我的雇主知道 Jenkins 的易用性,他们会少付给我很多钱。
    【解决方案4】:

    确定当前主干是否与给定标签匹配的唯一方法是运行svn diff --summarize ^/trunk/ ^/tags/foobar 之类的东西。这是因为 subersion 中的标签只不过是目录的命名约定。任何现有标签都可以代表多个修订的组合,从存储库中的任何位置复制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      相关资源
      最近更新 更多