Re: Running 'git worktree add' in 'pre-commit' hook
- From
Jeff King <peff@peff.net>
- Date
- May 16, 2019, 22:17 UTC
- Message-ID
- <20190516221702.GA11784@sigill.intra.peff.net>
- In-Reply-To
- <CACsJy8DnkjuZD-9pbhAsFo16jHKt8U831LLxb3-nCQP5_FOmtA@mail.gmail.com>
On Thu, May 16, 2019 at 06:25:24PM +0700, Duy Nguyen wrote:
Show 13 quoted lines
> > 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).
-Peff