-GIT v1.5.1.2 Release Notes (draft)
+GIT v1.5.1.2 Release Notes
==========================
Fixes since v1.5.1.1
* Bugfixes
+ - "git clone" over http from a repository that has lost the
+ loose refs by running "git pack-refs" were broken (a code to
+ deal with this was added to "git fetch" in v1.5.0, but it
+ was missing from "git clone").
+
- "git diff a/ b/" incorrectly fell in "diff between two
filesystem objects" codepath, when the user most likely
wanted to limit the extent of output to two tracked
- git-blame on a very long working tree path had buffer
overrun problem.
+ - git-apply did not like to be fed two patches in a row that created
+ and then modified the same file.
+
+ - git-svn was confused when a non-project was stored directly under
+ trunk/, branches/ and tags/.
+
+ - git-svn wants the Error.pm module that was at least as new
+ as what we ship as part of git; install ours in our private
+ installation location if the one on the system is older.
+
+ - An earlier update to command line integer parameter parser was
+ botched and made 'update-index --cacheinfo' completely useless.
+
+
* Documentation updates
- Various documentation updates from J. Bruce Fields, Frank
Lichtenheld, Alex Riesen and others. Andrew Ruder started a
war on undocumented options.
-
----
-exec >/var/tmp/1
-O=v1.5.1.1-31-g0220f1e
-echo O=`git describe refs/heads/maint`
-git shortlog --no-merges $O..refs/heads/maint
gitlink:git-applypatch[1]::
Apply one patch extracted from an e-mail.
+gitlink:git-check-attr[1]::
+ Display gitattributes information..
+
gitlink:git-check-ref-format[1]::
Make sure ref name is well formed.
conflicts, 2 outputs conflicts and file changes. Level 5 and
above outputs debugging information. The default is level 2.
+merge.<driver>.name::
+ Defines a human readable name for a custom low-level
+ merge driver. See gitlink:gitattributes[5] for details.
+
+merge.<driver>.driver::
+ Defines the command that implements a custom low-level
+ merge driver. See gitlink:gitattributes[5] for details.
+
+merge.<driver>.recursive::
+ Names a low-level merge driver to be used when
+ performing an internal merge between common ancestors.
+ See gitlink:gitattributes[5] for details.
+
pack.window::
The size of the window used by gitlink:git-pack-objects[1] when no
window size is given on the command line. Defaults to 10.
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
+<head>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+<meta name="generator" content="AsciiDoc 7.0.2" />\r
+<style type="text/css">\r
+/* Debug borders */\r
+p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {\r
+/*\r
+ border: 1px solid red;\r
+*/\r
+}\r
+\r
+body {\r
+ margin: 1em 5% 1em 5%;\r
+}\r
+\r
+a { color: blue; }\r
+a:visited { color: fuchsia; }\r
+\r
+em {\r
+ font-style: italic;\r
+}\r
+\r
+strong {\r
+ font-weight: bold;\r
+}\r
+\r
+tt {\r
+ color: navy;\r
+}\r
+\r
+h1, h2, h3, h4, h5, h6 {\r
+ color: #527bbd;\r
+ font-family: sans-serif;\r
+ margin-top: 1.2em;\r
+ margin-bottom: 0.5em;\r
+ line-height: 1.3;\r
+}\r
+\r
+h1 {\r
+ border-bottom: 2px solid silver;\r
+}\r
+h2 {\r
+ border-bottom: 2px solid silver;\r
+ padding-top: 0.5em;\r
+}\r
+\r
+div.sectionbody {\r
+ font-family: serif;\r
+ margin-left: 0;\r
+}\r
+\r
+hr {\r
+ border: 1px solid silver;\r
+}\r
+\r
+p {\r
+ margin-top: 0.5em;\r
+ margin-bottom: 0.5em;\r
+}\r
+\r
+pre {\r
+ padding: 0;\r
+ margin: 0;\r
+}\r
+\r
+span#author {\r
+ color: #527bbd;\r
+ font-family: sans-serif;\r
+ font-weight: bold;\r
+ font-size: 1.2em;\r
+}\r
+span#email {\r
+}\r
+span#revision {\r
+ font-family: sans-serif;\r
+}\r
+\r
+div#footer {\r
+ font-family: sans-serif;\r
+ font-size: small;\r
+ border-top: 2px solid silver;\r
+ padding-top: 0.5em;\r
+ margin-top: 4.0em;\r
+}\r
+div#footer-text {\r
+ float: left;\r
+ padding-bottom: 0.5em;\r
+}\r
+div#footer-badges {\r
+ float: right;\r
+ padding-bottom: 0.5em;\r
+}\r
+\r
+div#preamble,\r
+div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
+div.admonitionblock {\r
+ margin-right: 10%;\r
+ margin-top: 1.5em;\r
+ margin-bottom: 1.5em;\r
+}\r
+div.admonitionblock {\r
+ margin-top: 2.5em;\r
+ margin-bottom: 2.5em;\r
+}\r
+\r
+div.content { /* Block element content. */\r
+ padding: 0;\r
+}\r
+\r
+/* Block element titles. */\r
+div.title, caption.title {\r
+ font-family: sans-serif;\r
+ font-weight: bold;\r
+ text-align: left;\r
+ margin-top: 1.0em;\r
+ margin-bottom: 0.5em;\r
+}\r
+div.title + * {\r
+ margin-top: 0;\r
+}\r
+\r
+td div.title:first-child {\r
+ margin-top: 0.0em;\r
+}\r
+div.content div.title:first-child {\r
+ margin-top: 0.0em;\r
+}\r
+div.content + div.title {\r
+ margin-top: 0.0em;\r
+}\r
+\r
+div.sidebarblock > div.content {\r
+ background: #ffffee;\r
+ border: 1px solid silver;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.listingblock > div.content {\r
+ border: 1px solid silver;\r
+ background: #f4f4f4;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.quoteblock > div.content {\r
+ padding-left: 2.0em;\r
+}\r
+div.quoteblock .attribution {\r
+ text-align: right;\r
+}\r
+\r
+div.admonitionblock .icon {\r
+ vertical-align: top;\r
+ font-size: 1.1em;\r
+ font-weight: bold;\r
+ text-decoration: underline;\r
+ color: #527bbd;\r
+ padding-right: 0.5em;\r
+}\r
+div.admonitionblock td.content {\r
+ padding-left: 0.5em;\r
+ border-left: 2px solid silver;\r
+}\r
+\r
+div.exampleblock > div.content {\r
+ border-left: 2px solid silver;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.verseblock div.content {\r
+ white-space: pre;\r
+}\r
+\r
+div.imageblock div.content { padding-left: 0; }\r
+div.imageblock img { border: 1px solid silver; }\r
+span.image img { border-style: none; }\r
+\r
+dl {\r
+ margin-top: 0.8em;\r
+ margin-bottom: 0.8em;\r
+}\r
+dt {\r
+ margin-top: 0.5em;\r
+ margin-bottom: 0;\r
+ font-style: italic;\r
+}\r
+dd > *:first-child {\r
+ margin-top: 0;\r
+}\r
+\r
+ul, ol {\r
+ list-style-position: outside;\r
+}\r
+ol.olist2 {\r
+ list-style-type: lower-alpha;\r
+}\r
+\r
+div.tableblock > table {\r
+ border-color: #527bbd;\r
+ border-width: 3px;\r
+}\r
+thead {\r
+ font-family: sans-serif;\r
+ font-weight: bold;\r
+}\r
+tfoot {\r
+ font-weight: bold;\r
+}\r
+\r
+div.hlist {\r
+ margin-top: 0.8em;\r
+ margin-bottom: 0.8em;\r
+}\r
+td.hlist1 {\r
+ vertical-align: top;\r
+ font-style: italic;\r
+ padding-right: 0.8em;\r
+}\r
+td.hlist2 {\r
+ vertical-align: top;\r
+}\r
+\r
+@media print {\r
+ div#footer-badges { display: none; }\r
+}\r
+include::./stylesheets/xhtml11-manpage.css[]\r
+/* Workarounds for IE6's broken and incomplete CSS2. */\r
+\r
+div.sidebar-content {\r
+ background: #ffffee;\r
+ border: 1px solid silver;\r
+ padding: 0.5em;\r
+}\r
+div.sidebar-title, div.image-title {\r
+ font-family: sans-serif;\r
+ font-weight: bold;\r
+ margin-top: 0.0em;\r
+ margin-bottom: 0.5em;\r
+}\r
+\r
+div.listingblock div.content {\r
+ border: 1px solid silver;\r
+ background: #f4f4f4;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.quoteblock-content {\r
+ padding-left: 2.0em;\r
+}\r
+\r
+div.exampleblock-content {\r
+ border-left: 2px solid silver;\r
+ padding-left: 0.5em;\r
+}\r
+</style>\r
+<title>git-check-attr(1)</title>\r
+</head>\r
+<body>\r
+<div id="header">\r
+<h1>\r
+git-check-attr(1) Manual Page\r
+</h1>\r
+<h2>NAME</h2>\r
+<div class="sectionbody">\r
+<p>git-check-attr -\r
+ Display gitattributes information.\r
+</p>\r
+</div>\r
+</div>\r
+<h2>SYNOPSIS</h2>\r
+<div class="sectionbody">\r
+<p><em>git-check-attr</em> attr… [--] pathname…</p>\r
+</div>\r
+<h2>DESCRIPTION</h2>\r
+<div class="sectionbody">\r
+<p>For every pathname, this command will list if each attr is <em>unspecified</em>,\r
+<em>set</em>, or <em>unset</em> as a gitattribute on that pathname.</p>\r
+</div>\r
+<h2>OPTIONS</h2>\r
+<div class="sectionbody">\r
+<dl>\r
+<dt>\r
+--\r
+</dt>\r
+<dd>\r
+<p>\r
+ Interpret all preceding arguments as attributes, and all following\r
+ arguments as path names. If not supplied, only the first argument will\r
+ be treated as an attribute.\r
+</p>\r
+</dd>\r
+</dl>\r
+</div>\r
+<h2>Author</h2>\r
+<div class="sectionbody">\r
+<p>Written by Junio C Hamano <junkio@cox.net></p>\r
+</div>\r
+<h2>Documentation</h2>\r
+<div class="sectionbody">\r
+<p>Documentation by James Bowes.</p>\r
+</div>\r
+<h2>GIT</h2>\r
+<div class="sectionbody">\r
+<p>Part of the <a href="git.html">git(7)</a> suite</p>\r
+</div>\r
+<div id="footer">\r
+<div id="footer-text">\r
+Last updated 22-Apr-2007 05:47:49 UTC\r
+</div>\r
+</div>\r
+</body>\r
+</html>\r
--- /dev/null
+git-check-attr(1)
+=================
+
+NAME
+----
+git-check-attr - Display gitattributes information.
+
+
+SYNOPSIS
+--------
+'git-check-attr' attr... [--] pathname...
+
+DESCRIPTION
+-----------
+For every pathname, this command will list if each attr is 'unspecified',
+'set', or 'unset' as a gitattribute on that pathname.
+
+OPTIONS
+-------
+\--::
+ Interpret all preceding arguments as attributes, and all following
+ arguments as path names. If not supplied, only the first argument will
+ be treated as an attribute.
+
+
+Author
+------
+Written by Junio C Hamano <junkio@cox.net>
+
+Documentation
+--------------
+Documentation by James Bowes.
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
</p>\r
</dd>\r
<dt>\r
+merge.<driver>.name\r
+</dt>\r
+<dd>\r
+<p>\r
+ Defines a human readable name for a custom low-level\r
+ merge driver. See <a href="gitattributes.html">gitattributes(5)</a> for details.\r
+</p>\r
+</dd>\r
+<dt>\r
+merge.<driver>.driver\r
+</dt>\r
+<dd>\r
+<p>\r
+ Defines the command that implements a custom low-level\r
+ merge driver. See <a href="gitattributes.html">gitattributes(5)</a> for details.\r
+</p>\r
+</dd>\r
+<dt>\r
+merge.<driver>.recursive\r
+</dt>\r
+<dd>\r
+<p>\r
+ Names a low-level merge driver to be used when\r
+ performing an internal merge between common ancestors.\r
+ See <a href="gitattributes.html">gitattributes(5)</a> for details.\r
+</p>\r
+</dd>\r
+<dt>\r
pack.window\r
</dt>\r
<dd>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 20-Apr-2007 07:19:55 UTC\r
+Last updated 22-Apr-2007 05:47:50 UTC\r
</div>\r
</div>\r
</body>\r
locate any which have outlived their usefulness.\r
</p>\r
</dd>\r
+<dt>\r
+--index-version=<version>[,<offset>]\r
+</dt>\r
+<dd>\r
+<p>\r
+ This is intended to be used by the test suite only. It allows\r
+ to force the version for the generated pack index, and to force\r
+ 64-bit index entries on objects located above the given offset.\r
+</p>\r
+</dd>\r
</dl>\r
</div>\r
<h2>Note</h2>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 04-Apr-2007 18:33:46 UTC\r
+Last updated 22-Apr-2007 05:47:50 UTC\r
</div>\r
</div>\r
</body>\r
message can later be searched for within all .keep files to
locate any which have outlived their usefulness.
+--index-version=<version>[,<offset>]::
+ This is intended to be used by the test suite only. It allows
+ to force the version for the generated pack index, and to force
+ 64-bit index entries on objects located above the given offset.
+
Note
----
packfile by 3-5 per-cent.\r
</p>\r
</dd>\r
+<dt>\r
+--index-version=<version>[,<offset>]\r
+</dt>\r
+<dd>\r
+<p>\r
+ This is intended to be used by the test suite only. It allows\r
+ to force the version for the generated pack index, and to force\r
+ 64-bit index entries on objects located above the given offset.\r
+</p>\r
+</dd>\r
</dl>\r
</div>\r
<h2>Author</h2>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 04-Apr-2007 18:33:54 UTC\r
+Last updated 22-Apr-2007 05:47:51 UTC\r
</div>\r
</div>\r
</body>\r
length, this option typically shrinks the resulting
packfile by 3-5 per-cent.
+--index-version=<version>[,<offset>]::
+ This is intended to be used by the test suite only. It allows
+ to force the version for the generated pack index, and to force
+ 64-bit index entries on objects located above the given offset.
+
Author
------
</p>\r
</dd>\r
<dt>\r
+<a href="git-check-attr.html">git-check-attr(1)</a>\r
+</dt>\r
+<dd>\r
+<p>\r
+ Display gitattributes information..\r
+</p>\r
+</dd>\r
+<dt>\r
<a href="git-check-ref-format.html">git-check-ref-format(1)</a>\r
</dt>\r
<dd>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 06-Apr-2007 00:51:17 UTC\r
+Last updated 22-Apr-2007 06:51:51 UTC\r
</div>\r
</div>\r
</body>\r
* link:RelNotes-1.5.1.txt[release notes for 1.5.1]
-* link:v1.5.0.7/git.html[documentation for release 1.5.0.7]
+* link:v1.5.1.2/git.html[documentation for release 1.5.1.2]
+
+* link:RelNotes-1.5.1.2.txt[release notes for 1.5.1.2]
+
+* link:RelNotes-1.5.1.1.txt[release notes for 1.5.1.1]
* link:RelNotes-1.5.0.7.txt[release notes for 1.5.0.7]
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
+<head>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+<meta name="generator" content="AsciiDoc 7.0.2" />\r
+<style type="text/css">\r
+/* Debug borders */\r
+p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {\r
+/*\r
+ border: 1px solid red;\r
+*/\r
+}\r
+\r
+body {\r
+ margin: 1em 5% 1em 5%;\r
+}\r
+\r
+a { color: blue; }\r
+a:visited { color: fuchsia; }\r
+\r
+em {\r
+ font-style: italic;\r
+}\r
+\r
+strong {\r
+ font-weight: bold;\r
+}\r
+\r
+tt {\r
+ color: navy;\r
+}\r
+\r
+h1, h2, h3, h4, h5, h6 {\r
+ color: #527bbd;\r
+ font-family: sans-serif;\r
+ margin-top: 1.2em;\r
+ margin-bottom: 0.5em;\r
+ line-height: 1.3;\r
+}\r
+\r
+h1 {\r
+ border-bottom: 2px solid silver;\r
+}\r
+h2 {\r
+ border-bottom: 2px solid silver;\r
+ padding-top: 0.5em;\r
+}\r
+\r
+div.sectionbody {\r
+ font-family: serif;\r
+ margin-left: 0;\r
+}\r
+\r
+hr {\r
+ border: 1px solid silver;\r
+}\r
+\r
+p {\r
+ margin-top: 0.5em;\r
+ margin-bottom: 0.5em;\r
+}\r
+\r
+pre {\r
+ padding: 0;\r
+ margin: 0;\r
+}\r
+\r
+span#author {\r
+ color: #527bbd;\r
+ font-family: sans-serif;\r
+ font-weight: bold;\r
+ font-size: 1.2em;\r
+}\r
+span#email {\r
+}\r
+span#revision {\r
+ font-family: sans-serif;\r
+}\r
+\r
+div#footer {\r
+ font-family: sans-serif;\r
+ font-size: small;\r
+ border-top: 2px solid silver;\r
+ padding-top: 0.5em;\r
+ margin-top: 4.0em;\r
+}\r
+div#footer-text {\r
+ float: left;\r
+ padding-bottom: 0.5em;\r
+}\r
+div#footer-badges {\r
+ float: right;\r
+ padding-bottom: 0.5em;\r
+}\r
+\r
+div#preamble,\r
+div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
+div.admonitionblock {\r
+ margin-right: 10%;\r
+ margin-top: 1.5em;\r
+ margin-bottom: 1.5em;\r
+}\r
+div.admonitionblock {\r
+ margin-top: 2.5em;\r
+ margin-bottom: 2.5em;\r
+}\r
+\r
+div.content { /* Block element content. */\r
+ padding: 0;\r
+}\r
+\r
+/* Block element titles. */\r
+div.title, caption.title {\r
+ font-family: sans-serif;\r
+ font-weight: bold;\r
+ text-align: left;\r
+ margin-top: 1.0em;\r
+ margin-bottom: 0.5em;\r
+}\r
+div.title + * {\r
+ margin-top: 0;\r
+}\r
+\r
+td div.title:first-child {\r
+ margin-top: 0.0em;\r
+}\r
+div.content div.title:first-child {\r
+ margin-top: 0.0em;\r
+}\r
+div.content + div.title {\r
+ margin-top: 0.0em;\r
+}\r
+\r
+div.sidebarblock > div.content {\r
+ background: #ffffee;\r
+ border: 1px solid silver;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.listingblock > div.content {\r
+ border: 1px solid silver;\r
+ background: #f4f4f4;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.quoteblock > div.content {\r
+ padding-left: 2.0em;\r
+}\r
+div.quoteblock .attribution {\r
+ text-align: right;\r
+}\r
+\r
+div.admonitionblock .icon {\r
+ vertical-align: top;\r
+ font-size: 1.1em;\r
+ font-weight: bold;\r
+ text-decoration: underline;\r
+ color: #527bbd;\r
+ padding-right: 0.5em;\r
+}\r
+div.admonitionblock td.content {\r
+ padding-left: 0.5em;\r
+ border-left: 2px solid silver;\r
+}\r
+\r
+div.exampleblock > div.content {\r
+ border-left: 2px solid silver;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.verseblock div.content {\r
+ white-space: pre;\r
+}\r
+\r
+div.imageblock div.content { padding-left: 0; }\r
+div.imageblock img { border: 1px solid silver; }\r
+span.image img { border-style: none; }\r
+\r
+dl {\r
+ margin-top: 0.8em;\r
+ margin-bottom: 0.8em;\r
+}\r
+dt {\r
+ margin-top: 0.5em;\r
+ margin-bottom: 0;\r
+ font-style: italic;\r
+}\r
+dd > *:first-child {\r
+ margin-top: 0;\r
+}\r
+\r
+ul, ol {\r
+ list-style-position: outside;\r
+}\r
+ol.olist2 {\r
+ list-style-type: lower-alpha;\r
+}\r
+\r
+div.tableblock > table {\r
+ border-color: #527bbd;\r
+ border-width: 3px;\r
+}\r
+thead {\r
+ font-family: sans-serif;\r
+ font-weight: bold;\r
+}\r
+tfoot {\r
+ font-weight: bold;\r
+}\r
+\r
+div.hlist {\r
+ margin-top: 0.8em;\r
+ margin-bottom: 0.8em;\r
+}\r
+td.hlist1 {\r
+ vertical-align: top;\r
+ font-style: italic;\r
+ padding-right: 0.8em;\r
+}\r
+td.hlist2 {\r
+ vertical-align: top;\r
+}\r
+\r
+@media print {\r
+ div#footer-badges { display: none; }\r
+}\r
+include::./stylesheets/xhtml11-manpage.css[]\r
+/* Workarounds for IE6's broken and incomplete CSS2. */\r
+\r
+div.sidebar-content {\r
+ background: #ffffee;\r
+ border: 1px solid silver;\r
+ padding: 0.5em;\r
+}\r
+div.sidebar-title, div.image-title {\r
+ font-family: sans-serif;\r
+ font-weight: bold;\r
+ margin-top: 0.0em;\r
+ margin-bottom: 0.5em;\r
+}\r
+\r
+div.listingblock div.content {\r
+ border: 1px solid silver;\r
+ background: #f4f4f4;\r
+ padding: 0.5em;\r
+}\r
+\r
+div.quoteblock-content {\r
+ padding-left: 2.0em;\r
+}\r
+\r
+div.exampleblock-content {\r
+ border-left: 2px solid silver;\r
+ padding-left: 0.5em;\r
+}\r
+</style>\r
+<title>gitattributes(5)</title>\r
+</head>\r
+<body>\r
+<div id="header">\r
+<h1>\r
+gitattributes(5) Manual Page\r
+</h1>\r
+<h2>NAME</h2>\r
+<div class="sectionbody">\r
+<p>gitattributes -\r
+ defining attributes per path\r
+</p>\r
+</div>\r
+</div>\r
+<h2>SYNOPSIS</h2>\r
+<div class="sectionbody">\r
+<p>$GIT_DIR/info/attributes, gitattributes</p>\r
+</div>\r
+<h2>DESCRIPTION</h2>\r
+<div class="sectionbody">\r
+<p>A <tt>gitattributes</tt> file is a simple text file that gives\r
+<tt>attributes</tt> to pathnames.</p>\r
+<p>Each line in <tt>gitattributes</tt> file is of form:</p>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><tt>glob attr1 attr2 ...</tt></pre>\r
+</div></div>\r
+<p>That is, a glob pattern followed by an attributes list,\r
+separated by whitespaces. When the glob pattern matches the\r
+path in question, the attributes listed on the line are given to\r
+the path.</p>\r
+<p>Each attribute can be in one of these states for a given path:</p>\r
+<dl>\r
+<dt>\r
+Set\r
+</dt>\r
+<dd>\r
+<p>\r
+ The path has the attribute with special value "true";\r
+ this is specified by listing only the name of the\r
+ attribute in the attribute list.\r
+</p>\r
+</dd>\r
+<dt>\r
+Unset\r
+</dt>\r
+<dd>\r
+<p>\r
+ The path has the attribute with special value "false";\r
+ this is specified by listing the name of the attribute\r
+ prefixed with a dash <tt>-</tt> in the attribute list.\r
+</p>\r
+</dd>\r
+<dt>\r
+Set to a value\r
+</dt>\r
+<dd>\r
+<p>\r
+ The path has the attribute with specified string value;\r
+ this is specified by listing the name of the attribute\r
+ followed by an equal sign <tt>=</tt> and its value in the\r
+ attribute list.\r
+</p>\r
+</dd>\r
+<dt>\r
+Unspecified\r
+</dt>\r
+<dd>\r
+<p>\r
+ No glob pattern matches the path, and nothing says if\r
+ the path has or does not have the attribute.\r
+</p>\r
+</dd>\r
+</dl>\r
+<p>When more than one glob pattern matches the path, a later line\r
+overrides an earlier line.</p>\r
+<p>When deciding what attributes are assigned to a path, git\r
+consults <tt>$GIT_DIR/info/attributes</tt> file (which has the highest\r
+precedence), <tt>.gitattributes</tt> file in the same directory as the\r
+path in question, and its parent directories (the further the\r
+directory that contains <tt>.gitattributes</tt> is from the path in\r
+question, the lower its precedence).</p>\r
+<p>Sometimes you would need to override an setting of an attribute\r
+for a path to <tt>unspecified</tt> state. This can be done by listing\r
+the name of the attribute prefixed with an exclamation point <tt>!</tt>.</p>\r
+</div>\r
+<h2>EFFECTS</h2>\r
+<div class="sectionbody">\r
+<p>Certain operations by git can be influenced by assigning\r
+particular attributes to a path. Currently, three operations\r
+are attributes-aware.</p>\r
+<h3>Checking-out and checking-in</h3>\r
+<p>The attribute <tt>crlf</tt> affects how the contents stored in the\r
+repository are copied to the working tree files when commands\r
+such as <tt>git checkout</tt> and <tt>git merge</tt> run. It also affects how\r
+git stores the contents you prepare in the working tree in the\r
+repository upon <tt>git add</tt> and <tt>git commit</tt>.</p>\r
+<dl>\r
+<dt>\r
+Set\r
+</dt>\r
+<dd>\r
+<p>\r
+ Setting the <tt>crlf</tt> attribute on a path is meant to mark\r
+ the path as a "text" file. <em>core.autocrlf</em> conversion\r
+ takes place without guessing the content type by\r
+ inspection.\r
+</p>\r
+</dd>\r
+<dt>\r
+Unset\r
+</dt>\r
+<dd>\r
+<p>\r
+ Unsetting the <tt>crlf</tt> attribute on a path is meant to\r
+ mark the path as a "binary" file. The path never goes\r
+ through line endings conversion upon checkin/checkout.\r
+</p>\r
+</dd>\r
+<dt>\r
+Unspecified\r
+</dt>\r
+<dd>\r
+<p>\r
+ Unspecified <tt>crlf</tt> attribute tells git to apply the\r
+ <tt>core.autocrlf</tt> conversion when the file content looks\r
+ like text.\r
+</p>\r
+</dd>\r
+<dt>\r
+Set to string value "input"\r
+</dt>\r
+<dd>\r
+<p>\r
+ This is similar to setting the attribute to <tt>true</tt>, but\r
+ also forces git to act as if <tt>core.autocrlf</tt> is set to\r
+ <tt>input</tt> for the path.\r
+</p>\r
+</dd>\r
+</dl>\r
+<p>Any other value set to <tt>crlf</tt> attribute is ignored and git acts\r
+as if the attribute is left unspecified.</p>\r
+<h4>The <tt>core.autocrlf</tt> conversion</h4>\r
+<p>If the configuration variable <tt>core.autocrlf</tt> is false, no\r
+conversion is done.</p>\r
+<p>When <tt>core.autocrlf</tt> is true, it means that the platform wants\r
+CRLF line endings for files in the working tree, and you want to\r
+convert them back to the normal LF line endings when checking\r
+in to the repository.</p>\r
+<p>When <tt>core.autocrlf</tt> is set to "input", line endings are\r
+converted to LF upon checkin, but there is no conversion done\r
+upon checkout.</p>\r
+<h3>Generating diff text</h3>\r
+<p>The attribute <tt>diff</tt> affects if <tt>git diff</tt> generates textual\r
+patch for the path or just says <tt>Binary files differ</tt>.</p>\r
+<dl>\r
+<dt>\r
+Set\r
+</dt>\r
+<dd>\r
+<p>\r
+ A path to which the <tt>diff</tt> attribute is set is treated\r
+ as text, even when they contain byte values that\r
+ normally never appear in text files, such as NUL.\r
+</p>\r
+</dd>\r
+<dt>\r
+Unset\r
+</dt>\r
+<dd>\r
+<p>\r
+ A path to which the <tt>diff</tt> attribute is unset will\r
+ generate <tt>Binary files differ</tt>.\r
+</p>\r
+</dd>\r
+<dt>\r
+Unspecified\r
+</dt>\r
+<dd>\r
+<p>\r
+ A path to which the <tt>diff</tt> attribute is unspecified\r
+ first gets its contents inspected, and if it looks like\r
+ text, it is treated as text. Otherwise it would\r
+ generate <tt>Binary files differ</tt>.\r
+</p>\r
+</dd>\r
+</dl>\r
+<p>Any other value set to <tt>diff</tt> attribute is ignored and git acts\r
+as if the attribute is left unspecified.</p>\r
+<h3>Performing a three-way merge</h3>\r
+<p>The attribute <tt>merge</tt> affects how three versions of a file is\r
+merged when a file-level merge is necessary during <tt>git merge</tt>,\r
+and other programs such as <tt>git revert</tt> and <tt>git cherry-pick</tt>.</p>\r
+<dl>\r
+<dt>\r
+Set\r
+</dt>\r
+<dd>\r
+<p>\r
+ Built-in 3-way merge driver is used to merge the\r
+ contents in a way similar to <tt>merge</tt> command of <tt>RCS</tt>\r
+ suite. This is suitable for ordinary text files.\r
+</p>\r
+</dd>\r
+<dt>\r
+Unset\r
+</dt>\r
+<dd>\r
+<p>\r
+ Take the version from the current branch as the\r
+ tentative merge result, and declare that the merge has\r
+ conflicts. This is suitable for binary files that does\r
+ not have a well-defined merge semantics.\r
+</p>\r
+</dd>\r
+<dt>\r
+Unspecified\r
+</dt>\r
+<dd>\r
+<p>\r
+ By default, this uses the same built-in 3-way merge\r
+ driver as is the case the <tt>merge</tt> attribute is set.\r
+ However, <tt>merge.default</tt> configuration variable can name\r
+ different merge driver to be used for paths to which the\r
+ <tt>merge</tt> attribute is unspecified.\r
+</p>\r
+</dd>\r
+<dt>\r
+Any other string value\r
+</dt>\r
+<dd>\r
+<p>\r
+ 3-way merge is performed using the specified custom\r
+ merge driver. The built-in 3-way merge driver can be\r
+ explicitly specified by asking for "text" driver; the\r
+ built-in "take the current branch" driver can be\r
+ requested by "binary".\r
+</p>\r
+</dd>\r
+</dl>\r
+<h4>Defining a custom merge driver</h4>\r
+<p>The definition of a merge driver is done in <tt>gitconfig</tt> not\r
+<tt>gitattributes</tt> file, so strictly speaking this manual page is a\r
+wrong place to talk about it. However…</p>\r
+<p>To define a custom merge driver <tt>filfre</tt>, add a section to your\r
+<tt>$GIT_DIR/config</tt> file (or <tt>$HOME/.gitconfig</tt> file) like this:</p>\r
+<div class="listingblock">\r
+<div class="content">\r
+<pre><tt>[merge "filfre"]\r
+ name = feel-free merge driver\r
+ driver = filfre %O %A %B\r
+ recursive = binary</tt></pre>\r
+</div></div>\r
+<p>The <tt>merge.*.name</tt> variable gives the driver a human-readable\r
+name.</p>\r
+<p>The <tt>merge.*.driver</tt> variable's value is used to construct a\r
+command to run to merge ancestor's version (<tt>%O</tt>), current\r
+version (<tt>%A</tt>) and the other branches' version (<tt>%B</tt>). These\r
+three tokens are replaced with the names of temporary files that\r
+hold the contents of these versions when the command line is\r
+built.</p>\r
+<p>The merge driver is expected to leave the result of the merge in\r
+the file named with <tt>%A</tt> by overwriting it, and exit with zero\r
+status if it managed to merge them cleanly, or non-zero if there\r
+were conflicts.</p>\r
+<p>The <tt>merge.*.recursive</tt> variable specifies what other merge\r
+driver to use when the merge driver is called for an internal\r
+merge between common ancestors, when there are more than one.\r
+When left unspecified, the driver itself is used for both\r
+internal merge and the final merge.</p>\r
+</div>\r
+<h2>EXAMPLE</h2>\r
+<div class="sectionbody">\r
+<p>If you have these three <tt>gitattributes</tt> file:</p>\r
+<div class="listingblock">\r
+<div class="content">\r
+<pre><tt>(in $GIT_DIR/info/attributes)\r
+\r
+a* foo !bar -baz\r
+\r
+(in .gitattributes)\r
+abc foo bar baz\r
+\r
+(in t/.gitattributes)\r
+ab* merge=filfre\r
+abc -foo -bar\r
+*.c frotz</tt></pre>\r
+</div></div>\r
+<p>the attributes given to path <tt>t/abc</tt> are computed as follows:</p>\r
+<ol>\r
+<li>\r
+<p>\r
+By examining <tt>t/.gitattributes</tt> (which is in the same\r
+ diretory as the path in question), git finds that the first\r
+ line matches. <tt>merge</tt> attribute is set. It also finds that\r
+ the second line matches, and attributes <tt>foo</tt> and <tt>bar</tt>\r
+ are unset.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Then it examines <tt>.gitattributes</tt> (which is in the parent\r
+ directory), and finds that the first line matches, but\r
+ <tt>t/.gitattributes</tt> file already decided how <tt>merge</tt>, <tt>foo</tt>\r
+ and <tt>bar</tt> attributes should be given to this path, so it\r
+ leaves <tt>foo</tt> and <tt>bar</tt> unset. Attribute <tt>baz</tt> is set.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Finally it examines <tt>$GIT_DIR/info/gitattributes</tt>. This file\r
+ is used to override the in-tree settings. The first line is\r
+ a match, and <tt>foo</tt> is set, <tt>bar</tt> is reverted to unspecified\r
+ state, and <tt>baz</tt> is unset.\r
+</p>\r
+</li>\r
+</ol>\r
+<p>As the result, the attributes assignement to <tt>t/abc</tt> becomes:</p>\r
+<div class="listingblock">\r
+<div class="content">\r
+<pre><tt>foo set to true\r
+bar unspecified\r
+baz set to false\r
+merge set to string value "filfre"\r
+frotz unspecified</tt></pre>\r
+</div></div>\r
+</div>\r
+<h2>GIT</h2>\r
+<div class="sectionbody">\r
+<p>Part of the <a href="git.html">git(7)</a> suite</p>\r
+</div>\r
+<div id="footer">\r
+<div id="footer-text">\r
+Last updated 22-Apr-2007 07:22:00 UTC\r
+</div>\r
+</div>\r
+</body>\r
+</html>\r
--- /dev/null
+gitattributes(5)
+================
+
+NAME
+----
+gitattributes - defining attributes per path
+
+SYNOPSIS
+--------
+$GIT_DIR/info/attributes, gitattributes
+
+
+DESCRIPTION
+-----------
+
+A `gitattributes` file is a simple text file that gives
+`attributes` to pathnames.
+
+Each line in `gitattributes` file is of form:
+
+ glob attr1 attr2 ...
+
+That is, a glob pattern followed by an attributes list,
+separated by whitespaces. When the glob pattern matches the
+path in question, the attributes listed on the line are given to
+the path.
+
+Each attribute can be in one of these states for a given path:
+
+Set::
+
+ The path has the attribute with special value "true";
+ this is specified by listing only the name of the
+ attribute in the attribute list.
+
+Unset::
+
+ The path has the attribute with special value "false";
+ this is specified by listing the name of the attribute
+ prefixed with a dash `-` in the attribute list.
+
+Set to a value::
+
+ The path has the attribute with specified string value;
+ this is specified by listing the name of the attribute
+ followed by an equal sign `=` and its value in the
+ attribute list.
+
+Unspecified::
+
+ No glob pattern matches the path, and nothing says if
+ the path has or does not have the attribute.
+
+When more than one glob pattern matches the path, a later line
+overrides an earlier line.
+
+When deciding what attributes are assigned to a path, git
+consults `$GIT_DIR/info/attributes` file (which has the highest
+precedence), `.gitattributes` file in the same directory as the
+path in question, and its parent directories (the further the
+directory that contains `.gitattributes` is from the path in
+question, the lower its precedence).
+
+Sometimes you would need to override an setting of an attribute
+for a path to `unspecified` state. This can be done by listing
+the name of the attribute prefixed with an exclamation point `!`.
+
+
+EFFECTS
+-------
+
+Certain operations by git can be influenced by assigning
+particular attributes to a path. Currently, three operations
+are attributes-aware.
+
+Checking-out and checking-in
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The attribute `crlf` affects how the contents stored in the
+repository are copied to the working tree files when commands
+such as `git checkout` and `git merge` run. It also affects how
+git stores the contents you prepare in the working tree in the
+repository upon `git add` and `git commit`.
+
+Set::
+
+ Setting the `crlf` attribute on a path is meant to mark
+ the path as a "text" file. 'core.autocrlf' conversion
+ takes place without guessing the content type by
+ inspection.
+
+Unset::
+
+ Unsetting the `crlf` attribute on a path is meant to
+ mark the path as a "binary" file. The path never goes
+ through line endings conversion upon checkin/checkout.
+
+Unspecified::
+
+ Unspecified `crlf` attribute tells git to apply the
+ `core.autocrlf` conversion when the file content looks
+ like text.
+
+Set to string value "input"::
+
+ This is similar to setting the attribute to `true`, but
+ also forces git to act as if `core.autocrlf` is set to
+ `input` for the path.
+
+Any other value set to `crlf` attribute is ignored and git acts
+as if the attribute is left unspecified.
+
+
+The `core.autocrlf` conversion
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If the configuration variable `core.autocrlf` is false, no
+conversion is done.
+
+When `core.autocrlf` is true, it means that the platform wants
+CRLF line endings for files in the working tree, and you want to
+convert them back to the normal LF line endings when checking
+in to the repository.
+
+When `core.autocrlf` is set to "input", line endings are
+converted to LF upon checkin, but there is no conversion done
+upon checkout.
+
+
+Generating diff text
+~~~~~~~~~~~~~~~~~~~~
+
+The attribute `diff` affects if `git diff` generates textual
+patch for the path or just says `Binary files differ`.
+
+Set::
+
+ A path to which the `diff` attribute is set is treated
+ as text, even when they contain byte values that
+ normally never appear in text files, such as NUL.
+
+Unset::
+
+ A path to which the `diff` attribute is unset will
+ generate `Binary files differ`.
+
+Unspecified::
+
+ A path to which the `diff` attribute is unspecified
+ first gets its contents inspected, and if it looks like
+ text, it is treated as text. Otherwise it would
+ generate `Binary files differ`.
+
+Any other value set to `diff` attribute is ignored and git acts
+as if the attribute is left unspecified.
+
+
+Performing a three-way merge
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The attribute `merge` affects how three versions of a file is
+merged when a file-level merge is necessary during `git merge`,
+and other programs such as `git revert` and `git cherry-pick`.
+
+Set::
+
+ Built-in 3-way merge driver is used to merge the
+ contents in a way similar to `merge` command of `RCS`
+ suite. This is suitable for ordinary text files.
+
+Unset::
+
+ Take the version from the current branch as the
+ tentative merge result, and declare that the merge has
+ conflicts. This is suitable for binary files that does
+ not have a well-defined merge semantics.
+
+Unspecified::
+
+ By default, this uses the same built-in 3-way merge
+ driver as is the case the `merge` attribute is set.
+ However, `merge.default` configuration variable can name
+ different merge driver to be used for paths to which the
+ `merge` attribute is unspecified.
+
+Any other string value::
+
+ 3-way merge is performed using the specified custom
+ merge driver. The built-in 3-way merge driver can be
+ explicitly specified by asking for "text" driver; the
+ built-in "take the current branch" driver can be
+ requested by "binary".
+
+
+Defining a custom merge driver
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The definition of a merge driver is done in `gitconfig` not
+`gitattributes` file, so strictly speaking this manual page is a
+wrong place to talk about it. However...
+
+To define a custom merge driver `filfre`, add a section to your
+`$GIT_DIR/config` file (or `$HOME/.gitconfig` file) like this:
+
+----------------------------------------------------------------
+[merge "filfre"]
+ name = feel-free merge driver
+ driver = filfre %O %A %B
+ recursive = binary
+----------------------------------------------------------------
+
+The `merge.*.name` variable gives the driver a human-readable
+name.
+
+The `merge.*.driver` variable's value is used to construct a
+command to run to merge ancestor's version (`%O`), current
+version (`%A`) and the other branches' version (`%B`). These
+three tokens are replaced with the names of temporary files that
+hold the contents of these versions when the command line is
+built.
+
+The merge driver is expected to leave the result of the merge in
+the file named with `%A` by overwriting it, and exit with zero
+status if it managed to merge them cleanly, or non-zero if there
+were conflicts.
+
+The `merge.*.recursive` variable specifies what other merge
+driver to use when the merge driver is called for an internal
+merge between common ancestors, when there are more than one.
+When left unspecified, the driver itself is used for both
+internal merge and the final merge.
+
+
+EXAMPLE
+-------
+
+If you have these three `gitattributes` file:
+
+----------------------------------------------------------------
+(in $GIT_DIR/info/attributes)
+
+a* foo !bar -baz
+
+(in .gitattributes)
+abc foo bar baz
+
+(in t/.gitattributes)
+ab* merge=filfre
+abc -foo -bar
+*.c frotz
+----------------------------------------------------------------
+
+the attributes given to path `t/abc` are computed as follows:
+
+1. By examining `t/.gitattributes` (which is in the same
+ diretory as the path in question), git finds that the first
+ line matches. `merge` attribute is set. It also finds that
+ the second line matches, and attributes `foo` and `bar`
+ are unset.
+
+2. Then it examines `.gitattributes` (which is in the parent
+ directory), and finds that the first line matches, but
+ `t/.gitattributes` file already decided how `merge`, `foo`
+ and `bar` attributes should be given to this path, so it
+ leaves `foo` and `bar` unset. Attribute `baz` is set.
+
+3. Finally it examines `$GIT_DIR/info/gitattributes`. This file
+ is used to override the in-tree settings. The first line is
+ a match, and `foo` is set, `bar` is reverted to unspecified
+ state, and `baz` is unset.
+
+As the result, the attributes assignement to `t/abc` becomes:
+
+----------------------------------------------------------------
+foo set to true
+bar unspecified
+baz set to false
+merge set to string value "filfre"
+frotz unspecified
+----------------------------------------------------------------
+
+
+GIT
+---
+Part of the gitlink:git[7] suite