我想手动控制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
答案 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 log
和date
操作进行的日期: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 repos但core.hooksPath
阻止本地挂钩完全运行,这可能是一个问题。
在Git 2.19上进行了测试。