"Eric Sunshine via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt > index a16e62bc8c8..6e9a5420b7c 100644 > --- a/Documentation/githooks.txt > +++ b/Documentation/githooks.txt > @@ -31,6 +31,17 @@ Hooks can get their arguments via the environment, command-line > arguments, and stdin. See the documentation for each hook below for > details. > > +If your hook needs to invoke Git commands in a foreign repository or in a > +different working tree of the same repository, then it should clear local Git > +environment variables, such as `GIT_DIR`, `GIT_WORK_TREE`, etc., which could > +interfere with Git operations in the foreign repository since those variables > +will be referencing the local repository and working tree. For example: > + > +------------ > +local_desc=$(git describe) > +foreign_desc=$(unset $(git rev-parse --local-env-vars); git -C ../foreign-repo describe) > +------------ > + It is an excellent idea to add the above, but * I think adding it one paragraph earlier may make it fit better. * The paragraph, after which the above gets inserted, can use a bit of enhancement. That is, something like this? Documentation/githooks.txt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git c/Documentation/githooks.txt w/Documentation/githooks.txt index a16e62bc8c..f3d0404164 100644 --- c/Documentation/githooks.txt +++ w/Documentation/githooks.txt @@ -25,7 +25,20 @@ Before Git invokes a hook, it changes its working directory to either $GIT_DIR in a bare repository or the root of the working tree in a non-bare repository. An exception are hooks triggered during a push ('pre-receive', 'update', 'post-receive', 'post-update', 'push-to-checkout') which are always -executed in $GIT_DIR. +executed in $GIT_DIR. Environment variables like GIT_DIR and GIT_WORK_TREE +are exported so that the hook can easily learn which repository it is +working with. + +If your hook needs to invoke Git commands in a foreign repository or in a +different working tree of the same repository, then it should clear local Git +environment variables, such as `GIT_DIR`, `GIT_WORK_TREE`, etc., which could +interfere with Git operations in the foreign repository since those variables +will be referencing the local repository and working tree. For example: + +------------ +local_desc=$(git describe) +foreign_desc=$(unset $(git rev-parse --local-env-vars); git -C ../foreign-repo describe) +------------ Hooks can get their arguments via the environment, command-line arguments, and stdin. See the documentation for each hook below for