1

我有一个 git 存储库,其中所有提交都使用 Python 脚本和dulwich库按计划执行。

我正在尝试使用自定义格式打印提交列表及其提交日期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 工具创建的 repo 进行比较,同样--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文档,我构建了一个格式字符串,它应该以每种格式显示作者和提交日期,两边都被提交哈希包围。然后我在德威管理的 repo 上运行它:

$ 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

每个日期都是一个空字符串。我猜德威以不同的方式存储了提交日期,但我找不到任何方法可以在格式字符串中访问它们。

我可以使用任何自定义格式git log来访问 dulwich 提交中的时间戳吗?

我正在使用 git 版本 1.8.3.4 (Apple Git-47)。

4

2 回答 2

1

我认为 dulwich 创建的提交是无效的,因为作者和提交者的电子邮件地址在 Git 中始终是强制性的(解析器正在寻找封闭的<>)。解析作者/提交者身份失败会导致无法解析时间戳。

于 2013-10-16T15:22:56.427 回答
0

Antoine Pelisse 的回答是正确的:我的提交在其作者/提交者记录中没有电子邮件地址,因此它们无效并且 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格式字符串可以正常工作。

于 2013-10-16T16:47:18.997 回答