获取上次提交的UTC日期

时间:2013-09-19 21:22:47

标签: bash svn datetime timezone commit

我正在尝试整理一个bash / sh脚本,该脚本从svn repo获取最后一次提交的UTC时间(其他VCS很容易) 我知道我可以svn propget --revprop -rHEAD svn:date轻松获得它,但不能保证svn结账会在线,所以如果可能的话,我更喜欢离线版本。

也许与从svn info获取UTC时间有关? (通过拧紧时区)

总结:如何在无法访问服务器的情况下获取svn提交的UTC时间?

由于

4 个答案:

答案 0 :(得分:2)

您可以使用svn log -r COMMITTED并从中提取日期信息。这适用于脱机副本。

svn log -r COMMITTED | sed -nE 's/^r.*\| ([0-9]{4}-[0-9]{2}-[0-9]{2} \S+ \S+).*/\1/p' | xargs -i --  date -ud '{}' '+%s'

-u选项会使date显示UTC时间。

实际上我们不需要使用xargs

date -ud "$(exec svn log -r COMMITTED | sed -nE 's/^r.*\| ([0-9]{4}-[0-9]{2}-[0-9]{2} \S+ \S+).*/\1/p')" '+%s'

更新:我得错了命令。上面的命令不能脱机工作。这是正确的:

date -ud "$(svn info | sed -nE 's/^Last Changed Date: (\S+ \S+ \S+).*/\1/p')" '+%s'

答案 1 :(得分:1)

我很傻。一旦我意识到我只需要将一个时区转换为另一个时区,就很明显了:

date -u +[format] -d $(svn info | <some grepping and cutting here>)

就我而言,这是:

date -u +"%Y%m%d-%H%M" -d "$(svn info | grep 'Date' | cut -d' ' -f4-6)"

当然,我的解决方案可能不是最优的,如果有人知道更好的方式,那就非常感激了。)

答案 2 :(得分:1)

事实证明,“svn info”的xml输出有一个zulu时间戳:

$ svn info --xml | grep date

<date>2015-04-30T15:38:49.371762Z</date>

所以你的bash命令可能是:

svn info --xml | grep -oP '(?<=<date>).*?(?=</date>)'

答案 3 :(得分:1)

我偶然发现了这篇文章。最终弄清楚svn使用env变量TZ,例如:

TZ= svn log

将以UTC记录日期