我正在尝试编写一个 bash/sh 脚本,该脚本从 svn repo 获取最后一次提交的 UTC 时间(其他 VCS 很容易)我知道我可以svn propget --revprop -rHEAD svn:date
很容易地做到这一点,但不能保证svn checkout 将在线,所以如果可能的话,我更喜欢离线版本。
也许与从中获取 UTC 时间有关svn info
?(通过搞砸时区)
摘要:如何在无法访问服务器的情况下获取 svn 提交的 UTC 时间?
谢谢
您可以使用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'
我很笨。当我真正意识到我只需要将一个时区转换为另一个时区时,很明显:
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)"
当然,我的解决方案可能不是最佳的,如果有人知道更好的方法,那将不胜感激:)
原来“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>)'
我只是偶然发现了这篇文章。最终弄清楚 svn 使用 env variable TZ
,例如:
TZ= svn log
将以 UTC 记录日期