git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Unexpected working directory in post-receive hook in non-bare repository

From
Simon Ruderich <simon@ruderich.org>
Date
Apr 9, 2017, 13:01 UTC
Message-ID
<20170409130126.uqmjop25jidhblhd@ruderich.org>
Hello,

The following snippet reproduces the issue for me (note the remote: line in its output):

    git --version
    rm -rf a b
    git init a
    cd a
    echo first >data
    git add data
    git commit -m initial
    cat >>.git/hooks/post-receive <<EOF
    #!/bin/sh
    pwd
    EOF
    chmod +x .git/hooks/post-receive
    cd ..
    git clone a b
    cd b
    echo second >>data
    git add data
    git commit -m test
    git push origin master:not-master

According to man githooks "Before Git invokes a hook, it changes its working directory to either the root of the working tree in a non-bare repository, [...]". In this case "a" is non-bare and I expected the command to be run in the working tree; but instead it's run inside .git. (This caused some confusion in my case because I ran "git merge" in the hook which put files in the .git directory and I didn't notice it at first. I know running merge in receive-hooks is "bad practice" but it works fine in my setup.)

The same happens for all hooks executed by git-receive-pack: pre-receive, update, post-receive, post-update.

Is this a documentation issue or unexpected behavior?

Regards Simon

-- 
+ privacy is necessary
+ using gnupg http://gnupg.org
+ public key id: 0x92FEFDB7E44C32F9
Next: Ævar Arnfjörð Bjarmason
Message 1 of 4 in “Unexpected working directory in post-receive hook in non-bare repository”
  1. Simon RuderichApr 9, 2017
  2. Ævar Arnfjörð BjarmasonApr 10, 2017
  3. githooks.txt: clarify push hooks are always executed in $GIT_DIRSimon Ruderich, Apr 29, 2017
  4. Ævar Arnfjörð BjarmasonApr 29, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.