Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" |
| 2 | "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> |
| 3 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> |
| 4 | <head> |
| 5 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 6 | <meta name="generator" content="AsciiDoc 8.2.5" /> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 7 | <style type="text/css"> |
| 8 | /* Debug borders */ |
| 9 | p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 { |
| 10 | /* |
| 11 | border: 1px solid red; |
| 12 | */ |
| 13 | } |
| 14 | |
| 15 | body { |
| 16 | margin: 1em 5% 1em 5%; |
| 17 | } |
| 18 | |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 19 | a { |
| 20 | color: blue; |
| 21 | text-decoration: underline; |
| 22 | } |
| 23 | a:visited { |
| 24 | color: fuchsia; |
| 25 | } |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 26 | |
| 27 | em { |
| 28 | font-style: italic; |
| 29 | } |
| 30 | |
| 31 | strong { |
| 32 | font-weight: bold; |
| 33 | } |
| 34 | |
| 35 | tt { |
| 36 | color: navy; |
| 37 | } |
| 38 | |
| 39 | h1, h2, h3, h4, h5, h6 { |
| 40 | color: #527bbd; |
| 41 | font-family: sans-serif; |
| 42 | margin-top: 1.2em; |
| 43 | margin-bottom: 0.5em; |
| 44 | line-height: 1.3; |
| 45 | } |
| 46 | |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 47 | h1, h2, h3 { |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 48 | border-bottom: 2px solid silver; |
| 49 | } |
| 50 | h2 { |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 51 | padding-top: 0.5em; |
| 52 | } |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 53 | h3 { |
| 54 | float: left; |
| 55 | } |
| 56 | h3 + * { |
| 57 | clear: left; |
| 58 | } |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 59 | |
| 60 | div.sectionbody { |
| 61 | font-family: serif; |
| 62 | margin-left: 0; |
| 63 | } |
| 64 | |
| 65 | hr { |
| 66 | border: 1px solid silver; |
| 67 | } |
| 68 | |
| 69 | p { |
| 70 | margin-top: 0.5em; |
| 71 | margin-bottom: 0.5em; |
| 72 | } |
| 73 | |
| 74 | pre { |
| 75 | padding: 0; |
| 76 | margin: 0; |
| 77 | } |
| 78 | |
| 79 | span#author { |
| 80 | color: #527bbd; |
| 81 | font-family: sans-serif; |
| 82 | font-weight: bold; |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 83 | font-size: 1.1em; |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 84 | } |
| 85 | span#email { |
| 86 | } |
| 87 | span#revision { |
| 88 | font-family: sans-serif; |
| 89 | } |
| 90 | |
| 91 | div#footer { |
| 92 | font-family: sans-serif; |
| 93 | font-size: small; |
| 94 | border-top: 2px solid silver; |
| 95 | padding-top: 0.5em; |
| 96 | margin-top: 4.0em; |
| 97 | } |
| 98 | div#footer-text { |
| 99 | float: left; |
| 100 | padding-bottom: 0.5em; |
| 101 | } |
| 102 | div#footer-badges { |
| 103 | float: right; |
| 104 | padding-bottom: 0.5em; |
| 105 | } |
| 106 | |
| 107 | div#preamble, |
| 108 | div.tableblock, div.imageblock, div.exampleblock, div.verseblock, |
| 109 | div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, |
| 110 | div.admonitionblock { |
| 111 | margin-right: 10%; |
| 112 | margin-top: 1.5em; |
| 113 | margin-bottom: 1.5em; |
| 114 | } |
| 115 | div.admonitionblock { |
| 116 | margin-top: 2.5em; |
| 117 | margin-bottom: 2.5em; |
| 118 | } |
| 119 | |
| 120 | div.content { /* Block element content. */ |
| 121 | padding: 0; |
| 122 | } |
| 123 | |
| 124 | /* Block element titles. */ |
| 125 | div.title, caption.title { |
| 126 | font-family: sans-serif; |
| 127 | font-weight: bold; |
| 128 | text-align: left; |
| 129 | margin-top: 1.0em; |
| 130 | margin-bottom: 0.5em; |
| 131 | } |
| 132 | div.title + * { |
| 133 | margin-top: 0; |
| 134 | } |
| 135 | |
| 136 | td div.title:first-child { |
| 137 | margin-top: 0.0em; |
| 138 | } |
| 139 | div.content div.title:first-child { |
| 140 | margin-top: 0.0em; |
| 141 | } |
| 142 | div.content + div.title { |
| 143 | margin-top: 0.0em; |
| 144 | } |
| 145 | |
| 146 | div.sidebarblock > div.content { |
| 147 | background: #ffffee; |
| 148 | border: 1px solid silver; |
| 149 | padding: 0.5em; |
| 150 | } |
| 151 | |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 152 | div.listingblock { |
| 153 | margin-right: 0%; |
| 154 | } |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 155 | div.listingblock > div.content { |
| 156 | border: 1px solid silver; |
| 157 | background: #f4f4f4; |
| 158 | padding: 0.5em; |
| 159 | } |
| 160 | |
| 161 | div.quoteblock > div.content { |
| 162 | padding-left: 2.0em; |
| 163 | } |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 164 | |
| 165 | div.attribution { |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 166 | text-align: right; |
| 167 | } |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 168 | div.verseblock + div.attribution { |
| 169 | text-align: left; |
| 170 | } |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 171 | |
| 172 | div.admonitionblock .icon { |
| 173 | vertical-align: top; |
| 174 | font-size: 1.1em; |
| 175 | font-weight: bold; |
| 176 | text-decoration: underline; |
| 177 | color: #527bbd; |
| 178 | padding-right: 0.5em; |
| 179 | } |
| 180 | div.admonitionblock td.content { |
| 181 | padding-left: 0.5em; |
| 182 | border-left: 2px solid silver; |
| 183 | } |
| 184 | |
| 185 | div.exampleblock > div.content { |
| 186 | border-left: 2px solid silver; |
| 187 | padding: 0.5em; |
| 188 | } |
| 189 | |
| 190 | div.verseblock div.content { |
| 191 | white-space: pre; |
| 192 | } |
| 193 | |
| 194 | div.imageblock div.content { padding-left: 0; } |
| 195 | div.imageblock img { border: 1px solid silver; } |
| 196 | span.image img { border-style: none; } |
| 197 | |
| 198 | dl { |
| 199 | margin-top: 0.8em; |
| 200 | margin-bottom: 0.8em; |
| 201 | } |
| 202 | dt { |
| 203 | margin-top: 0.5em; |
| 204 | margin-bottom: 0; |
| 205 | font-style: italic; |
| 206 | } |
| 207 | dd > *:first-child { |
| 208 | margin-top: 0; |
| 209 | } |
| 210 | |
| 211 | ul, ol { |
| 212 | list-style-position: outside; |
| 213 | } |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 214 | div.olist2 ol { |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 215 | list-style-type: lower-alpha; |
| 216 | } |
| 217 | |
| 218 | div.tableblock > table { |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 219 | border: 3px solid #527bbd; |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 220 | } |
| 221 | thead { |
| 222 | font-family: sans-serif; |
| 223 | font-weight: bold; |
| 224 | } |
| 225 | tfoot { |
| 226 | font-weight: bold; |
| 227 | } |
| 228 | |
| 229 | div.hlist { |
| 230 | margin-top: 0.8em; |
| 231 | margin-bottom: 0.8em; |
| 232 | } |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 233 | div.hlist td { |
| 234 | padding-bottom: 5px; |
| 235 | } |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 236 | td.hlist1 { |
| 237 | vertical-align: top; |
| 238 | font-style: italic; |
| 239 | padding-right: 0.8em; |
| 240 | } |
| 241 | td.hlist2 { |
| 242 | vertical-align: top; |
| 243 | } |
| 244 | |
| 245 | @media print { |
| 246 | div#footer-badges { display: none; } |
| 247 | } |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 248 | |
| 249 | div#toctitle { |
| 250 | color: #527bbd; |
| 251 | font-family: sans-serif; |
| 252 | font-size: 1.1em; |
| 253 | font-weight: bold; |
| 254 | margin-top: 1.0em; |
| 255 | margin-bottom: 0.1em; |
| 256 | } |
| 257 | |
| 258 | div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { |
| 259 | margin-top: 0; |
| 260 | margin-bottom: 0; |
| 261 | } |
| 262 | div.toclevel2 { |
| 263 | margin-left: 2em; |
| 264 | font-size: 0.9em; |
| 265 | } |
| 266 | div.toclevel3 { |
| 267 | margin-left: 4em; |
| 268 | font-size: 0.9em; |
| 269 | } |
| 270 | div.toclevel4 { |
| 271 | margin-left: 6em; |
| 272 | font-size: 0.9em; |
| 273 | } |
| 274 | include1::./stylesheets/xhtml11-manpage.css[] |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 275 | /* Workarounds for IE6's broken and incomplete CSS2. */ |
| 276 | |
| 277 | div.sidebar-content { |
| 278 | background: #ffffee; |
| 279 | border: 1px solid silver; |
| 280 | padding: 0.5em; |
| 281 | } |
| 282 | div.sidebar-title, div.image-title { |
| 283 | font-family: sans-serif; |
| 284 | font-weight: bold; |
| 285 | margin-top: 0.0em; |
| 286 | margin-bottom: 0.5em; |
| 287 | } |
| 288 | |
| 289 | div.listingblock div.content { |
| 290 | border: 1px solid silver; |
| 291 | background: #f4f4f4; |
| 292 | padding: 0.5em; |
| 293 | } |
| 294 | |
| 295 | div.quoteblock-content { |
| 296 | padding-left: 2.0em; |
| 297 | } |
| 298 | |
| 299 | div.exampleblock-content { |
| 300 | border-left: 2px solid silver; |
| 301 | padding-left: 0.5em; |
| 302 | } |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 303 | |
| 304 | /* IE6 sets dynamically generated links as visited. */ |
| 305 | div#toc a:visited { color: blue; } |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 306 | </style> |
| 307 | <title>git-receive-pack(1)</title> |
| 308 | </head> |
| 309 | <body> |
| 310 | <div id="header"> |
| 311 | <h1> |
| 312 | git-receive-pack(1) Manual Page |
| 313 | </h1> |
| 314 | <h2>NAME</h2> |
| 315 | <div class="sectionbody"> |
| 316 | <p>git-receive-pack - |
Junio C Hamano | 7c73c66 | 2007-01-19 00:37:50 | [diff] [blame] | 317 | Receive what is pushed into the repository |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 318 | </p> |
| 319 | </div> |
| 320 | </div> |
| 321 | <h2>SYNOPSIS</h2> |
| 322 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 323 | <div class="para"><p><em>git receive-pack</em> <directory></p></div> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 324 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 325 | <h2 id="_description">DESCRIPTION</h2> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 326 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 327 | <div class="para"><p>Invoked by <em>git-send-pack</em> and updates the repository with the |
| 328 | information fed from the remote end.</p></div> |
| 329 | <div class="para"><p>This command is usually not invoked directly by the end user. |
| 330 | The UI for the protocol is on the <em>git-send-pack</em> side, and the |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 331 | program pair is meant to be used to push updates to remote |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 332 | repository. For pull operations, see <a href="git-fetch-pack.html">git-fetch-pack(1)</a>.</p></div> |
| 333 | <div class="para"><p>The command allows for creation and fast forwarding of sha1 refs |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 334 | (heads/tags) on the remote end (strictly speaking, it is the |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 335 | local end <em>git-receive-pack</em> runs, but to the user who is sitting at |
| 336 | the send-pack end, it is updating the remote. Confused?)</p></div> |
| 337 | <div class="para"><p>There are other real-world examples of using update and |
| 338 | post-update hooks found in the Documentation/howto directory.</p></div> |
| 339 | <div class="para"><p><em>git-receive-pack</em> honours the receive.denyNonFastForwards config |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 340 | option, which tells it if updates to a ref should be denied if they |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 341 | are not fast-forwards.</p></div> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 342 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 343 | <h2 id="_options">OPTIONS</h2> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 344 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 345 | <div class="vlist"><dl> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 346 | <dt> |
| 347 | <directory> |
| 348 | </dt> |
| 349 | <dd> |
| 350 | <p> |
| 351 | The repository to sync into. |
| 352 | </p> |
| 353 | </dd> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 354 | </dl></div> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 355 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 356 | <h2 id="_pre_receive_hook">pre-receive Hook</h2> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 357 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 358 | <div class="para"><p>Before any ref is updated, if $GIT_DIR/hooks/pre-receive file exists |
Junio C Hamano | c51fede | 2007-03-12 07:29:20 | [diff] [blame] | 359 | and is executable, it will be invoked once with no parameters. The |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 360 | standard input of the hook will be one line per ref to be updated:</p></div> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 361 | <div class="literalblock"> |
| 362 | <div class="content"> |
Junio C Hamano | c51fede | 2007-03-12 07:29:20 | [diff] [blame] | 363 | <pre><tt>sha1-old SP sha1-new SP refname LF</tt></pre> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 364 | </div></div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 365 | <div class="para"><p>The refname value is relative to $GIT_DIR; e.g. for the master |
Junio C Hamano | c51fede | 2007-03-12 07:29:20 | [diff] [blame] | 366 | head this is "refs/heads/master". The two sha1 values before |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 367 | each refname are the object names for the refname before and after |
Junio C Hamano | 1d90cb0 | 2007-07-03 07:05:31 | [diff] [blame] | 368 | the update. Refs to be created will have sha1-old equal to 0{40}, |
| 369 | while refs to be deleted will have sha1-new equal to 0{40}, otherwise |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 370 | sha1-old and sha1-new should be valid objects in the repository.</p></div> |
| 371 | <div class="para"><p>This hook is called before any refname is updated and before any |
| 372 | fast-forward checks are performed.</p></div> |
| 373 | <div class="para"><p>If the pre-receive hook exits with a non-zero exit status no updates |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 374 | will be performed, and the update, post-receive and post-update |
| 375 | hooks will not be invoked either. This can be useful to quickly |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 376 | bail out if the update is not to be supported.</p></div> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 377 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 378 | <h2 id="_update_hook">update Hook</h2> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 379 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 380 | <div class="para"><p>Before each ref is updated, if $GIT_DIR/hooks/update file exists |
| 381 | and is executable, it is invoked once per ref, with three parameters:</p></div> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 382 | <div class="literalblock"> |
| 383 | <div class="content"> |
| 384 | <pre><tt>$GIT_DIR/hooks/update refname sha1-old sha1-new</tt></pre> |
| 385 | </div></div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 386 | <div class="para"><p>The refname parameter is relative to $GIT_DIR; e.g. for the master |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 387 | head this is "refs/heads/master". The two sha1 arguments are |
| 388 | the object names for the refname before and after the update. |
| 389 | Note that the hook is called before the refname is updated, |
Junio C Hamano | 1d90cb0 | 2007-07-03 07:05:31 | [diff] [blame] | 390 | so either sha1-old is 0{40} (meaning there is no such ref yet), |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 391 | or it should match what is recorded in refname.</p></div> |
| 392 | <div class="para"><p>The hook should exit with non-zero status if it wants to disallow |
| 393 | updating the named ref. Otherwise it should exit with zero.</p></div> |
| 394 | <div class="para"><p>Successful execution (a zero exit status) of this hook does not |
Junio C Hamano | a638742 | 2007-08-25 03:54:27 | [diff] [blame] | 395 | ensure the ref will actually be updated, it is only a prerequisite. |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 396 | As such it is not a good idea to send notices (e.g. email) from |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 397 | this hook. Consider using the post-receive hook instead.</p></div> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 398 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 399 | <h2 id="_post_receive_hook">post-receive Hook</h2> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 400 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 401 | <div class="para"><p>After all refs were updated (or attempted to be updated), if any |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 402 | ref update was successful, and if $GIT_DIR/hooks/post-receive |
Junio C Hamano | c51fede | 2007-03-12 07:29:20 | [diff] [blame] | 403 | file exists and is executable, it will be invoke once with no |
| 404 | parameters. The standard input of the hook will be one line |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 405 | for each successfully updated ref:</p></div> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 406 | <div class="literalblock"> |
| 407 | <div class="content"> |
Junio C Hamano | c51fede | 2007-03-12 07:29:20 | [diff] [blame] | 408 | <pre><tt>sha1-old SP sha1-new SP refname LF</tt></pre> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 409 | </div></div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 410 | <div class="para"><p>The refname value is relative to $GIT_DIR; e.g. for the master |
Junio C Hamano | c51fede | 2007-03-12 07:29:20 | [diff] [blame] | 411 | head this is "refs/heads/master". The two sha1 values before |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 412 | each refname are the object names for the refname before and after |
| 413 | the update. Refs that were created will have sha1-old equal to |
Junio C Hamano | 1d90cb0 | 2007-07-03 07:05:31 | [diff] [blame] | 414 | 0{40}, while refs that were deleted will have sha1-new equal to |
| 415 | 0{40}, otherwise sha1-old and sha1-new should be valid objects in |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 416 | the repository.</p></div> |
| 417 | <div class="para"><p>Using this hook, it is easy to generate mails describing the updates |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 418 | to the repository. This example script sends one mail message per |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 419 | ref listing the commits pushed to the repository:</p></div> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 420 | <div class="literalblock"> |
| 421 | <div class="content"> |
| 422 | <pre><tt>#!/bin/sh |
| 423 | # mail out commit update information. |
Junio C Hamano | c51fede | 2007-03-12 07:29:20 | [diff] [blame] | 424 | while read oval nval ref |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 425 | do |
Junio C Hamano | c51fede | 2007-03-12 07:29:20 | [diff] [blame] | 426 | if expr "$oval" : '0*$' >/dev/null |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 427 | then |
| 428 | echo "Created a new ref, with the following commits:" |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 429 | git rev-list --pretty "$nval" |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 430 | else |
| 431 | echo "New commits:" |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 432 | git rev-list --pretty "$nval" "^$oval" |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 433 | fi | |
Junio C Hamano | c51fede | 2007-03-12 07:29:20 | [diff] [blame] | 434 | mail -s "Changes to ref $ref" commit-list@mydomain |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 435 | done |
| 436 | exit 0</tt></pre> |
| 437 | </div></div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 438 | <div class="para"><p>The exit code from this hook invocation is ignored, however a |
| 439 | non-zero exit code will generate an error message.</p></div> |
| 440 | <div class="para"><p>Note that it is possible for refname to not have sha1-new when this |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 441 | hook runs. This can easily occur if another user modifies the ref |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 442 | after it was updated by <em>git-receive-pack</em>, but before the hook was able |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 443 | to evaluate it. It is recommended that hooks rely on sha1-new |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 444 | rather than the current value of refname.</p></div> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 445 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 446 | <h2 id="_post_update_hook">post-update Hook</h2> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 447 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 448 | <div class="para"><p>After all other processing, if at least one ref was updated, and |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 449 | if $GIT_DIR/hooks/post-update file exists and is executable, then |
| 450 | post-update will called with the list of refs that have been updated. |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 451 | This can be used to implement any repository wide cleanup tasks.</p></div> |
| 452 | <div class="para"><p>The exit code from this hook invocation is ignored; the only thing |
| 453 | left for <em>git-receive-pack</em> to do at that point is to exit itself |
| 454 | anyway.</p></div> |
| 455 | <div class="para"><p>This hook can be used, for example, to run <tt>git update-server-info</tt> |
| 456 | if the repository is packed and is served via a dumb transport.</p></div> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 457 | <div class="literalblock"> |
| 458 | <div class="content"> |
| 459 | <pre><tt>#!/bin/sh |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 460 | exec git update-server-info</tt></pre> |
Junio C Hamano | abcd65d | 2007-03-08 02:43:00 | [diff] [blame] | 461 | </div></div> |
| 462 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 463 | <h2 id="_see_also">SEE ALSO</h2> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 464 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 465 | <div class="para"><p><a href="git-send-pack.html">git-send-pack(1)</a></p></div> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 466 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 467 | <h2 id="_author">Author</h2> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 468 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 469 | <div class="para"><p>Written by Linus Torvalds <torvalds@osdl.org></p></div> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 470 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 471 | <h2 id="_documentation">Documentation</h2> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 472 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 473 | <div class="para"><p>Documentation by Junio C Hamano.</p></div> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 474 | </div> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 475 | <h2 id="_git">GIT</h2> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 476 | <div class="sectionbody"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 477 | <div class="para"><p>Part of the <a href="git.html">git(1)</a> suite</p></div> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 478 | </div> |
| 479 | <div id="footer"> |
| 480 | <div id="footer-text"> |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame^] | 481 | Last updated 2008-07-06 05:16:58 UTC |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 482 | </div> |
| 483 | </div> |
| 484 | </body> |
| 485 | </html> |