我想手动控制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
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 log和date操作:当我推送到 GitHub 时可以隐藏提交时间吗?
请记住,提交者日期仍然会泄漏git rebase,但这可以通过钩子解决post-rewrite:git rebase 而不更改提交时间戳
然后还有一个问题,可以通过以下提到的方式git am解决: git rebase而不更改提交时间戳--committer-date-is-author-date
该--amend --date部分被问及:修改时更新 git commit 作者日期
您还可以将其设置为全局钩子:将 git post-commit 钩子应用于所有当前和未来的存储库,但core.hooksPath 完全阻止本地钩子运行,这可能是一个问题。
在 Git 2.19 上测试。
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |