blob: 6b2f8c4de7c32927f270e561362d4766193986fa [file] [log] [blame]
Junio C Hamano2a245012005-07-14 00:10:05 -07001git-receive-pack(1)
2===================
Junio C Hamano2a245012005-07-14 00:10:05 -07003
4NAME
5----
Junio C Hamanoc3f0baa2007-01-18 15:53:37 -08006git-receive-pack - Receive what is pushed into the repository
Junio C Hamano2a245012005-07-14 00:10:05 -07007
8
9SYNOPSIS
10--------
Jonathan Niederb1889c32008-06-30 01:09:04 -050011'git receive-pack' <directory>
Junio C Hamano2a245012005-07-14 00:10:05 -070012
13DESCRIPTION
14-----------
Jonathan Niederba020ef2008-07-03 00:41:41 -050015Invoked by 'git-send-pack' and updates the repository with the
Junio C Hamano2a245012005-07-14 00:10:05 -070016information fed from the remote end.
17
18This command is usually not invoked directly by the end user.
Jonathan Niederba020ef2008-07-03 00:41:41 -050019The UI for the protocol is on the 'git-send-pack' side, and the
Junio C Hamano2a245012005-07-14 00:10:05 -070020program pair is meant to be used to push updates to remote
Jonathan Nieder483bc4f2008-06-30 13:56:34 -050021repository. For pull operations, see linkgit:git-fetch-pack[1].
Junio C Hamano2a245012005-07-14 00:10:05 -070022
Josef Weidendorferb1bf95b2005-07-31 21:17:43 +020023The command allows for creation and fast forwarding of sha1 refs
24(heads/tags) on the remote end (strictly speaking, it is the
Jonathan Niederba020ef2008-07-03 00:41:41 -050025local end 'git-receive-pack' runs, but to the user who is sitting at
Josef Weidendorferb1bf95b2005-07-31 21:17:43 +020026the send-pack end, it is updating the remote. Confused?)
27
Junio C Hamanoeb0362a2005-12-05 00:32:01 -080028There are other real-world examples of using update and
29post-update hooks found in the Documentation/howto directory.
30
Jonathan Niederba020ef2008-07-03 00:41:41 -050031'git-receive-pack' honours the receive.denyNonFastForwards config
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050032option, which tells it if updates to a ref should be denied if they
33are not fast-forwards.
Junio C Hamanoeb0362a2005-12-05 00:32:01 -080034
Junio C Hamano2a245012005-07-14 00:10:05 -070035OPTIONS
36-------
37<directory>::
38 The repository to sync into.
39
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050040pre-receive Hook
41----------------
42Before any ref is updated, if $GIT_DIR/hooks/pre-receive file exists
Shawn O. Pearcef43cd492007-03-10 03:28:16 -050043and is executable, it will be invoked once with no parameters. The
44standard input of the hook will be one line per ref to be updated:
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050045
Shawn O. Pearcef43cd492007-03-10 03:28:16 -050046 sha1-old SP sha1-new SP refname LF
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050047
Shawn O. Pearcef43cd492007-03-10 03:28:16 -050048The refname value is relative to $GIT_DIR; e.g. for the master
49head this is "refs/heads/master". The two sha1 values before
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050050each refname are the object names for the refname before and after
Jeff King967506b2007-07-02 01:24:59 -040051the update. Refs to be created will have sha1-old equal to 0\{40},
52while refs to be deleted will have sha1-new equal to 0\{40}, otherwise
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050053sha1-old and sha1-new should be valid objects in the repository.
54
55This hook is called before any refname is updated and before any
56fast-forward checks are performed.
57
58If the pre-receive hook exits with a non-zero exit status no updates
59will be performed, and the update, post-receive and post-update
60hooks will not be invoked either. This can be useful to quickly
61bail out if the update is not to be supported.
62
63update Hook
64-----------
65Before each ref is updated, if $GIT_DIR/hooks/update file exists
66and is executable, it is invoked once per ref, with three parameters:
67
68 $GIT_DIR/hooks/update refname sha1-old sha1-new
69
70The refname parameter is relative to $GIT_DIR; e.g. for the master
71head this is "refs/heads/master". The two sha1 arguments are
72the object names for the refname before and after the update.
73Note that the hook is called before the refname is updated,
Jeff King967506b2007-07-02 01:24:59 -040074so either sha1-old is 0\{40} (meaning there is no such ref yet),
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050075or it should match what is recorded in refname.
76
77The hook should exit with non-zero status if it wants to disallow
78updating the named ref. Otherwise it should exit with zero.
79
80Successful execution (a zero exit status) of this hook does not
Brian Hetro02783072007-08-23 20:44:13 -040081ensure the ref will actually be updated, it is only a prerequisite.
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050082As such it is not a good idea to send notices (e.g. email) from
83this hook. Consider using the post-receive hook instead.
84
85post-receive Hook
86-----------------
87After all refs were updated (or attempted to be updated), if any
88ref update was successful, and if $GIT_DIR/hooks/post-receive
Shawn O. Pearcef43cd492007-03-10 03:28:16 -050089file exists and is executable, it will be invoke once with no
90parameters. The standard input of the hook will be one line
91for each successfully updated ref:
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050092
Shawn O. Pearcef43cd492007-03-10 03:28:16 -050093 sha1-old SP sha1-new SP refname LF
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050094
Shawn O. Pearcef43cd492007-03-10 03:28:16 -050095The refname value is relative to $GIT_DIR; e.g. for the master
96head this is "refs/heads/master". The two sha1 values before
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -050097each refname are the object names for the refname before and after
98the update. Refs that were created will have sha1-old equal to
Jeff King967506b2007-07-02 01:24:59 -0400990\{40}, while refs that were deleted will have sha1-new equal to
1000\{40}, otherwise sha1-old and sha1-new should be valid objects in
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500101the repository.
102
103Using this hook, it is easy to generate mails describing the updates
104to the repository. This example script sends one mail message per
105ref listing the commits pushed to the repository:
106
107 #!/bin/sh
108 # mail out commit update information.
Shawn O. Pearcef43cd492007-03-10 03:28:16 -0500109 while read oval nval ref
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500110 do
Shawn O. Pearcef43cd492007-03-10 03:28:16 -0500111 if expr "$oval" : '0*$' >/dev/null
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500112 then
113 echo "Created a new ref, with the following commits:"
Jonathan Niederb1889c32008-06-30 01:09:04 -0500114 git rev-list --pretty "$nval"
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500115 else
116 echo "New commits:"
Jonathan Niederb1889c32008-06-30 01:09:04 -0500117 git rev-list --pretty "$nval" "^$oval"
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500118 fi |
Shawn O. Pearcef43cd492007-03-10 03:28:16 -0500119 mail -s "Changes to ref $ref" commit-list@mydomain
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500120 done
121 exit 0
122
123The exit code from this hook invocation is ignored, however a
124non-zero exit code will generate an error message.
125
126Note that it is possible for refname to not have sha1-new when this
127hook runs. This can easily occur if another user modifies the ref
Jonathan Niederba020ef2008-07-03 00:41:41 -0500128after it was updated by 'git-receive-pack', but before the hook was able
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500129to evaluate it. It is recommended that hooks rely on sha1-new
130rather than the current value of refname.
131
132post-update Hook
133----------------
134After all other processing, if at least one ref was updated, and
135if $GIT_DIR/hooks/post-update file exists and is executable, then
136post-update will called with the list of refs that have been updated.
137This can be used to implement any repository wide cleanup tasks.
138
139The exit code from this hook invocation is ignored; the only thing
Jonathan Niederba020ef2008-07-03 00:41:41 -0500140left for 'git-receive-pack' to do at that point is to exit itself
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500141anyway.
142
Jonathan Nieder483bc4f2008-06-30 13:56:34 -0500143This hook can be used, for example, to run `git update-server-info`
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500144if the repository is packed and is served via a dumb transport.
145
146 #!/bin/sh
Jonathan Niederb1889c32008-06-30 01:09:04 -0500147 exec git update-server-info
Shawn O. Pearce05ef58e2007-03-07 16:52:05 -0500148
Junio C Hamano6d35cc72005-09-02 21:19:26 -0700149
150SEE ALSO
151--------
Dan McGee5162e692007-12-29 00:20:38 -0600152linkgit:git-send-pack[1]
Junio C Hamano6d35cc72005-09-02 21:19:26 -0700153
154
Junio C Hamano2a245012005-07-14 00:10:05 -0700155Author
156------
157Written by Linus Torvalds <torvalds@osdl.org>
158
159Documentation
160--------------
161Documentation by Junio C Hamano.
162
163GIT
164---
Christian Couder9e1f0a82008-06-06 09:07:32 +0200165Part of the linkgit:git[1] suite