0

svn リポジトリから最後のコミットの UTC 時刻を取得する bash/sh スクリプトをまとめようとしています (他の VCS は簡単です)。簡単に実行して取得できることは理解していますsvn propget --revprop -rHEAD svn:dateが、保証はありません。 svn チェックアウトはオンラインになるので、可能であればオフライン バージョンを希望します。

から UTC 時刻を取得することと何か関係があるのsvn infoでしょうか? (タイムゾーンをねじ込むことにより)

概要: サーバーにアクセスできないときに、svn コミットの UTC 時刻を取得するにはどうすればよいですか?

ありがとう

4

4 に答える 4

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'
于 2013-09-19T21:48:46.890 に答える
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)"

もちろん、私の解決策はおそらく最適ではありません。誰かがより良い方法を知っていれば、それは大歓迎です:)

于 2013-09-19T21:48:29.467 に答える