blob: 514f03c97903aa0be41a4a8f0df236ccb68280b0 [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-receive-pack(1)
2===================
3
4NAME
5----
Junio C Hamano7c73c662007-01-19 00:37:506git-receive-pack - Receive what is pushed into the repository
Junio C Hamano1a4e8412005-12-27 08:17:237
8
9SYNOPSIS
10--------
Junio C Hamanofce7c7e2008-07-02 03:06:3811'git receive-pack' <directory>
Junio C Hamano1a4e8412005-12-27 08:17:2312
13DESCRIPTION
14-----------
Junio C Hamanoba4b9282008-07-06 05:20:3115Invoked by 'git-send-pack' and updates the repository with the
Junio C Hamano1a4e8412005-12-27 08:17:2316information fed from the remote end.
17
18This command is usually not invoked directly by the end user.
Junio C Hamanoba4b9282008-07-06 05:20:3119The UI for the protocol is on the 'git-send-pack' side, and the
Junio C Hamano1a4e8412005-12-27 08:17:2320program pair is meant to be used to push updates to remote
Junio C Hamanofce7c7e2008-07-02 03:06:3821repository. For pull operations, see linkgit:git-fetch-pack[1].
Junio C Hamano1a4e8412005-12-27 08:17:2322
23The command allows for creation and fast forwarding of sha1 refs
24(heads/tags) on the remote end (strictly speaking, it is the
Junio C Hamanoba4b9282008-07-06 05:20:3125local end 'git-receive-pack' runs, but to the user who is sitting at
Junio C Hamano1a4e8412005-12-27 08:17:2326the send-pack end, it is updating the remote. Confused?)
27
Junio C Hamano1a4e8412005-12-27 08:17:2328There are other real-world examples of using update and
29post-update hooks found in the Documentation/howto directory.
30
Junio C Hamanoba4b9282008-07-06 05:20:3131'git-receive-pack' honours the receive.denyNonFastForwards config
Junio C Hamanoabcd65d2007-03-08 02:43:0032option, which tells it if updates to a ref should be denied if they
33are not fast-forwards.
Junio C Hamano1a4e8412005-12-27 08:17:2334
35OPTIONS
36-------
37<directory>::
38The repository to sync into.
39
Junio C Hamanoabcd65d2007-03-08 02:43:0040pre-receive Hook
41----------------
42Before any ref is updated, if $GIT_DIR/hooks/pre-receive file exists
Junio C Hamanoc51fede2007-03-12 07:29:2043and 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:
Junio C Hamanoabcd65d2007-03-08 02:43:0045
Junio C Hamanoc51fede2007-03-12 07:29:2046 sha1-old SP sha1-new SP refname LF
Junio C Hamanoabcd65d2007-03-08 02:43:0047
Junio C Hamanoc51fede2007-03-12 07:29:2048The refname value is relative to $GIT_DIR; e.g. for the master
49head this is "refs/heads/master". The two sha1 values before
Junio C Hamanoabcd65d2007-03-08 02:43:0050each refname are the object names for the refname before and after
Junio C Hamano1d90cb02007-07-03 07:05:3151the 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
Junio C Hamanoabcd65d2007-03-08 02:43:0053sha1-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,
Junio C Hamano1d90cb02007-07-03 07:05:3174so either sha1-old is 0\{40} (meaning there is no such ref yet),
Junio C Hamanoabcd65d2007-03-08 02:43:0075or 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
Junio C Hamanoa6387422007-08-25 03:54:2781ensure the ref will actually be updated, it is only a prerequisite.
Junio C Hamanoabcd65d2007-03-08 02:43:0082As 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
Junio C Hamano54bf1e22008-12-20 06:30:1189file exists and is executable, it will be invoked once with no
Junio C Hamanoc51fede2007-03-12 07:29:2090parameters. The standard input of the hook will be one line
91for each successfully updated ref:
Junio C Hamanoabcd65d2007-03-08 02:43:0092
Junio C Hamanoc51fede2007-03-12 07:29:2093 sha1-old SP sha1-new SP refname LF
Junio C Hamanoabcd65d2007-03-08 02:43:0094
Junio C Hamanoc51fede2007-03-12 07:29:2095The refname value is relative to $GIT_DIR; e.g. for the master
96head this is "refs/heads/master". The two sha1 values before
Junio C Hamanoabcd65d2007-03-08 02:43:0097each refname are the object names for the refname before and after
98the update. Refs that were created will have sha1-old equal to
Junio C Hamano1d90cb02007-07-03 07:05:31990\{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
Junio C Hamanoabcd65d2007-03-08 02:43:00101the 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.
Junio C Hamanoc51fede2007-03-12 07:29:20109while read oval nval ref
Junio C Hamanoabcd65d2007-03-08 02:43:00110do
Junio C Hamanoc51fede2007-03-12 07:29:20111if expr "$oval" : '0*$' >/dev/null
Junio C Hamanoabcd65d2007-03-08 02:43:00112then
113echo "Created a new ref, with the following commits:"
Junio C Hamanofce7c7e2008-07-02 03:06:38114git rev-list --pretty "$nval"
Junio C Hamanoabcd65d2007-03-08 02:43:00115else
116echo "New commits:"
Junio C Hamanofce7c7e2008-07-02 03:06:38117git rev-list --pretty "$nval" "^$oval"
Junio C Hamanoabcd65d2007-03-08 02:43:00118fi |
Junio C Hamanoc51fede2007-03-12 07:29:20119mail -s "Changes to ref $ref" commit-list@mydomain
Junio C Hamanoabcd65d2007-03-08 02:43:00120done
121exit 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
Junio C Hamanoba4b9282008-07-06 05:20:31128after it was updated by 'git-receive-pack', but before the hook was able
Junio C Hamanoabcd65d2007-03-08 02:43:00129to 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
Junio C Hamano54bf1e22008-12-20 06:30:11136post-update will be called with the list of refs that have been updated.
Junio C Hamanoabcd65d2007-03-08 02:43:00137This can be used to implement any repository wide cleanup tasks.
138
139The exit code from this hook invocation is ignored; the only thing
Junio C Hamanoba4b9282008-07-06 05:20:31140left for 'git-receive-pack' to do at that point is to exit itself
Junio C Hamanoabcd65d2007-03-08 02:43:00141anyway.
142
Junio C Hamanofce7c7e2008-07-02 03:06:38143This hook can be used, for example, to run `git update-server-info`
Junio C Hamanoabcd65d2007-03-08 02:43:00144if the repository is packed and is served via a dumb transport.
145
146#!/bin/sh
Junio C Hamanofce7c7e2008-07-02 03:06:38147exec git update-server-info
Junio C Hamanoabcd65d2007-03-08 02:43:00148
Junio C Hamano1a4e8412005-12-27 08:17:23149
150SEE ALSO
151--------
Junio C Hamano35738e82008-01-07 07:55:46152linkgit:git-send-pack[1]
Junio C Hamano1a4e8412005-12-27 08:17:23153
154
155Author
156------
157Written by Linus Torvalds <torvalds@osdl.org>
158
159Documentation
160--------------
161Documentation by Junio C Hamano.
162
163GIT
164---
Junio C Hamanof7c042d2008-06-06 22:50:53165Part of the linkgit:git[1] suite