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

Re: post-update hook

From
JRJeremy Ramer <jdramer@gmail.com>
Date
Nov 13, 2008, 18:48 UTC
Message-ID
<b9fd99020811131048p741cd9aqdcdf4cf410830915@mail.gmail.com>
In-Reply-To
<7v7i77h7tp.fsf@gitster.siamese.dyndns.org>
On Thu, Nov 13, 2008 at 10:08 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 19 quoted lines
> "Jeremy Ramer" <jdramer@gmail.com> writes:
>
>> ...  I tried editting
>> the post-update hook as follows
>>
>> #!/bin/sh
>> echo Update changes...
>> git checkout master .
>>
>> but it does not seem to make any difference.
>
> By above do you mean you do not even see "Update changes...", or do you
> mean you do see that message but "checkout"  does not seem to do anything?
>
> I notice that you said you "tried _editing_"; did you also enable it?
>
> If you enabled it, you would see "Update changes..." but notice that "git
> checkout master" reports modifications.  Try adding "-f" between "checkout"
> and "master".

I did see the "Update changes..." I enabled the post-update script. Sorry for not being clear about that.

Show 31 quoted lines
>> ...  Am I missing something
>> in the way post-update works?
>
> That, or in the way "checkout" works.
>
> By the way, this is one reason why pushing directly into the checked out
> branch of a non-bare repository is not optimal.  A recommended practice is
> to make the automation pretend as if you did a pull from the remote,
>
>> ...  It would be really nice to get this
>> working so I don't have to log into each remote and do a pull.
>
> without actually having to log into each remote and run "pull" there.
>
>  * Realize that if you did go to the remote and run "pull", then the
>   change from the local machine is copied (via the underlying "fetch"
>   that is run by "pull") in "remotes/origin/master", not to the branch
>   "master".  And then the result is merged.
>
>   IOW,
>
>        remote$ git pull
>
>   when fully spelled out, is:
>
>        remote$ git fetch local1 master:remotes/origin/master
>        remote$ git merge remotes/origin/master
>
>   That is, "master" branch tip from local1 goes to remote branch
>   "origin/master" at remote1, and it is merged to whatever is checked
>   out.

I thought I understood this process but I guess I didn't think it through fully. What you are suggesting makes sense.

Show 29 quoted lines
>
>  * Arrange that if you push from local1 to remote1, the above
>   automatically happens, in post-update hook.  So
>
>   (1) Do not push into 'master'; IOW, do not:
>
>        local1$ git push remote1 master:master ;# BAD
>
>       Instead, push into the remotes/origin/master, to mimic _as if you
>       fetched in the opposite direction_, like so:
>
>        local1$ git push remote1 master:refs/remotes/origin/master
>
>       Notice that this corresponds to what happens in the "git fetch"
>       phase if you pulled in the reverse.  So all the hook needs to do is
>       to merge.
>
>   (2) Arrange post-update on the remote end to run the merge, when a push
>       came to "origin/master", something like:
>
>        #!/bin/sh
>        case " $* " in
>        *' refs/remotes/origin/master '*)
>                cd .. ;# you would be in .git -- go to the root of tree
>                git merge refs/remotes/origin/master
>                ;;
>        esac
>
>        I didn't test this, though...

I had to make one change to this example to get it to work. I'll put it here for completeness

#!/bin/sh
case "$*" in
"refs/remotes/origin/master")
    cd ..
    GIT_DIR=".git"
    git merge refs/remotes/origin/master
    ;;
esac
Show 8 quoted lines
>
> The advantage of doing it this way is that you can configure it so that it
> does not matter in which direction you actually work.  When you _do_ have
> to go to the remote side to get the changes from local (perhaps on some
> emergency that keeps you at remote), you can do a "git pull local" and you
> can expect that the exact same thing as what your post-update script
> ordinarily does happens.
>
Thanks for the quick response!
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 4 in “post-update hook”
  1. Jeremy RamerNov 13, 2008
  2. Junio C HamanoNov 13, 2008
  3. Jeremy RamerNov 13, 2008
  4. Junio C HamanoNov 13, 2008

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.