我负责部署应用程序,并且在部署过程中,我需要获取严格的ISO 8601格式的最新提交者时间戳并将其放置在数据库中。对于最新版本的git,这很简单:
$ git log --pretty=format:'%cI' -n1
2019-05-29T10:24:58+04:00
但是不幸的是,我有一些较旧的实例,其中安装的git中不存在开关%cI
。因此,为了接近ISO 8601,我改用%ci
,结果是:
$ git log --pretty=format:%ci -n1
2019-05-29 10:24:58 +0400
我们最终将把机器升级到更高版本的操作系统,并因此升级到git的更现代版本。较新版本的git在手册页中具有以下内容:
• %ci: committer date, ISO 8601-like format
• %cI: committer date, strict ISO 8601 format
但是与此同时,我想在较旧的机器上将类似于ISO 8601的字符串按上述严格的ISO 8601格式进行处理。我写了一个不好看的单行代码来做到这一点,而且似乎可行:
$ git log --pretty=format:'%ci' -n1 | sed -e 's/ /T/1' -e 's/ //1' -e 's/.\{22\}/&:/1'
2019-05-29T10:24:58+04:00
简单来说,它用T
替换了第一个空格,什么都没有替换了第二个空格,并在第22个字符位置插入了一个冒号:
。我该如何做得更好?我尝试寻找使用date
命令执行此操作的方法;没有运气。
答案 0 :(得分:2)
您的意思是这样的吗?
date -d "$(git log --pretty=format:%ci -n1)" --iso-8601=seconds
答案 1 :(得分:1)
使用sed
:
$ echo '2019-05-29 10:24:58 +0400' | sed -e 's/ /T/' -e 's/ //' -e 's/..$/:\0/'
2019-05-29T10:24:58 + 04:00
用T
替换第一个空格,删除第二个空格,用冒号和这两个字符替换最后两个字符。