Re: Running 'git worktree add' in 'pre-commit' hook
- Date: Thu, 16 May 2019 18:17:02 -0400
- From: Jeff King <peff@xxxxxxxx>
- Subject: Re: Running 'git worktree add' in 'pre-commit' hook
On Thu, May 16, 2019 at 06:25:24PM +0700, Duy Nguyen wrote:
> > Is it forbidden to call this command from a hook?
> pre-commit hook sets GIT_INDEX_FILE to this "index.lock" so you have
> the latest index content (which is not the same as from
> $GIT_DIR/index). This variable will interfere with any commands that
> work on a different worktree.
> So you probably can still make it work by backing up $GIT_INDEX_FILE
> (in case you need it), then unset it before you use "git worktree" (or
> cd to it if you keep a permanent separate worktree for pre-commit
> activities). To make sure you don't have similar problems, you
> probably should do "env | grep GIT" from the hook and see if any other
> variables are set.
If you're entering another repo from a hook, you're supposed to use:
unset $(git rev-parse --local-env-vars)
I wondered if we'd need another similar mechanism for entering the
worktree of another repo, that would maybe clear fewer variables. But I
think it's actually the same: we really want to clear everything and let
our "cd" pick up the new repository path.
The case of actually _adding_ a new work tree (before we enter it) is
weirder, though. We definitely want to stay in the same repository, and
clearing all of that would not make sense. I do wonder if worktree-add
should be handling GIT_INDEX_FILE (ignoring it when we want to be
dealing with the index of the new worktree we added, and handling any
relative fixups if we chdir inside the worktree code).