我正在做一个git日志以列出所有提交,然后解析它们。
使用此命令:
git log --encoding=UTF-8 --date=local --pretty=format:'%H,%P,%at,%ct,%an,%s'
在一些怪异的仓库中,我得到的提交都没有作者和提交日期的日期。
我尝试了简单的方法:
git log
我得到的是1970年的约会。
发生这种情况的仓库是SamWM/jQuery-Plugins,例如在commit
e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
中。尽管在GitHub上寻找的日期很有趣。
有人可以帮我定一个有趣的约会日期吗?应该在其他约会的中间吗?
最佳答案
git show --format=raw
显示:
提交e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
树d63aeb159635cb231e191505a95a129a3b4a7b38
parent 9276202f1c0dcc360433df222c90f7874558f072
作者SamWM 1288370243 --700
提交者SamWM 1288370243 --700
此处的时区信息无效,我不确定他的作者是如何创建的。其他提交确实使用正确的-0700
格式。
您可以使用GNU日期将其转换为--700
应该是-0700
的知识:
$ TZ = Etc/GMT + 7日期-d @ 1288370243
2010年10月29日星期五09:37:23 GMT + 7
因此,Git常用格式的正确答案是Fri 29 Oct 09:37:23 2010 -0700
。
注意:我使用的是TZ=Etc/GMT+7
,而不是GMT-7
。您可以通过在不同的提交中运行同一命令来查看,这些提交确实具有正确的时区信息,其结果与预期的一样。 date
的时区转换完全是解决此处需要的错误方法,并且通过抵消偏移量可以消除错误。
您可以在本地副本中使用git hash-object
和git replace
修复此类提交。首先,仔细检查我的命令是否正确:
$ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 |
> git hash-object -t commit -w --stdin
e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
该命令加载了指定的提交,将其写回未修改,并显示了重写的提交的哈希值。我将其用作完整性检查:如果我得到了不同的哈希值,则命令中一定有错误。
现在,可以插入一些东西来创建固定的提交:
$ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 |
> sed -e's/-700/-0700/'|
> git hash-object -t commit -w --stdin
46694249ed3d519b0c934222520b9dc6d8557fa1
并改用固定提交:
$ git replace e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 46694249ed3d519b0c934222520b9dc6d8557fa1
之后,所有对e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
的引用将改为查看46694249ed3d519b0c934222520b9dc6d8557fa1
,而git show e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
现在以:
提交e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
作者:SamWM
日期:2010年10月29日星期五09:37:23 2010-0700
更新版本号,使文本格式和缩进与其余代码一致
关于git - 查找日期未过期的提交?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23793188/