Submit
Path:
~
/
/
usr
/
share
/
doc
/
git-1.8.3.1
/
technical
/
File Content:
api-diff.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /> <meta name="generator" content="AsciiDoc 8.6.8" /> <title>diff API</title> <style type="text/css"> /* Shared CSS for AsciiDoc xhtml11 and html5 backends */ /* Default font. */ body { font-family: Georgia,serif; } /* Title font. */ h1, h2, h3, h4, h5, h6, div.title, caption.title, thead, p.table.header, #toctitle, #author, #revnumber, #revdate, #revremark, #footer { font-family: Arial,Helvetica,sans-serif; } body { margin: 1em 5% 1em 5%; } a { color: blue; text-decoration: underline; } a:visited { color: fuchsia; } em { font-style: italic; color: navy; } strong { font-weight: bold; color: #083194; } h1, h2, h3, h4, h5, h6 { color: #527bbd; margin-top: 1.2em; margin-bottom: 0.5em; line-height: 1.3; } h1, h2, h3 { border-bottom: 2px solid silver; } h2 { padding-top: 0.5em; } h3 { float: left; } h3 + * { clear: left; } h5 { font-size: 1.0em; } div.sectionbody { margin-left: 0; } hr { border: 1px solid silver; } p { margin-top: 0.5em; margin-bottom: 0.5em; } ul, ol, li > p { margin-top: 0; } ul > li { color: #aaa; } ul > li > * { color: black; } .monospaced, code, pre { font-family: "Courier New", Courier, monospace; font-size: inherit; color: navy; padding: 0; margin: 0; } #author { color: #527bbd; font-weight: bold; font-size: 1.1em; } #email { } #revnumber, #revdate, #revremark { } #footer { font-size: small; border-top: 2px solid silver; padding-top: 0.5em; margin-top: 4.0em; } #footer-text { float: left; padding-bottom: 0.5em; } #footer-badges { float: right; padding-bottom: 0.5em; } #preamble { margin-top: 1.5em; margin-bottom: 1.5em; } div.imageblock, div.exampleblock, div.verseblock, div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, div.admonitionblock { margin-top: 1.0em; margin-bottom: 1.5em; } div.admonitionblock { margin-top: 2.0em; margin-bottom: 2.0em; margin-right: 10%; color: #606060; } div.content { /* Block element content. */ padding: 0; } /* Block element titles. */ div.title, caption.title { color: #527bbd; font-weight: bold; text-align: left; margin-top: 1.0em; margin-bottom: 0.5em; } div.title + * { margin-top: 0; } td div.title:first-child { margin-top: 0.0em; } div.content div.title:first-child { margin-top: 0.0em; } div.content + div.title { margin-top: 0.0em; } div.sidebarblock > div.content { background: #ffffee; border: 1px solid #dddddd; border-left: 4px solid #f0f0f0; padding: 0.5em; } div.listingblock > div.content { border: 1px solid #dddddd; border-left: 5px solid #f0f0f0; background: #f8f8f8; padding: 0.5em; } div.quoteblock, div.verseblock { padding-left: 1.0em; margin-left: 1.0em; margin-right: 10%; border-left: 5px solid #f0f0f0; color: #888; } div.quoteblock > div.attribution { padding-top: 0.5em; text-align: right; } div.verseblock > pre.content { font-family: inherit; font-size: inherit; } div.verseblock > div.attribution { padding-top: 0.75em; text-align: left; } /* DEPRECATED: Pre version 8.2.7 verse style literal block. */ div.verseblock + div.attribution { text-align: left; } div.admonitionblock .icon { vertical-align: top; font-size: 1.1em; font-weight: bold; text-decoration: underline; color: #527bbd; padding-right: 0.5em; } div.admonitionblock td.content { padding-left: 0.5em; border-left: 3px solid #dddddd; } div.exampleblock > div.content { border-left: 3px solid #dddddd; padding-left: 0.5em; } div.imageblock div.content { padding-left: 0; } span.image img { border-style: none; } a.image:visited { color: white; } dl { margin-top: 0.8em; margin-bottom: 0.8em; } dt { margin-top: 0.5em; margin-bottom: 0; font-style: normal; color: navy; } dd > *:first-child { margin-top: 0.1em; } ul, ol { list-style-position: outside; } ol.arabic { list-style-type: decimal; } ol.loweralpha { list-style-type: lower-alpha; } ol.upperalpha { list-style-type: upper-alpha; } ol.lowerroman { list-style-type: lower-roman; } ol.upperroman { list-style-type: upper-roman; } div.compact ul, div.compact ol, div.compact p, div.compact p, div.compact div, div.compact div { margin-top: 0.1em; margin-bottom: 0.1em; } tfoot { font-weight: bold; } td > div.verse { white-space: pre; } div.hdlist { margin-top: 0.8em; margin-bottom: 0.8em; } div.hdlist tr { padding-bottom: 15px; } dt.hdlist1.strong, td.hdlist1.strong { font-weight: bold; } td.hdlist1 { vertical-align: top; font-style: normal; padding-right: 0.8em; color: navy; } td.hdlist2 { vertical-align: top; } div.hdlist.compact tr { margin: 0; padding-bottom: 0; } .comment { background: yellow; } .footnote, .footnoteref { font-size: 0.8em; } span.footnote, span.footnoteref { vertical-align: super; } #footnotes { margin: 20px 0 20px 0; padding: 7px 0 0 0; } #footnotes div.footnote { margin: 0 0 5px 0; } #footnotes hr { border: none; border-top: 1px solid silver; height: 1px; text-align: left; margin-left: 0; width: 20%; min-width: 100px; } div.colist td { padding-right: 0.5em; padding-bottom: 0.3em; vertical-align: top; } div.colist td img { margin-top: 0.3em; } @media print { #footer-badges { display: none; } } #toc { margin-bottom: 2.5em; } #toctitle { color: #527bbd; font-size: 1.1em; font-weight: bold; margin-top: 1.0em; margin-bottom: 0.1em; } div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { margin-top: 0; margin-bottom: 0; } div.toclevel2 { margin-left: 2em; font-size: 0.9em; } div.toclevel3 { margin-left: 4em; font-size: 0.9em; } div.toclevel4 { margin-left: 6em; font-size: 0.9em; } span.aqua { color: aqua; } span.black { color: black; } span.blue { color: blue; } span.fuchsia { color: fuchsia; } span.gray { color: gray; } span.green { color: green; } span.lime { color: lime; } span.maroon { color: maroon; } span.navy { color: navy; } span.olive { color: olive; } span.purple { color: purple; } span.red { color: red; } span.silver { color: silver; } span.teal { color: teal; } span.white { color: white; } span.yellow { color: yellow; } span.aqua-background { background: aqua; } span.black-background { background: black; } span.blue-background { background: blue; } span.fuchsia-background { background: fuchsia; } span.gray-background { background: gray; } span.green-background { background: green; } span.lime-background { background: lime; } span.maroon-background { background: maroon; } span.navy-background { background: navy; } span.olive-background { background: olive; } span.purple-background { background: purple; } span.red-background { background: red; } span.silver-background { background: silver; } span.teal-background { background: teal; } span.white-background { background: white; } span.yellow-background { background: yellow; } span.big { font-size: 2em; } span.small { font-size: 0.6em; } span.underline { text-decoration: underline; } span.overline { text-decoration: overline; } span.line-through { text-decoration: line-through; } div.unbreakable { page-break-inside: avoid; } /* * xhtml11 specific * * */ div.tableblock { margin-top: 1.0em; margin-bottom: 1.5em; } div.tableblock > table { border: 3px solid #527bbd; } thead, p.table.header { font-weight: bold; color: #527bbd; } p.table { margin-top: 0; } /* Because the table frame attribute is overriden by CSS in most browsers. */ div.tableblock > table[frame="void"] { border-style: none; } div.tableblock > table[frame="hsides"] { border-left-style: none; border-right-style: none; } div.tableblock > table[frame="vsides"] { border-top-style: none; border-bottom-style: none; } /* * html5 specific * * */ table.tableblock { margin-top: 1.0em; margin-bottom: 1.5em; } thead, p.tableblock.header { font-weight: bold; color: #527bbd; } p.tableblock { margin-top: 0; } table.tableblock { border-width: 3px; border-spacing: 0px; border-style: solid; border-color: #527bbd; border-collapse: collapse; } th.tableblock, td.tableblock { border-width: 1px; padding: 4px; border-style: solid; border-color: #527bbd; } table.tableblock.frame-topbot { border-left-style: hidden; border-right-style: hidden; } table.tableblock.frame-sides { border-top-style: hidden; border-bottom-style: hidden; } table.tableblock.frame-none { border-style: hidden; } th.tableblock.halign-left, td.tableblock.halign-left { text-align: left; } th.tableblock.halign-center, td.tableblock.halign-center { text-align: center; } th.tableblock.halign-right, td.tableblock.halign-right { text-align: right; } th.tableblock.valign-top, td.tableblock.valign-top { vertical-align: top; } th.tableblock.valign-middle, td.tableblock.valign-middle { vertical-align: middle; } th.tableblock.valign-bottom, td.tableblock.valign-bottom { vertical-align: bottom; } /* * manpage specific * * */ body.manpage h1 { padding-top: 0.5em; padding-bottom: 0.5em; border-top: 2px solid silver; border-bottom: 2px solid silver; } body.manpage h2 { border-style: none; } body.manpage div.sectionbody { margin-left: 3em; } @media print { body.manpage div#toc { display: none; } } </style> <script type="text/javascript"> /*<+'])'); // Function that scans the DOM tree for header elements (the DOM2 // nodeIterator API would be a better technique but not supported by all // browsers). var iterate = function (el) { for (var i = el.firstChild; i != null; i = i.nextSibling) { if (i.nodeType == 1 /* Node.ELEMENT_NODE */) { var mo = re.exec(i.tagName); if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") { result[result.length] = new TocEntry(i, getText(i), mo[1]-1); } iterate(i); } } } iterate(el); return result; } var toc = document.getElementById("toc"); if (!toc) { return; } // Delete existing TOC entries in case we're reloading the TOC. var tocEntriesToRemove = []; var i; for (i = 0; i < toc.childNodes.length; i++) { var entry = toc.childNodes[i]; if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") && entry.getAttribute("class").match(/^toclevel/)) tocEntriesToRemove.push(entry); } for (i = 0; i < tocEntriesToRemove.length; i++) { toc.removeChild(tocEntriesToRemove[i]); } // Rebuild TOC entries. var entries = tocEntries(document.getElementById("content"), toclevels); for (var i = 0; i < entries.length; ++i) { var entry = entries[i]; if (entry.element.id == "") entry.element.id = "_toc_" + i; var a = document.createElement("a"); a.href = "#" + entry.element.id; a.appendChild(document.createTextNode(entry.text)); var div = document.createElement("div"); div.appendChild(a); div.className = "toclevel" + entry.toclevel; toc.appendChild(div); } if (entries.length == 0) toc.parentNode.removeChild(toc); }, ///////////////////////////////////////////////////////////////////// // Footnotes generator ///////////////////////////////////////////////////////////////////// /* Based on footnote generation code from: * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html */ footnotes: function () { // Delete existing footnote entries in case we're reloading the footnodes. var i; var noteholder = document.getElementById("footnotes"); if (!noteholder) { return; } var entriesToRemove = []; for (i = 0; i < noteholder.childNodes.length; i++) { var entry = noteholder.childNodes[i]; if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote") entriesToRemove.push(entry); } for (i = 0; i < entriesToRemove.length; i++) { noteholder.removeChild(entriesToRemove[i]); } // Rebuild footnote entries. var cont = document.getElementById("content"); var spans = cont.getElementsByTagName("span"); var refs = {}; var n = 0; for (i=0; i<spans.length; i++) { if (spans[i].className == "footnote") { n++; var note = spans[i].getAttribute("data-note"); if (!note) { // Use [\s\S] in place of . so multi-line matches work. // Because JavaScript has no s (dotall) regex flag. note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1]; spans[i].innerHTML = "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n + "' title='View footnote' class='footnote'>" + n + "</a>]"; spans[i].setAttribute("data-note", note); } noteholder.innerHTML += "<div class='footnote' id='_footnote_" + n + "'>" + "<a href='#_footnoteref_" + n + "' title='Return to text'>" + n + "</a>. " + note + "</div>"; var id =spans[i].getAttribute("id"); if (id != null) refs["#"+id] = n; } } if (n == 0) noteholder.parentNode.removeChild(noteholder); else { // Process footnoterefs. for (i=0; i<spans.length; i++) { if (spans[i].className == "footnoteref") { var href = spans[i].getElementsByTagName("a")[0].getAttribute("href"); href = href.match(/#.*/)[0]; // Because IE return full URL. n = refs[href]; spans[i].innerHTML = "[<a href='#_footnote_" + n + "' title='View footnote' class='footnote'>" + n + "</a>]"; } } } }, install: function(toclevels) { var timerId; function reinstall() { asciidoc.footnotes(); if (toclevels) { asciidoc.toc(toclevels); } } function reinstallAndRemoveTimer() { clearInterval(timerId); reinstall(); } timerId = setInterval(reinstall, 500); if (document.addEventListener) document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false); else window.onload = reinstallAndRemoveTimer; } } asciidoc.install(); /*]]>*/ </script> </head> <body class="article"> <div id="header"> <h1>diff API</h1> </div> <div id="content"> <div id="preamble"> <div class="sectionbody"> <div class="paragraph"><p>The diff API is for programs that compare two sets of files (e.g. two trees, one tree and the index) and present the found difference in various ways. The calling program is responsible for feeding the API pairs of files, one from the "old" set and the corresponding one from "new" set, that are different. The library called through this API is called diffcore, and is responsible for two things.</p></div> <div class="ulist"><ul> <li> <p> finding total rewrites (<code>-B</code>), renames (<code>-M</code>) and copies (<code>-C</code>), and changes that touch a string (<code>-S</code>), as specified by the caller. </p> </li> <li> <p> outputting the differences in various formats, as specified by the caller. </p> </li> </ul></div> </div> </div> <div class="sect1"> <h2 id="_calling_sequence">Calling sequence</h2> <div class="sectionbody"> <div class="ulist"><ul> <li> <p> Prepare <code>struct diff_options</code> to record the set of diff options, and then call <code>diff_setup()</code> to initialize this structure. This sets up the vanilla default. </p> </li> <li> <p> Fill in the options structure to specify desired output format, rename detection, etc. <code>diff_opt_parse()</code> can be used to parse options given from the command line in a way consistent with existing git-diff family of programs. </p> </li> <li> <p> Call <code>diff_setup_done()</code>; this inspects the options set up so far for internal consistency and make necessary tweaking to it (e.g. if textual patch output was asked, recursive behaviour is turned on). </p> </li> <li> <p> As you find different pairs of files, call <code>diff_change()</code> to feed modified files, <code>diff_addremove()</code> to feed created or deleted files, or <code>diff_unmerge()</code> to feed a file whose state is <em>unmerged</em> to the API. These are thin wrappers to a lower-level <code>diff_queue()</code> function that is flexible enough to record any of these kinds of changes. </p> </li> <li> <p> Once you finish feeding the pairs of files, call <code>diffcore_std()</code>. This will tell the diffcore library to go ahead and do its work. </p> </li> <li> <p> Calling <code>diff_flush()</code> will produce the output. </p> </li> </ul></div> </div> </div> <div class="sect1"> <h2 id="_data_structures">Data structures</h2> <div class="sectionbody"> <div class="ulist"><ul> <li> <p> <code>struct diff_filespec</code> </p> </li> </ul></div> <div class="paragraph"><p>This is the internal representation for a single file (blob). It records the blob object name (if known — for a work tree file it typically is a NUL SHA-1), filemode and pathname. This is what the <code>diff_addremove()</code>, <code>diff_change()</code> and <code>diff_unmerge()</code> synthesize and feed <code>diff_queue()</code> function with.</p></div> <div class="ulist"><ul> <li> <p> <code>struct diff_filepair</code> </p> </li> </ul></div> <div class="paragraph"><p>This records a pair of <code>struct diff_filespec</code>; the filespec for a file in the "old" set (i.e. preimage) is called <code>one</code>, and the filespec for a file in the "new" set (i.e. postimage) is called <code>two</code>. A change that represents file creation has NULL in <code>one</code>, and file deletion has NULL in <code>two</code>.</p></div> <div class="paragraph"><p>A <code>filepair</code> starts pointing at <code>one</code> and <code>two</code> that are from the same filename, but <code>diffcore_std()</code> can break pairs and match component filespecs with other filespecs from a different filepair to form new filepair. This is called <em>rename detection</em>.</p></div> <div class="ulist"><ul> <li> <p> <code>struct diff_queue</code> </p> </li> </ul></div> <div class="paragraph"><p>This is a collection of filepairs. Notable members are:</p></div> <div class="dlist"><dl> <dt class="hdlist1"> <code>queue</code> </dt> <dd> <p> An array of pointers to <code>struct diff_filepair</code>. This dynamically grows as you add filepairs; </p> </dd> <dt class="hdlist1"> <code>alloc</code> </dt> <dd> <p> The allocated size of the <code>queue</code> array; </p> </dd> <dt class="hdlist1"> <code>nr</code> </dt> <dd> <p> The number of elements in the <code>queue</code> array. </p> <div class="ulist"><ul> <li> <p> <code>struct diff_options</code> </p> </li> </ul></div> </dd> </dl></div> <div class="paragraph"><p>This describes the set of options the calling program wants to affect the operation of diffcore library with.</p></div> <div class="paragraph"><p>Notable members are:</p></div> <div class="dlist"><dl> <dt class="hdlist1"> <code>output_format</code> </dt> <dd> <p> The output format used when <code>diff_flush()</code> is run. </p> </dd> <dt class="hdlist1"> <code>context</code> </dt> <dd> <p> Number of context lines to generate in patch output. </p> </dd> <dt class="hdlist1"> <code>break_opt</code>, <code>detect_rename</code>, <code>rename-score</code>, <code>rename_limit</code> </dt> <dd> <p> Affects the way detection logic for complete rewrites, renames and copies. </p> </dd> <dt class="hdlist1"> <code>abbrev</code> </dt> <dd> <p> Number of hexdigits to abbreviate raw format output to. </p> </dd> <dt class="hdlist1"> <code>pickaxe</code> </dt> <dd> <p> A constant string (can and typically does contain newlines to look for a block of text, not just a single line) to filter out the filepairs that do not change the number of strings contained in its preimage and postimage of the diff_queue. </p> </dd> <dt class="hdlist1"> <code>flags</code> </dt> <dd> <p> This is mostly a collection of boolean options that affects the operation, but some do not have anything to do with the diffcore library. </p> <div class="dlist"><dl> <dt class="hdlist1"> BINARY, TEXT </dt> <dd> <p> Affects the way how a file that is seemingly binary is treated. </p> </dd> <dt class="hdlist1"> FULL_INDEX </dt> <dd> <p> Tells the patch output format not to use abbreviated object names on the "index" lines. </p> </dd> <dt class="hdlist1"> FIND_COPIES_HARDER </dt> <dd> <p> Tells the diffcore library that the caller is feeding unchanged filepairs to allow copies from unmodified files be detected. </p> </dd> <dt class="hdlist1"> COLOR_DIFF </dt> <dd> <p> Output should be colored. </p> </dd> <dt class="hdlist1"> COLOR_DIFF_WORDS </dt> <dd> <p> Output is a colored word-diff. </p> </dd> <dt class="hdlist1"> NO_INDEX </dt> <dd> <p> Tells diff-files that the input is not tracked files but files in random locations on the filesystem. </p> </dd> <dt class="hdlist1"> ALLOW_EXTERNAL </dt> <dd> <p> Tells output routine that it is Ok to call user specified patch output routine. Plumbing disables this to ensure stable output. </p> </dd> <dt class="hdlist1"> QUIET </dt> <dd> <p> Do not show any output. </p> </dd> <dt class="hdlist1"> REVERSE_DIFF </dt> <dd> <p> Tells the library that the calling program is feeding the filepairs reversed; <code>one</code> is two, and <code>two</code> is one. </p> </dd> <dt class="hdlist1"> EXIT_WITH_STATUS </dt> <dd> <p> For communication between the calling program and the options parser; tell the calling program to signal the presence of difference using program exit code. </p> </dd> <dt class="hdlist1"> HAS_CHANGES </dt> <dd> <p> Internal; used for optimization to see if there is any change. </p> </dd> <dt class="hdlist1"> SILENT_ON_REMOVE </dt> <dd> <p> Affects if diff-files shows removed files. </p> </dd> <dt class="hdlist1"> RECURSIVE, TREE_IN_RECURSIVE </dt> <dd> <p> Tells if tree traversal done by tree-diff should recursively descend into a tree object pair that are different in preimage and postimage set. </p> </dd> </dl></div> </dd> </dl></div> <div class="paragraph"><p>(JC)</p></div> </div> </div> </div> <div id="footnotes"><hr /></div> <div id="footer"> <div id="footer-text"> Last updated 2013-06-10 20:01:55 UTC </div> </div> </body> </html>
Submit
FILE
FOLDER
Name
Size
Permission
Action
api-allocation-growing.html
17975 bytes
0644
api-allocation-growing.txt
1019 bytes
0644
api-argv-array.html
19905 bytes
0644
api-argv-array.txt
2175 bytes
0644
api-builtin.html
19893 bytes
0644
api-builtin.txt
2044 bytes
0644
api-config.html
23956 bytes
0644
api-config.txt
5309 bytes
0644
api-credentials.html
28569 bytes
0644
api-credentials.txt
9079 bytes
0644
api-decorate.html
16622 bytes
0644
api-decorate.txt
60 bytes
0644
api-diff.html
24899 bytes
0644
api-diff.txt
5341 bytes
0644
api-directory-listing.html
21243 bytes
0644
api-directory-listing.txt
2779 bytes
0644
api-gitattributes.html
22423 bytes
0644
api-gitattributes.txt
3707 bytes
0644
api-grep.html
16698 bytes
0644
api-grep.txt
76 bytes
0644
api-hash.html
18864 bytes
0644
api-hash.txt
1437 bytes
0644
api-hashmap.html
36426 bytes
0644
api-hashmap.txt
7897 bytes
0644
api-history-graph.html
24654 bytes
0644
api-history-graph.txt
6041 bytes
0644
api-in-core-index.html
17367 bytes
0644
api-in-core-index.txt
457 bytes
0644
api-index-skel.txt
431 bytes
0644
api-index.html
18895 bytes
0644
api-index.sh
611 bytes
0644
api-index.txt
1719 bytes
0644
api-lockfile.html
20527 bytes
0644
api-lockfile.txt
2992 bytes
0644
api-merge.html
21872 bytes
0644
api-merge.txt
3384 bytes
0644
api-object-access.html
17131 bytes
0644
api-object-access.txt
342 bytes
0644
api-parse-options.html
31778 bytes
0644
api-parse-options.txt
9580 bytes
0644
api-quote.html
16813 bytes
0644
api-quote.txt
145 bytes
0644
api-ref-iteration.html
20182 bytes
0644
api-ref-iteration.txt
2472 bytes
0644
api-remote.html
21775 bytes
0644
api-remote.txt
3376 bytes
0644
api-revision-walking.html
20233 bytes
0644
api-revision-walking.txt
2446 bytes
0644
api-run-command.html
28924 bytes
0644
api-run-command.txt
8274 bytes
0644
api-setup.html
16911 bytes
0644
api-setup.txt
180 bytes
0644
api-sha1-array.html
19857 bytes
0644
api-sha1-array.txt
2305 bytes
0644
api-sigchain.html
18164 bytes
0644
api-sigchain.txt
1370 bytes
0644
api-strbuf.html
32926 bytes
0644
api-strbuf.txt
10413 bytes
0644
api-string-list.html
27056 bytes
0644
api-string-list.txt
7006 bytes
0644
api-tree-walking.html
23727 bytes
0644
api-tree-walking.txt
4375 bytes
0644
api-xdiff-interface.html
16696 bytes
0644
api-xdiff-interface.txt
139 bytes
0644
index-format.html
27774 bytes
0644
index-format.txt
6441 bytes
0644
pack-format.html
24654 bytes
0644
pack-format.txt
5673 bytes
0644
pack-heuristics.html
43769 bytes
0644
pack-heuristics.txt
18196 bytes
0644
pack-protocol.html
44158 bytes
0644
pack-protocol.txt
21490 bytes
0644
protocol-capabilities.html
26015 bytes
0644
protocol-capabilities.txt
7260 bytes
0644
protocol-common.html
20557 bytes
0644
protocol-common.txt
2766 bytes
0644
racy-git.html
27499 bytes
0644
racy-git.txt
8834 bytes
0644
send-pack-pipeline.html
19181 bytes
0644
send-pack-pipeline.txt
1969 bytes
0644
shallow.html
19316 bytes
0644
shallow.txt
2352 bytes
0644
trivial-merge.html
22139 bytes
0644
trivial-merge.txt
4264 bytes
0644
N4ST4R_ID | Naxtarrr