我有一个git存储库,其中所有的提交都是使用Python和杜尔维奇库按照计划执行的。
我试图使用带有自定义格式的git log打印带有提交日期的提交列表,但找不到有效的格式字符串。
在运行git log --format=raw时,只需提交一次就可以得到以下结果
commit d955a72160fdacfc7c22eccdccaf8b343c882ebb
tree d6b8baffb86d16b90552250da7bfe39828d16982
parent 03bccd572a8ed7e04c96bf27a010d7ef39165e1c
author auto.py 1381493109 +0000
committer auto.py 1381493109 +0000
commit message将其与回购进行比较,其中所有提交都是由实际的git工具创建的,也是用--format=raw创建的。
commit 72dbd4358c8685cfd604b4146c7728c82999a97e
tree cfc5254c5f96b50ec6b5abf1b573e97989a52b19
parent 2f2a87f7f1e87afe1b93d659e4cd435532352ada
author me <me@example.com> 1381503599 -0300
committer me <me@example.com> 1381503599 -0300
commit message使用git log --format文档,我构造了一个格式字符串,该字符串应该以每种格式显示作者&提交日期,两边都被提交哈希包围。然后我在杜尔威奇管理的回购系统上运行了它:
$ git log --format="format:%h %an %ad %aD %ar %at %ai %cn %cd %cD %ar %at %ai %h"
d955a72 d955a72对于git管理的回购:
$ git log --format="format:%h %an %ad %aD %ar %at %ai %cn %cd %cD %ar %at %ai %h"
72dbd43 me Fri Oct 11 11:59:59 2013 -0300 Fri, 11 Oct 2013 11:59:59 -0300 5 days ago 1381503599 2013-10-11 11:59:59 -0300 mRB0 Fri Oct 11 11:59:59 2013 -0300 Fri, 11 Oct 2013 11:59:59 -0300 5 days ago 1381503599 2013-10-11 11:59:59 -0300 72dbd43每一个约会都是一个空字符串。我猜dulwich存储提交日期的方式不同,但我找不到任何方法以格式字符串访问它们。
我是否可以在git log中使用任何自定义格式来访问Dulw治提交中的时间戳?
我使用的是git版本1.8.3.4 (Apple Git-47)。
发布于 2013-10-16 15:22:56
我认为由杜尔威奇创建的提交是无效的,因为作者和提交者的电子邮件地址在Git中总是必须的(解析器正在寻找包含<>的邮件地址)。分析作者/提交人身份验证时的失败导致不解析时间戳。
发布于 2013-10-16 16:47:18
Antoine的回答是正确的:我的提交在他们的作者/提交者记录中没有电子邮件地址,所以它们是无效的,git不能解析它们的格式。
我能够通过在工作目录中执行以下过滤器来修复我的存储库。请注意,这将无条件地更新所有提交作者:
git filter-branch --env-filter "
GIT_AUTHOR_EMAIL='foo@bar.com'
GIT_COMMITTER_EMAIL='foo@bar.com'
GIT_AUTHOR_NAME='auto.py'
GIT_COMMITTER_NAME='auto.py'
"幸运的是,git在上面的筛选过程中维护了作者和提交日期。(在git版本1.7.2.5和git版本1.8.3.4 (Apple Git-47)上验证)
为了避免将来提交时出现问题,我在通过dulwich提交时做了以下更改:
# old: do not use
# repo.do_commit("message", committer="auto.py")
# fixed
repo.do_commit("message", committer="auto.py <foo@bar.com>")完成上述操作后,我的git log格式字符串就能正常工作了。
https://stackoverflow.com/questions/19407225
复制相似问题