GIT_COMMITTER_DATE可以在git钩子里自定义吗?

时间:2015-09-21 15:57:57

标签: git githooks

我想手动控制git commit timestamp,以便我的GIT_COMMITTER_DATE始终与GIT_AUTHOR_DATE匹配。我已经看到许多解决方案使用filter-branch来重写历史记录,但我宁愿积极主动地将这个逻辑放在一个git钩子中,以便它总是与前进相匹配。

但是我发现虽然如果在调用git的环境中定义这些变量可以正常工作,但是当它们在pre-commit git hook中定义时它们似乎没有任何效果。例如:

# 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"

有没有办法在git hook中动态调整这些值,以便提交自动具有所需的时间戳?我是关于git版本1.8.5.2

1 个答案:

答案 0 :(得分:0)

post-commit钩+ git commit --amend

这不是超级优雅,但它似乎可以工作并设置提交者和作者日期:

.git / hooks / post-commit

#!/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

别忘了:

chmod .git/hooks/post-commit

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

这是一个更复杂的示例,该示例使用以前的提交通过git logdate操作进行的日期:Can I hide commits' time when I push to GitHub?

请记住,提交日期仍然在git rebase上泄漏,但是可以通过post-rewrite钩子来解决:git rebase without changing commit timestamps

然后还有git am,可以用git rebase without changing commit timestamps

中提到的--committer-date-is-author-date来解决。

Update git commit author date when amending处询问了--amend --date部分

您还可以将其设置为全局挂钩:Applying a git post-commit hook to all current and future reposcore.hooksPath阻止本地挂钩完全运行,这可能是一个问题。

在Git 2.19上进行了测试。