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

标签 git githooks

我想手动控制 git 提交时间戳,以便我的 GIT_COMMITTER_DATE 始终与 GIT_AUTHOR_DATE 匹配。我见过许多使用 filter-branch 来重写历史的解决方案,但我宁愿对此采取主动并将逻辑放在 git 钩子(Hook)中,以便它始终匹配前进。

但我发现,如果在调用 git 的环境中定义这些变量,它们可以正常工作,但在预提交 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

最佳答案

post-commit 钩子(Hook) + git commit --amend

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

.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 +x .git/hooks/post-commit

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

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

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

然后还有git am,可以用--committer-date-is-author-date解决,如:git rebase without changing commit timestamps

--amend --date 部分被问到:Update git commit author date when amending

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

在 Git 2.19 上测试。

关于git - 可以在 git hook 中自定义 GIT_COMMITTER_DATE 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32699631/

相关文章:

git - 我可以在 git 中合成一个跳过单个更改集的分支吗

git Hook : is there a clone hook?

git - 最后 7 次 Git 提交消失了,头部向后移动

swift - 添加git子模块时报错 "not a git repository"? swift 5.0 Xcode

Git 直接修改索引的内容,用于pre-commit formatting hook

git - 使用GIT部署网站

git - 锁定分支但允许 gitlab merge 请求

githooks - 指定在 git commit --no-verify 上跳过哪个钩子(Hook)

Git 设置远程跟踪分支

git - Silence git(没有错误,没有输出,一句话也不说)