【问题标题】:svn log verbose but exclude one revision detailssvn log 详细但排除一个修订细节
【发布时间】:2013-05-28 19:43:54
【问题描述】:

如何获取svn日志但排除分支添加信息?就像下面的 'svn log -v --stop-on-copy' 输出如何避免 -r101 ?我正在尝试将其重定向到一个临时文件,然后只获取文件添加/修改/删除的详细信息。所以只需要没有分支创建修订的日志详细信息。

 svn log -v local/svn/demo/branches/Fix --stop-on-copy

 ------------------------------------------------------------------------
 r105 | user4 | 2013-05-24 16:27:11 -0400 (Fri, 24 May 2013) | 1 line
 Changed paths:
     M /branches/Fix/Code/Environment/RT/properties/build.properties

 ticket-9 
 ------------------------------------------------------------------------
 r104 | user4 | 2013-05-24 16:27:07 -0400 (Fri, 24 May 2013) | 1 line
 Changed paths:
     M /branches/Fix/Code/Environment/DEV/properties/build.properties

 ticket-7
 ------------------------------------------------------------------------
 r103 | user2 | 2013-05-24 15:27:25 -0400 (Fri, 24 May 2013) | 2 lines
 Changed paths:
     M /branches/Fix/Code/SharedApp/src/gov/illinois/ies/business/rules/ed/CorticonFinIncomeEntiyLoader.java

 ticket-2

 ------------------------------------------------------------------------
 r102 | user1 | 2013-05-24 15:19:54 -0400 (Fri, 24 May 2013) | 2 lines
 Changed paths:
    M /branches/Fix/Code/BEAN/Framework/ejbModule/gov/illinois/ies/business/rules/entities/fin/Income.java

 ticket-2

 ------------------------------------------------------------------------
 r101 | user4 | 2013-05-24 12:46:12 -0400 (Fri, 24 May 2013) | 3 lines
 Changed paths:
    A /branches/Fix (from /tags/2013-05-24T08:00:01.187-04:00_DEV_branch_WP_BUILD:100)

ticket-1

Re-creating the WP_Fix branch for 8AM tag

进一步更新: -- 现在我正在运行这个 :::

    svn log "$src_url" --stop-on-copy | grep -B 2 "$ticket" | grep "^r" | cut -d"r" -f2 | cut -d" " -f1 | sort -r

我的输出是:

   105
   104
   103
   102
   101

预期输出:

   105
   104
   103
   102    

【问题讨论】:

  • 你尝试过什么吗?

标签: shell svn unix awk cut


【解决方案1】:

使用awk,您可以使用regex range。像这样跳过你不想要的部分。

awk '/r101/,/^$/ {next}1' <(svn log -v --stop-on-copy)

这将从 r101 开始跳到下一个空白行。

更新:

如果您只需要文件列表,那么您可以执行以下操作 -

awk '($1 == "A" || $1 == "M" || $1 == "D") &&  NF==2' <(svn log -v --stop-on-copy)

【讨论】:

  • 使用 svn --stop-on-copy 修订版并不总是相同。
  • 你想要从上面的日志中得到什么输出?我只是展示了一种使用regex的方法。
  • 当我运行svn --stop-on-copy ...它应该排除输出中的最后一个修订。就像上面的情况一样 -r101
  • @iaav 根据您需要获取文件详细信息的要求更新了答案。
  • 我可以建议使用$1 ~ /^[AMD]$/。为什么使用&lt;(...) 比使用管道svn ...|awk ... 更好?
【解决方案2】:

选择合适的记录分隔符可以轻松解决问题。鉴于您的样本输入,这 产生你想要的输出。

awk -v RS='(^|\n)-+\n' '
    # ignore empty records
    /^$/ {next}
    # assume "A /branches/" is the the pattern for what you want to ignore
    /A \/branches\// {next}
    # print the revision number without its first character
    {print substr($1, 2)}
' 

正则表达式(^|\n)-+\n 表示:从数据的开头或换行符开始,匹配一个或多个连字符后跟一个换行符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多