我负责部署应用程序,作为部署过程的一部分,我需要以严格的ISO8601格式获取最新的提交者时间戳,并将其放入数据库中。对于最新版本的git,这是相当简单的:
$ git log --pretty=format:'%cI' -n1
2019-05-29T10:24:58+04:00但不幸的是,我有一些较旧的实例,其中开关%cI不存在于已安装的git中。因此,为了更接近ISO8601,我改用%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命令来实现这一点,但没有成功。
发布于 2019-05-29 13:28:44
你是说像这样的东西?
date -d "$(git log --pretty=format:%ci -n1)" --iso-8601=seconds发布于 2019-05-29 20:13:24
使用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,删除第二个空格,将最后两个字符替换为冒号和这两个字符。
https://stackoverflow.com/questions/56353499
复制相似问题