On Thu, May 16, 2019 at 07:16:54PM -0400, Eric Sunshine wrote: > On Thu, May 16, 2019 at 6:17 PM Jeff King <peff@xxxxxxxx> wrote: > > On Thu, May 16, 2019 at 06:25:24PM +0700, Duy Nguyen wrote: > > > 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). [...] > > > > 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). > > Ignoring GIT_INDEX_FILE was indeed the conclusion reached earlier in > this thread. Addressing your other point, "git worktree add" does > chdir() into the new worktree if a post-checkout hook exists since > that hook needs to run in the new worktree, not in the worktree in > which the "git worktree add" command itself was invoked. For the hook > invocation, it already sanitizes the environment of GIT_DIR and > GIT_WORK_TREE, and GIT_INDEX_FILE ought to be cleaned too. Is there > any existing code in Git for doing the relative fixups you mention for > other Git environment variables? You can assign local_repo_env to child_process.env (or push it individually to env_array if you have to mix with other variables). See git_connect() for an example. -Peff