可以在git hook中自定义GIT_COMMITTER_DATE吗?

Mag*_*nus 5 git githooks

我想手动控制git commit时间戳,以便我的GIT_COMMITTER_DATE始终与GIT_AUTHOR_DATE匹配。我已经看到许多使用filter-branch重写历史记录的解决方案,但是我宁愿对此保持主动,并将逻辑放在git hook中,以便它始终与向前匹配。

但是我发现,虽然这些变量如果在调用git的环境中定义时可以很好地工作,但是在预提交git钩子中定义它们时似乎没有任何作用。例如:

# this works if run directly on cmd line, but not inside the pre-commit hook
export GIT_AUTHOR_DATE='Mon, 11 Aug 2014 11:25:16 -0400'
export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在git钩子内动态调整这些值,以使提交自动具有所需的时间戳?我正在使用git版本1.8.5.2

Cir*_*四事件 5

post-commit钩+git commit --amend

这不是超级优雅,但它似乎有效并设置了提交者和作者日期:

.git/hooks/提交后

#!/usr/bin/env bash
if [ -z "${GIT_COMMITTER_DATE:-}" ]; then
  d="$(date --iso-8601=seconds)"
  GIT_COMMITTER_DATE="$d" git commit --amend --date "$d" --no-edit
fi
Run Code Online (Sandbox Code Playgroud)

不要忘记:

chmod +x .git/hooks/post-commit
Run Code Online (Sandbox Code Playgroud)

我们检查以GIT_COMMITTER_DATE防止它进入无限提交循环,并且如果用户已经过了特定时间,它也会跳过挂钩。

这是一个更复杂的示例,它使用之前提交的日期git logdate操作:当我推送到 GitHub 时可以隐藏提交时间吗?

请记住,提交者日期仍然会泄漏git rebase,但这可以通过钩子解决post-rewritegit rebase 而不更改提交时间戳

然后还有一个问题,可以通过以下提到的方式git am解决: git rebase而不更改提交时间戳--committer-date-is-author-date

--amend --date部分被问及:修改时更新 git commit 作者日期

您还可以将其设置为全局钩子:将 git post-commit 钩子应用于所有当前和未来的存储库,但core.hooksPath 完全阻止本地钩子运行,这可能是一个问题。

在 Git 2.19 上测试。