如果已经标记了主干,如何检查svn

时间:2016-08-11 13:02:02

标签: bash svn

我在shellscript中设置了一个自动编译过程,我只是想知道主干是否没有从最后一个标记中收到任何提交...有没有办法用简单执行它 svn命令行,无需读取和比较历史记录,"脚本"还是手动?

2 个答案:

答案 0 :(得分:2)

在SVN中,标签既不是修订的别名,也不是不可变的。相反,它只是一个副本!可以在创建标签后修改标签。所以唯一的方法是比较两条路径的修订号。 This问题显示了如何获取它们。

答案 1 :(得分:0)

感谢@ceving,这是一个很好的示例,用于检查项目树是否与标签保持同步。

鉴于项目设置如下:

rootdev/prj1/
rootdev/prj1/trunk
rootdev/prj1/tags

脚本:

#!/bin/bash
tabs 30 # be fancy

function last-rev ()
{
    svn log "$1" -r HEAD:1 -l 1 -q | grep -ao '^r\S*'
}

find rootdev -ipath "*tags" |
while read tags
do
    module="$(dirname $tags)"
    modulename="$(basename $module)"
    lasttag="$(ls -1 $tags | tail -n 1)"
    lastrev=$(last-rev "$module")
    lasttagrev=$(last-rev "$tags/$lasttag")
    echo -ne "$modulename\t: $lasttag\t$lasttagrev/$lastrev "
    [[ "$lastrev" == "$lasttagrev" ]] && echo "[UPTODATE]" || echo "[OUTDATED]"
done

输出:

DateUtils                     : 1.0.0                       r116/r116 [UPTODATE]
ThisUtils                     : 1.0.0                       r116/r116 [UPTODATE]
SomeUtils                     : 1.2.1                       r125/r125 [UPTODATE]
ThatUtils                     : 1.0.1                       r101/r101 [UPTODATE]
NotUtils                      : 1.0.0                       r101/r128 [OUTDATED]
WhyUtils                      : 1.2.0                       r130/r130 [UPTODATE]