【问题标题】:Can I make `svn info` tell me about the oldest revision, not the newest?我可以让 `svn info` 告诉我最旧的版本,而不是最新的版本吗?
【发布时间】:2013-06-19 19:10:07
【问题描述】:

我有一个 PHP 脚本,它通过检查 SVN 下的目录,特别是与模式 ^/*/tags/* 匹配的目录,自动生成项目发布历史记录。

例如

^/myproject/tags/v1-00
^/myproject/tags/v1-01
^/myproject/tags/v1-02

……等等。

除其他外,脚本解析svn info的输出:

[tomalak@cat ~]$ svn info https://localhost/svn/myproject/tags/v8-11/
Path: v8-11
URL: https://localhost/svn/myproject/tags/v8-11
Repository Root: https://localhost/svn
Repository UUID: ***
Revision: 15198
Node Kind: directory
Last Changed Author: ***
Last Changed Rev: 15192
Last Changed Date: 2013-06-17 12:31:52 +0100 (Mon, 17 Jun 2013)

为了获取标签创建的SVN版本和日期。

这真的很有效......直到有人提交到标签上。它发生了。较新版本的 TortoiseSVN 会警告您,您可以创建预提交挂钩来尝试物理禁止提交到标签1,但无论如何我都想处理这种情况。

我们被告知“Last Changed Rev”和“Last Changed Date”; 我们能否在不做太多工作的情况下(最好不用第二次 svn 调用)来请求“First Changed Rev”和“First Changed Date”?


相关:SVN: How to get the first revision of a file?”很接近,但如果可能的话,我特别想通过单个svn info 调用来做到这一点。 (“How to get the earliest checkout-able revision info from subversion?”也很接近,但最终没用。)

1 实际上,在不禁止创建初始标签的情况下,我在执行此操作时遇到了麻烦,尽管这是另一天的故事……

【问题讨论】:

  • 我认为没有其他方法可以解析svn log 的输出,可能使用--xml 选项
  • @Nicola:肯定开始出现这种情况了。

标签: svn


【解决方案1】:

最好不用第二次svn 调用

一种违反此“约束”但在其他方面满足您的需求并且非常简单的方法是执行初始预处理步骤以显式检索该修订号:

[tomalak@cat ~]$ svn log https://localhost/svn/myproject/tags/v8-11/ \
  --stop-on-copy --quiet | grep ^r | tail -n 1 | sed -r -e 's/^r|\s.*//g'
15000

然后您的自动 svn info 调用可以使用此修订号来提供您想要的详细信息:

[tomalak@cat ~]$ svn info https://localhost/svn/myproject/tags/v8-11/ -r 15000
Path: v8-11
URL: https://localhost/svn/myproject/tags/v8-11
Repository Root: https://localhost/svn
Repository UUID: ***
Revision: 15000
Node Kind: directory
Last Changed Author: ***
Last Changed Rev: 15000
Last Changed Date: 2013-04-30 12:01:30 +0100 (Tue, 30 Apr 2013)

如果你真的只需要一个命令,那么你总是可以在 svn info 调用中使用反引号进行 svn log 内联:

[tomalak@cat ~]$ svn info https://localhost/svn/myproject/tags/v8-11/ \
    -r `svn log https://localhost/svn/myproject/tags/v8-11/ \
    --stop-on-copy --quiet | grep ^r | tail -n 1 | sed -r -e 's/^r|\s.*//g'`

当然,实际上这仍然是对svn 的两次调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2022-11-21
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多