rtf*_*soa 6 git parsing commit github
我正在做一个git日志列出所有提交,然后解析它们.使用此命令:
git log --encoding=UTF-8 --date=local --pretty=format:'%H,%P,%at,%ct,%an,%s'
Run Code Online (Sandbox Code Playgroud)
在一些奇怪的回购中,我在提交者和提交日期都没有提交日期.我试着用简单的方法:
git log
Run Code Online (Sandbox Code Playgroud)
我得到的是一个1970年的约会.
发生这种情况的回购是SamWM/jQuery-Plugins,例如在提交中e9dddaf24c9de45d9b4efdf38eff7c30eb200f48.
虽然在GitHub中我们有一个有趣的约会时间.
任何人都可以帮助我获得一个有趣的日期,这个提交应该在其他的中间吗?
小智 4
git show --format=raw显示:
提交 e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 树 d63aeb159635cb231e191505a95a129a3b4a7b38 父级 9276202f1c0dcc360433df222c90f7874558f072 作者 SamWM <sam@webmonkeysolutions.com> 1288370243 --700 提交者 SamWM <sam@webmonkeysolutions.com> 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 文件提交 e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 | > git hash-object -t commit -w --stdin e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
该命令加载指定的提交,将其不加修改地写回,并显示重写的提交的哈希值。我用它作为健全性检查:如果我得到不同的散列,则我的命令中一定有问题。
现在,可以插入一些内容来创建固定提交:
$ git cat 文件提交 e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 | > sed -e 's/--700/-0700/' | > git hash-object -t commit -w --stdin 46694249ed3d519b0c934222520b9dc6d8557fa1
并使用固定提交代替:
$ git 替换 e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 46694249ed3d519b0c934222520b9dc6d8557fa1
之后,所有对的引用都e9dddaf24c9de45d9b4efdf38eff7c30eb200f48将改为查看46694249ed3d519b0c934222520b9dc6d8557fa1,git show e9dddaf24c9de45d9b4efdf38eff7c30eb200f48现在以:
提交 e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
作者:SamWM <sam@webmonkeysolutions.com>
日期:2010 年 10 月 29 日星期五 09:37:23 -0700
更新版本号,使文本格式和缩进与代码的其余部分一致