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). -Peff