>your call to `git commit` will still invoke the `prepare-commit-msg` (and possibly `commit-msg`) hook Since I used --no-edit --no-verify in the example/hook, that shouldn't be the case though? >such as by using an alias that sets `TZ=UTC0` to commit. Unfortunately, (at least on Windows) most tools and IDEs don't even load a bashrc file (e.g. intellij) for their git UI, so that's not an option (and setting the TZ as a global environment variable has unwanted side effects, since it will set the timezone in various applications randomly, e.g. Electron/Slack will use the TZ for some but not for other things,...) On Tue, 1 Apr 2025 at 02:43, brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> wrote: > > On 2025-03-31 at 20:19:30, Devste Devste wrote: > > device time zone is not UTC0 > > > > post-commit hook: > > if [[ -n "${SKIP_POST_COMMIT+x}" ]] && [[ "$SKIP_POST_COMMIT" -eq 1 ]] > > then > > exit > > fi > > > > TZ=UTC0 SKIP_POST_COMMIT=1 git commit --amend --reset-author --no-edit > > --no-verify --no-post-rewrite --allow-empty --quiet > > > > --- > > > > Run: > > git commit -m "foo" > > git show -s --format="Commit: %h%nAuthor: %an%nAuthor Date: > > %ad%nCommitter: %cn%nCommitter Date: %cd%nMessage: %s%n" HEAD > > > > Expected that both Author Date: and Committer Date: show +0000 as > > timezone. Only committer date shows +0000, while author date shows > > time zone of device. > > > > When manually running the post-commit code (TZ=UTC0 SKIP_POST_COMMIT=1 > > ...) it correctly resets the author date to +0000 too > > > > When manually setting the date using --date="$(date +%s) +0000" > > instead of --reset-author it also works correctly in post-commit > > hook. > > I can reproduce this, except that I had to use `TZ=America/Toronto` > since my system is in UTC. A quick look at the code led me to a guess > that ended up correct. > > The `git commit` code sets `GIT_AUTHOR_NAME`, `GIT_AUTHOR_EMAIL`, and > `GIT_AUTHOR_DATE`. The latter contains a timezone identifier. As a > consequence, when the hook is invoked, those values are set in the > environment, and the subsequent `git commit` in the hook uses them. You > can see this by placing something like `env >/tmp/foo` in your hook and > then reading the output. > > I will say that this is definitely not the intended use of the > post-commit hook and I am very much not surprised that this doesn't work > as you intended. You could certainly fix it by unsetting those > environment variables, but I'd encourage you to adopt a different > approach, such as by using an alias that sets `TZ=UTC0` to commit. That > will be more likely to work in the future and will definitely be less > brittle. > > For instance, your call to `git commit` will still invoke the > `prepare-commit-msg` (and possibly `commit-msg`) hook, which might > result in unexpected changes to your message or even a failure of the > second commit. > -- > brian m. carlson (they/them) > Toronto, Ontario, CA