git - 查找未注明日期的提交日期?

标签 git parsing github commit

我正在做一个 git log 来列出所有提交,然后解析它们。 使用此命令:

git log --encoding=UTF-8 --date=local --pretty=format:'%H,%P,%at,%ct,%an,%s'

在一些奇怪的 repo 中,我得到的提交在作者和提交日期中都没有日期。 我尝试了简单的:

git log

我得到的是 1970 年的日期。

发生这种情况的 repo 是 SamWM/jQuery-Plugins ,例如在提交 e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 中。

虽然在 GitHub 中我们有一个有趣的日期,但我们去寻找它。

任何人都可以帮助我为这个提交找到一个有趣的日期,该日期应该在其他提交的中间某个地方吗?

最佳答案

git show --format=raw 显示:

commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
tree d63aeb159635cb231e191505a95a129a3b4a7b38
parent 9276202f1c0dcc360433df222c90f7874558f072
author SamWM <sam@webmonkeysolutions.com> 1288370243 --700
committer SamWM <sam@webmonkeysolutions.com> 1288370243 --700

此处的时区信息无效,我不确定作者是如何创建的。其他提交确实使用了正确的 -0700 格式。

您可以使用 GNU 日期转换它,知道 --700 应该是 -0700:

$ TZ=Etc/GMT+7 date -d @1288370243
Fri 29 Oct 09:37:23 GMT+7 2010

所以 Git 通常格式的正确答案是 Fri 29 Oct 09:37:23 2010 -0700

注意:我使用的是 TZ=Etc/GMT+7,而不是 GMT-7。通过对具有正确时区信息的不同提交运行相同的命令,您可以看到结果完全符合预期。 date 的时区转换对于此处所需的内容完全是错误的方式,通过取反偏移量我取消了错误。

您可以在本地副本中使用 git hash-objectgit 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

After that, all references to e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 will look at 46694249ed3d519b0c934222520b9dc6d8557fa1 instead, and git show e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 now starts with:

commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
Author: SamWM <sam@webmonkeysolutions.com>
Date:   Fri Oct 29 09:37:23 2010 -0700

    Update version number, make text formatting and indentation consistent with the rest of the code

关于git - 查找未注明日期的提交日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793188/

相关文章:

ruby-on-rails - 如何从github上解压gem并指定分支?

git - 设置git pull 和推送所有分支

git - git 存储库的数据库后端

python-3.x - python 3 argparse调用一个函数

iphone - NSXMLParser rss 图像 url?

javascript - 使用 Javascript 删除括号和文本

javascript - 如何在 Angular 模板中嵌入 GitHub 要点?

git - 使用 git 应用差异文件

git - git 如何处理模块化?

git - 无法将主分支从原点 pull 入本地(修改后的) repo