我想手动控制 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 log
和 date
操作提交的日期: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/