This release supports the "version 2" format of the .idx
file. This is automatically enabled when a huge packfile
needs more than 32-bit to express offsets of objects in the
- pack
+ pack.
* Comes with an updated git-gui 0.7.0
- Local "git fetch" from a repository whose object store is
one of the alternates (e.g. fetching from the origin in a
repository created with "git clone -l -s") avoids
- downloading objects unnecessary.
+ downloading objects unnecessarily.
- "git blame" uses .mailmap to canonicalize the author name
just like "git shortlog" does.
- "git cherry-pick" and "git revert" does not use .msg file in
the working tree to prepare commit message; instead it uses
- $GIT_DIR/MERGE_MSG as other commands.
+ $GIT_DIR/MERGE_MSG as other commands do.
* Builds
- gitk and git-gui can be configured out.
- Generated documentation pages automatically get version
- information from GIT_VERSION
+ information from GIT_VERSION.
- Parallel build with "make -j" descending into subdirectory
was fixed.
- The recursive merge strategy updated a worktree file that
was changed identically in two branches, when one of them
renamed it. We do not do that when there is no rename, so
- match that behaviour.
+ match that behaviour. This avoids excessive rebuilds.
- The default pack depth has been increased to 50, as the
recent addition of delta_base_cache makes deeper delta chains
- much less expensive to access.
+ much less expensive to access. Depending on the project, it was
+ reported that this reduces the resulting pack file by 10%
+ or so.
Fixes since v1.5.1
--
exec >/var/tmp/1
-O=v1.5.2-rc2-91-g616e40b
+O=v1.5.2-rc3
echo O=`git describe refs/heads/master`
git shortlog --no-merges $O..refs/heads/master ^refs/heads/maint
<div class="listingblock">\r
<div class="content">\r
<pre><tt>$ git clone -l -s -n . ../copy\r
-$ cd copy\r
+$ cd ../copy\r
$ git show-branch</tt></pre>\r
</div></div>\r
</dd>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 04-Apr-2007 18:33:33 UTC\r
+Last updated 12-May-2007 20:49:27 UTC\r
</div>\r
</div>\r
</body>\r
+
------------
$ git clone -l -s -n . ../copy
-$ cd copy
+$ cd ../copy
$ git show-branch
------------
<p>This hook is meant primarily for notification, and cannot affect\r
the outcome of <tt>git-commit</tt>.</p>\r
</div>\r
-<h2>update</h2>\r
+<h2><a id="pre-receive"></a>pre-receive</h2>\r
+<div class="sectionbody">\r
+<p>This hook is invoked by <tt>git-receive-pack</tt> on the remote repository,\r
+which happens when a <tt>git push</tt> is done on a local repository.\r
+Just before starting to update refs on the remote repository, the\r
+pre-receive hook is invoked. Its exit status determines the success\r
+or failure of the update.</p>\r
+<p>This hook executes once for the receive operation. It takes no\r
+arguments, but for each ref to be updated it receives on standard\r
+input a line of the format:</p>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><tt><old-value> SP <new-value> SP <ref-name> LF</tt></pre>\r
+</div></div>\r
+<p>where <tt><old-value></tt> is the old object name stored in the ref,\r
+<tt><new-value></tt> is the new object name to be stored in the ref and\r
+<tt><ref-name></tt> is the full name of the ref.\r
+When creating a new ref, <tt><old-value></tt> is 40 <tt>0</tt>.</p>\r
+<p>If the hook exits with non-zero status, none of the refs will be\r
+updated. If the hook exits with zero, updating of individual refs can\r
+still be prevented by the <a href="#update"><em>update</em></a> hook.</p>\r
+<p>If you want to report something to the <tt>git-send-pack</tt> on the other end,\r
+you can simply <tt>echo</tt> your messages.</p>\r
+</div>\r
+<h2><a id="update"></a>update</h2>\r
<div class="sectionbody">\r
<p>This hook is invoked by <tt>git-receive-pack</tt> on the remote repository,\r
which happens when a <tt>git push</tt> is done on a local repository.\r
</ul>\r
<p>A zero exit from the update hook allows the ref to be updated.\r
Exiting with a non-zero status prevents <tt>git-receive-pack</tt>\r
-from updating the ref.</p>\r
+from updating that ref.</p>\r
<p>This hook can be used to prevent <em>forced</em> update on certain refs by\r
making sure that the object name is a commit object that is a\r
descendant of the commit object named by the old object name.\r
That is, to enforce a "fast forward only" policy.</p>\r
<p>It could also be used to log the old..new status. However, it\r
does not know the entire set of branches, so it would end up\r
-firing one e-mail per ref when used naively, though.</p>\r
+firing one e-mail per ref when used naively, though. The\r
+<a href="#post-receive"><em>post-receive</em></a> hook is more suited to that.</p>\r
<p>Another use suggested on the mailing list is to use this hook to\r
implement access control which is finer grained than the one\r
based on filesystem group.</p>\r
<p>The standard output of this hook is sent to <tt>stderr</tt>, so if you\r
want to report something to the <tt>git-send-pack</tt> on the other end,\r
you can simply <tt>echo</tt> your messages.</p>\r
-<p>The default <em>update</em> hook, when enabled, demonstrates how to\r
-send out a notification e-mail.</p>\r
+<p>The default <em>update</em> hook, when enabled—and with\r
+<tt>hooks.allowunannotated</tt> config option turned on—prevents\r
+unannotated tags to be pushed.</p>\r
+</div>\r
+<h2><a id="post-receive"></a>post-receive</h2>\r
+<div class="sectionbody">\r
+<p>This hook is invoked by <tt>git-receive-pack</tt> on the remote repository,\r
+which happens when a <tt>git push</tt> is done on a local repository.\r
+It executes on the remote repository once after all the refs have\r
+been updated.</p>\r
+<p>This hook executes once for the receive operation. It takes no\r
+arguments, but gets the same information as the <tt>pre-receive</tt>\r
+hook does on its standard input.</p>\r
+<p>This hook does not affect the outcome of <tt>git-receive-pack</tt>, as it\r
+is called after the real work is done.</p>\r
+<p>This supersedes the <a id="post-update"></a> hook in that it actually get's\r
+both old and new values of all the refs.</p>\r
+<p>If you want to report something to the <tt>git-send-pack</tt> on the\r
+other end, you can simply <tt>echo</tt> your messages.</p>\r
+<p>The default <em>post-receive</em> hook is empty, but there is\r
+a sample script <tt>post-receive-email</tt> provided in the <tt>contrib/hooks</tt>\r
+directory in git distribution, which implements sending commit\r
+emails.</p>\r
</div>\r
-<h2>post-update</h2>\r
+<h2><a id="post-update"></a>post-update</h2>\r
<div class="sectionbody">\r
<p>This hook is invoked by <tt>git-receive-pack</tt> on the remote repository,\r
which happens when a <tt>git push</tt> is done on a local repository.\r
<p>The <em>post-update</em> hook can tell what are the heads that were pushed,\r
but it does not know what their original and updated values are,\r
so it is a poor place to do log old..new.</p>\r
+<p>In general, <tt>post-receive</tt> hook is preferred when the hook needs\r
+to decide its acion on the status of the entire set of refs\r
+being updated, as this hook is called once per ref, with\r
+information only on a single ref at a time.</p>\r
<p>When enabled, the default <em>post-update</em> hook runs\r
<tt>git-update-server-info</tt> to keep the information used by dumb\r
transports (e.g., HTTP) up-to-date. If you are publishing\r
a git repository that is accessible via HTTP, you should\r
probably enable this hook.</p>\r
-<p>The standard output of this hook is sent to <tt>/dev/null</tt>; if you\r
-want to report something to the <tt>git-send-pack</tt> on the other end,\r
-you can redirect your output to your <tt>stderr</tt>.</p>\r
+<p>Both standard output and standard error output are forwarded to\r
+<tt>git-send-pack</tt> on the other end.</p>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 04-Apr-2007 18:34:45 UTC\r
+Last updated 12-May-2007 20:49:27 UTC\r
</div>\r
</div>\r
</body>\r
This hook is meant primarily for notification, and cannot affect
the outcome of `git-commit`.
+[[pre-receive]]
+pre-receive
+-----------
+
+This hook is invoked by `git-receive-pack` on the remote repository,
+which happens when a `git push` is done on a local repository.
+Just before starting to update refs on the remote repository, the
+pre-receive hook is invoked. Its exit status determines the success
+or failure of the update.
+
+This hook executes once for the receive operation. It takes no
+arguments, but for each ref to be updated it receives on standard
+input a line of the format:
+
+ <old-value> SP <new-value> SP <ref-name> LF
+
+where `<old-value>` is the old object name stored in the ref,
+`<new-value>` is the new object name to be stored in the ref and
+`<ref-name>` is the full name of the ref.
+When creating a new ref, `<old-value>` is 40 `0`.
+
+If the hook exits with non-zero status, none of the refs will be
+updated. If the hook exits with zero, updating of individual refs can
+still be prevented by the <<update,'update'>> hook.
+
+If you want to report something to the `git-send-pack` on the other end,
+you can simply `echo` your messages.
+
+[[update]]
update
------
A zero exit from the update hook allows the ref to be updated.
Exiting with a non-zero status prevents `git-receive-pack`
-from updating the ref.
+from updating that ref.
This hook can be used to prevent 'forced' update on certain refs by
making sure that the object name is a commit object that is a
It could also be used to log the old..new status. However, it
does not know the entire set of branches, so it would end up
-firing one e-mail per ref when used naively, though.
+firing one e-mail per ref when used naively, though. The
+<<post-receive,'post-receive'>> hook is more suited to that.
Another use suggested on the mailing list is to use this hook to
implement access control which is finer grained than the one
want to report something to the `git-send-pack` on the other end,
you can simply `echo` your messages.
-The default 'update' hook, when enabled, demonstrates how to
-send out a notification e-mail.
+The default 'update' hook, when enabled--and with
+`hooks.allowunannotated` config option turned on--prevents
+unannotated tags to be pushed.
+
+[[post-receive]]
+post-receive
+------------
+This hook is invoked by `git-receive-pack` on the remote repository,
+which happens when a `git push` is done on a local repository.
+It executes on the remote repository once after all the refs have
+been updated.
+
+This hook executes once for the receive operation. It takes no
+arguments, but gets the same information as the `pre-receive`
+hook does on its standard input.
+
+This hook does not affect the outcome of `git-receive-pack`, as it
+is called after the real work is done.
+
+This supersedes the [[post-update]] hook in that it actually get's
+both old and new values of all the refs.
+
+If you want to report something to the `git-send-pack` on the
+other end, you can simply `echo` your messages.
+
+The default 'post-receive' hook is empty, but there is
+a sample script `post-receive-email` provided in the `contrib/hooks`
+directory in git distribution, which implements sending commit
+emails.
+
+[[post-update]]
post-update
-----------
but it does not know what their original and updated values are,
so it is a poor place to do log old..new.
+In general, `post-receive` hook is preferred when the hook needs
+to decide its acion on the status of the entire set of refs
+being updated, as this hook is called once per ref, with
+information only on a single ref at a time.
+
When enabled, the default 'post-update' hook runs
`git-update-server-info` to keep the information used by dumb
transports (e.g., HTTP) up-to-date. If you are publishing
a git repository that is accessible via HTTP, you should
probably enable this hook.
-The standard output of this hook is sent to `/dev/null`; if you
-want to report something to the `git-send-pack` on the other end,
-you can redirect your output to your `stderr`.
+Both standard output and standard error output are forwarded to
+`git-send-pack` on the other end.