"Fossies" - the Fresh Open Source Software Archive

Member "howto/maintain-git.html" (15 Dec 2018, 39759 Bytes) of package /linux/misc/git-htmldocs-2.20.1.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) HTML source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    3     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    5 <head>
    6 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
    7 <meta name="generator" content="AsciiDoc 8.6.10" />
    8 <title>How to maintain Git</title>
    9 <style type="text/css">
   10 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
   11 
   12 /* Default font. */
   13 body {
   14   font-family: Georgia,serif;
   15 }
   16 
   17 /* Title font. */
   18 h1, h2, h3, h4, h5, h6,
   19 div.title, caption.title,
   20 thead, p.table.header,
   21 #toctitle,
   22 #author, #revnumber, #revdate, #revremark,
   23 #footer {
   24   font-family: Arial,Helvetica,sans-serif;
   25 }
   26 
   27 body {
   28   margin: 1em 5% 1em 5%;
   29 }
   30 
   31 a {
   32   color: blue;
   33   text-decoration: underline;
   34 }
   35 a:visited {
   36   color: fuchsia;
   37 }
   38 
   39 em {
   40   font-style: italic;
   41   color: navy;
   42 }
   43 
   44 strong {
   45   font-weight: bold;
   46   color: #083194;
   47 }
   48 
   49 h1, h2, h3, h4, h5, h6 {
   50   color: #527bbd;
   51   margin-top: 1.2em;
   52   margin-bottom: 0.5em;
   53   line-height: 1.3;
   54 }
   55 
   56 h1, h2, h3 {
   57   border-bottom: 2px solid silver;
   58 }
   59 h2 {
   60   padding-top: 0.5em;
   61 }
   62 h3 {
   63   float: left;
   64 }
   65 h3 + * {
   66   clear: left;
   67 }
   68 h5 {
   69   font-size: 1.0em;
   70 }
   71 
   72 div.sectionbody {
   73   margin-left: 0;
   74 }
   75 
   76 hr {
   77   border: 1px solid silver;
   78 }
   79 
   80 p {
   81   margin-top: 0.5em;
   82   margin-bottom: 0.5em;
   83 }
   84 
   85 ul, ol, li > p {
   86   margin-top: 0;
   87 }
   88 ul > li     { color: #aaa; }
   89 ul > li > * { color: black; }
   90 
   91 .monospaced, code, pre {
   92   font-family: "Courier New", Courier, monospace;
   93   font-size: inherit;
   94   color: navy;
   95   padding: 0;
   96   margin: 0;
   97 }
   98 pre {
   99   white-space: pre-wrap;
  100 }
  101 
  102 #author {
  103   color: #527bbd;
  104   font-weight: bold;
  105   font-size: 1.1em;
  106 }
  107 #email {
  108 }
  109 #revnumber, #revdate, #revremark {
  110 }
  111 
  112 #footer {
  113   font-size: small;
  114   border-top: 2px solid silver;
  115   padding-top: 0.5em;
  116   margin-top: 4.0em;
  117 }
  118 #footer-text {
  119   float: left;
  120   padding-bottom: 0.5em;
  121 }
  122 #footer-badges {
  123   float: right;
  124   padding-bottom: 0.5em;
  125 }
  126 
  127 #preamble {
  128   margin-top: 1.5em;
  129   margin-bottom: 1.5em;
  130 }
  131 div.imageblock, div.exampleblock, div.verseblock,
  132 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
  133 div.admonitionblock {
  134   margin-top: 1.0em;
  135   margin-bottom: 1.5em;
  136 }
  137 div.admonitionblock {
  138   margin-top: 2.0em;
  139   margin-bottom: 2.0em;
  140   margin-right: 10%;
  141   color: #606060;
  142 }
  143 
  144 div.content { /* Block element content. */
  145   padding: 0;
  146 }
  147 
  148 /* Block element titles. */
  149 div.title, caption.title {
  150   color: #527bbd;
  151   font-weight: bold;
  152   text-align: left;
  153   margin-top: 1.0em;
  154   margin-bottom: 0.5em;
  155 }
  156 div.title + * {
  157   margin-top: 0;
  158 }
  159 
  160 td div.title:first-child {
  161   margin-top: 0.0em;
  162 }
  163 div.content div.title:first-child {
  164   margin-top: 0.0em;
  165 }
  166 div.content + div.title {
  167   margin-top: 0.0em;
  168 }
  169 
  170 div.sidebarblock > div.content {
  171   background: #ffffee;
  172   border: 1px solid #dddddd;
  173   border-left: 4px solid #f0f0f0;
  174   padding: 0.5em;
  175 }
  176 
  177 div.listingblock > div.content {
  178   border: 1px solid #dddddd;
  179   border-left: 5px solid #f0f0f0;
  180   background: #f8f8f8;
  181   padding: 0.5em;
  182 }
  183 
  184 div.quoteblock, div.verseblock {
  185   padding-left: 1.0em;
  186   margin-left: 1.0em;
  187   margin-right: 10%;
  188   border-left: 5px solid #f0f0f0;
  189   color: #888;
  190 }
  191 
  192 div.quoteblock > div.attribution {
  193   padding-top: 0.5em;
  194   text-align: right;
  195 }
  196 
  197 div.verseblock > pre.content {
  198   font-family: inherit;
  199   font-size: inherit;
  200 }
  201 div.verseblock > div.attribution {
  202   padding-top: 0.75em;
  203   text-align: left;
  204 }
  205 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
  206 div.verseblock + div.attribution {
  207   text-align: left;
  208 }
  209 
  210 div.admonitionblock .icon {
  211   vertical-align: top;
  212   font-size: 1.1em;
  213   font-weight: bold;
  214   text-decoration: underline;
  215   color: #527bbd;
  216   padding-right: 0.5em;
  217 }
  218 div.admonitionblock td.content {
  219   padding-left: 0.5em;
  220   border-left: 3px solid #dddddd;
  221 }
  222 
  223 div.exampleblock > div.content {
  224   border-left: 3px solid #dddddd;
  225   padding-left: 0.5em;
  226 }
  227 
  228 div.imageblock div.content { padding-left: 0; }
  229 span.image img { border-style: none; vertical-align: text-bottom; }
  230 a.image:visited { color: white; }
  231 
  232 dl {
  233   margin-top: 0.8em;
  234   margin-bottom: 0.8em;
  235 }
  236 dt {
  237   margin-top: 0.5em;
  238   margin-bottom: 0;
  239   font-style: normal;
  240   color: navy;
  241 }
  242 dd > *:first-child {
  243   margin-top: 0.1em;
  244 }
  245 
  246 ul, ol {
  247     list-style-position: outside;
  248 }
  249 ol.arabic {
  250   list-style-type: decimal;
  251 }
  252 ol.loweralpha {
  253   list-style-type: lower-alpha;
  254 }
  255 ol.upperalpha {
  256   list-style-type: upper-alpha;
  257 }
  258 ol.lowerroman {
  259   list-style-type: lower-roman;
  260 }
  261 ol.upperroman {
  262   list-style-type: upper-roman;
  263 }
  264 
  265 div.compact ul, div.compact ol,
  266 div.compact p, div.compact p,
  267 div.compact div, div.compact div {
  268   margin-top: 0.1em;
  269   margin-bottom: 0.1em;
  270 }
  271 
  272 tfoot {
  273   font-weight: bold;
  274 }
  275 td > div.verse {
  276   white-space: pre;
  277 }
  278 
  279 div.hdlist {
  280   margin-top: 0.8em;
  281   margin-bottom: 0.8em;
  282 }
  283 div.hdlist tr {
  284   padding-bottom: 15px;
  285 }
  286 dt.hdlist1.strong, td.hdlist1.strong {
  287   font-weight: bold;
  288 }
  289 td.hdlist1 {
  290   vertical-align: top;
  291   font-style: normal;
  292   padding-right: 0.8em;
  293   color: navy;
  294 }
  295 td.hdlist2 {
  296   vertical-align: top;
  297 }
  298 div.hdlist.compact tr {
  299   margin: 0;
  300   padding-bottom: 0;
  301 }
  302 
  303 .comment {
  304   background: yellow;
  305 }
  306 
  307 .footnote, .footnoteref {
  308   font-size: 0.8em;
  309 }
  310 
  311 span.footnote, span.footnoteref {
  312   vertical-align: super;
  313 }
  314 
  315 #footnotes {
  316   margin: 20px 0 20px 0;
  317   padding: 7px 0 0 0;
  318 }
  319 
  320 #footnotes div.footnote {
  321   margin: 0 0 5px 0;
  322 }
  323 
  324 #footnotes hr {
  325   border: none;
  326   border-top: 1px solid silver;
  327   height: 1px;
  328   text-align: left;
  329   margin-left: 0;
  330   width: 20%;
  331   min-width: 100px;
  332 }
  333 
  334 div.colist td {
  335   padding-right: 0.5em;
  336   padding-bottom: 0.3em;
  337   vertical-align: top;
  338 }
  339 div.colist td img {
  340   margin-top: 0.3em;
  341 }
  342 
  343 @media print {
  344   #footer-badges { display: none; }
  345 }
  346 
  347 #toc {
  348   margin-bottom: 2.5em;
  349 }
  350 
  351 #toctitle {
  352   color: #527bbd;
  353   font-size: 1.1em;
  354   font-weight: bold;
  355   margin-top: 1.0em;
  356   margin-bottom: 0.1em;
  357 }
  358 
  359 div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  360   margin-top: 0;
  361   margin-bottom: 0;
  362 }
  363 div.toclevel2 {
  364   margin-left: 2em;
  365   font-size: 0.9em;
  366 }
  367 div.toclevel3 {
  368   margin-left: 4em;
  369   font-size: 0.9em;
  370 }
  371 div.toclevel4 {
  372   margin-left: 6em;
  373   font-size: 0.9em;
  374 }
  375 
  376 span.aqua { color: aqua; }
  377 span.black { color: black; }
  378 span.blue { color: blue; }
  379 span.fuchsia { color: fuchsia; }
  380 span.gray { color: gray; }
  381 span.green { color: green; }
  382 span.lime { color: lime; }
  383 span.maroon { color: maroon; }
  384 span.navy { color: navy; }
  385 span.olive { color: olive; }
  386 span.purple { color: purple; }
  387 span.red { color: red; }
  388 span.silver { color: silver; }
  389 span.teal { color: teal; }
  390 span.white { color: white; }
  391 span.yellow { color: yellow; }
  392 
  393 span.aqua-background { background: aqua; }
  394 span.black-background { background: black; }
  395 span.blue-background { background: blue; }
  396 span.fuchsia-background { background: fuchsia; }
  397 span.gray-background { background: gray; }
  398 span.green-background { background: green; }
  399 span.lime-background { background: lime; }
  400 span.maroon-background { background: maroon; }
  401 span.navy-background { background: navy; }
  402 span.olive-background { background: olive; }
  403 span.purple-background { background: purple; }
  404 span.red-background { background: red; }
  405 span.silver-background { background: silver; }
  406 span.teal-background { background: teal; }
  407 span.white-background { background: white; }
  408 span.yellow-background { background: yellow; }
  409 
  410 span.big { font-size: 2em; }
  411 span.small { font-size: 0.6em; }
  412 
  413 span.underline { text-decoration: underline; }
  414 span.overline { text-decoration: overline; }
  415 span.line-through { text-decoration: line-through; }
  416 
  417 div.unbreakable { page-break-inside: avoid; }
  418 
  419 
  420 /*
  421  * xhtml11 specific
  422  *
  423  * */
  424 
  425 div.tableblock {
  426   margin-top: 1.0em;
  427   margin-bottom: 1.5em;
  428 }
  429 div.tableblock > table {
  430   border: 3px solid #527bbd;
  431 }
  432 thead, p.table.header {
  433   font-weight: bold;
  434   color: #527bbd;
  435 }
  436 p.table {
  437   margin-top: 0;
  438 }
  439 /* Because the table frame attribute is overriden by CSS in most browsers. */
  440 div.tableblock > table[frame="void"] {
  441   border-style: none;
  442 }
  443 div.tableblock > table[frame="hsides"] {
  444   border-left-style: none;
  445   border-right-style: none;
  446 }
  447 div.tableblock > table[frame="vsides"] {
  448   border-top-style: none;
  449   border-bottom-style: none;
  450 }
  451 
  452 
  453 /*
  454  * html5 specific
  455  *
  456  * */
  457 
  458 table.tableblock {
  459   margin-top: 1.0em;
  460   margin-bottom: 1.5em;
  461 }
  462 thead, p.tableblock.header {
  463   font-weight: bold;
  464   color: #527bbd;
  465 }
  466 p.tableblock {
  467   margin-top: 0;
  468 }
  469 table.tableblock {
  470   border-width: 3px;
  471   border-spacing: 0px;
  472   border-style: solid;
  473   border-color: #527bbd;
  474   border-collapse: collapse;
  475 }
  476 th.tableblock, td.tableblock {
  477   border-width: 1px;
  478   padding: 4px;
  479   border-style: solid;
  480   border-color: #527bbd;
  481 }
  482 
  483 table.tableblock.frame-topbot {
  484   border-left-style: hidden;
  485   border-right-style: hidden;
  486 }
  487 table.tableblock.frame-sides {
  488   border-top-style: hidden;
  489   border-bottom-style: hidden;
  490 }
  491 table.tableblock.frame-none {
  492   border-style: hidden;
  493 }
  494 
  495 th.tableblock.halign-left, td.tableblock.halign-left {
  496   text-align: left;
  497 }
  498 th.tableblock.halign-center, td.tableblock.halign-center {
  499   text-align: center;
  500 }
  501 th.tableblock.halign-right, td.tableblock.halign-right {
  502   text-align: right;
  503 }
  504 
  505 th.tableblock.valign-top, td.tableblock.valign-top {
  506   vertical-align: top;
  507 }
  508 th.tableblock.valign-middle, td.tableblock.valign-middle {
  509   vertical-align: middle;
  510 }
  511 th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  512   vertical-align: bottom;
  513 }
  514 
  515 
  516 /*
  517  * manpage specific
  518  *
  519  * */
  520 
  521 body.manpage h1 {
  522   padding-top: 0.5em;
  523   padding-bottom: 0.5em;
  524   border-top: 2px solid silver;
  525   border-bottom: 2px solid silver;
  526 }
  527 body.manpage h2 {
  528   border-style: none;
  529 }
  530 body.manpage div.sectionbody {
  531   margin-left: 3em;
  532 }
  533 
  534 @media print {
  535   body.manpage div#toc { display: none; }
  536 }
  537 
  538 
  539 </style>
  540 <script type="text/javascript">
  541 /*<![CDATA[*/
  542 var asciidoc = {  // Namespace.
  543 
  544 /////////////////////////////////////////////////////////////////////
  545 // Table Of Contents generator
  546 /////////////////////////////////////////////////////////////////////
  547 
  548 /* Author: Mihai Bazon, September 2002
  549  * http://students.infoiasi.ro/~mishoo
  550  *
  551  * Table Of Content generator
  552  * Version: 0.4
  553  *
  554  * Feel free to use this script under the terms of the GNU General Public
  555  * License, as long as you do not remove or alter this notice.
  556  */
  557 
  558  /* modified by Troy D. Hanson, September 2006. License: GPL */
  559  /* modified by Stuart Rackham, 2006, 2009. License: GPL */
  560 
  561 // toclevels = 1..4.
  562 toc: function (toclevels) {
  563 
  564   function getText(el) {
  565     var text = "";
  566     for (var i = el.firstChild; i != null; i = i.nextSibling) {
  567       if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
  568         text += i.data;
  569       else if (i.firstChild != null)
  570         text += getText(i);
  571     }
  572     return text;
  573   }
  574 
  575   function TocEntry(el, text, toclevel) {
  576     this.element = el;
  577     this.text = text;
  578     this.toclevel = toclevel;
  579   }
  580 
  581   function tocEntries(el, toclevels) {
  582     var result = new Array;
  583     var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
  584     // Function that scans the DOM tree for header elements (the DOM2
  585     // nodeIterator API would be a better technique but not supported by all
  586     // browsers).
  587     var iterate = function (el) {
  588       for (var i = el.firstChild; i != null; i = i.nextSibling) {
  589         if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
  590           var mo = re.exec(i.tagName);
  591           if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
  592             result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
  593           }
  594           iterate(i);
  595         }
  596       }
  597     }
  598     iterate(el);
  599     return result;
  600   }
  601 
  602   var toc = document.getElementById("toc");
  603   if (!toc) {
  604     return;
  605   }
  606 
  607   // Delete existing TOC entries in case we're reloading the TOC.
  608   var tocEntriesToRemove = [];
  609   var i;
  610   for (i = 0; i < toc.childNodes.length; i++) {
  611     var entry = toc.childNodes[i];
  612     if (entry.nodeName.toLowerCase() == 'div'
  613      && entry.getAttribute("class")
  614      && entry.getAttribute("class").match(/^toclevel/))
  615       tocEntriesToRemove.push(entry);
  616   }
  617   for (i = 0; i < tocEntriesToRemove.length; i++) {
  618     toc.removeChild(tocEntriesToRemove[i]);
  619   }
  620 
  621   // Rebuild TOC entries.
  622   var entries = tocEntries(document.getElementById("content"), toclevels);
  623   for (var i = 0; i < entries.length; ++i) {
  624     var entry = entries[i];
  625     if (entry.element.id == "")
  626       entry.element.id = "_toc_" + i;
  627     var a = document.createElement("a");
  628     a.href = "#" + entry.element.id;
  629     a.appendChild(document.createTextNode(entry.text));
  630     var div = document.createElement("div");
  631     div.appendChild(a);
  632     div.className = "toclevel" + entry.toclevel;
  633     toc.appendChild(div);
  634   }
  635   if (entries.length == 0)
  636     toc.parentNode.removeChild(toc);
  637 },
  638 
  639 
  640 /////////////////////////////////////////////////////////////////////
  641 // Footnotes generator
  642 /////////////////////////////////////////////////////////////////////
  643 
  644 /* Based on footnote generation code from:
  645  * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
  646  */
  647 
  648 footnotes: function () {
  649   // Delete existing footnote entries in case we're reloading the footnodes.
  650   var i;
  651   var noteholder = document.getElementById("footnotes");
  652   if (!noteholder) {
  653     return;
  654   }
  655   var entriesToRemove = [];
  656   for (i = 0; i < noteholder.childNodes.length; i++) {
  657     var entry = noteholder.childNodes[i];
  658     if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
  659       entriesToRemove.push(entry);
  660   }
  661   for (i = 0; i < entriesToRemove.length; i++) {
  662     noteholder.removeChild(entriesToRemove[i]);
  663   }
  664 
  665   // Rebuild footnote entries.
  666   var cont = document.getElementById("content");
  667   var spans = cont.getElementsByTagName("span");
  668   var refs = {};
  669   var n = 0;
  670   for (i=0; i<spans.length; i++) {
  671     if (spans[i].className == "footnote") {
  672       n++;
  673       var note = spans[i].getAttribute("data-note");
  674       if (!note) {
  675         // Use [\s\S] in place of . so multi-line matches work.
  676         // Because JavaScript has no s (dotall) regex flag.
  677         note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
  678         spans[i].innerHTML =
  679           "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
  680           "' title='View footnote' class='footnote'>" + n + "</a>]";
  681         spans[i].setAttribute("data-note", note);
  682       }
  683       noteholder.innerHTML +=
  684         "<div class='footnote' id='_footnote_" + n + "'>" +
  685         "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
  686         n + "</a>. " + note + "</div>";
  687       var id =spans[i].getAttribute("id");
  688       if (id != null) refs["#"+id] = n;
  689     }
  690   }
  691   if (n == 0)
  692     noteholder.parentNode.removeChild(noteholder);
  693   else {
  694     // Process footnoterefs.
  695     for (i=0; i<spans.length; i++) {
  696       if (spans[i].className == "footnoteref") {
  697         var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
  698         href = href.match(/#.*/)[0];  // Because IE return full URL.
  699         n = refs[href];
  700         spans[i].innerHTML =
  701           "[<a href='#_footnote_" + n +
  702           "' title='View footnote' class='footnote'>" + n + "</a>]";
  703       }
  704     }
  705   }
  706 },
  707 
  708 install: function(toclevels) {
  709   var timerId;
  710 
  711   function reinstall() {
  712     asciidoc.footnotes();
  713     if (toclevels) {
  714       asciidoc.toc(toclevels);
  715     }
  716   }
  717 
  718   function reinstallAndRemoveTimer() {
  719     clearInterval(timerId);
  720     reinstall();
  721   }
  722 
  723   timerId = setInterval(reinstall, 500);
  724   if (document.addEventListener)
  725     document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  726   else
  727     window.onload = reinstallAndRemoveTimer;
  728 }
  729 
  730 }
  731 asciidoc.install();
  732 /*]]>*/
  733 </script>
  734 </head>
  735 <body class="article">
  736 <div id="header">
  737 <h1>How to maintain Git</h1>
  738 </div>
  739 <div id="content">
  740 <div class="sect1">
  741 <h2 id="_activities">Activities</h2>
  742 <div class="sectionbody">
  743 <div class="paragraph"><p>The maintainer&#8217;s Git time is spent on three activities.</p></div>
  744 <div class="ulist"><ul>
  745 <li>
  746 <p>
  747 Communication (45%)
  748 </p>
  749 <div class="literalblock">
  750 <div class="content">
  751 <pre><code>Mailing list discussions on general design, fielding user
  752 questions, diagnosing bug reports; reviewing, commenting on,
  753 suggesting alternatives to, and rejecting patches.</code></pre>
  754 </div></div>
  755 </li>
  756 <li>
  757 <p>
  758 Integration (50%)
  759 </p>
  760 <div class="literalblock">
  761 <div class="content">
  762 <pre><code>Applying new patches from the contributors while spotting and
  763 correcting minor mistakes, shuffling the integration and
  764 testing branches, pushing the results out, cutting the
  765 releases, and making announcements.</code></pre>
  766 </div></div>
  767 </li>
  768 <li>
  769 <p>
  770 Own development (5%)
  771 </p>
  772 <div class="literalblock">
  773 <div class="content">
  774 <pre><code>Scratching my own itch and sending proposed patch series out.</code></pre>
  775 </div></div>
  776 </li>
  777 </ul></div>
  778 </div>
  779 </div>
  780 <div class="sect1">
  781 <h2 id="_the_policy">The Policy</h2>
  782 <div class="sectionbody">
  783 <div class="paragraph"><p>The policy on Integration is informally mentioned in "A Note
  784 from the maintainer" message, which is periodically posted to
  785 this mailing list after each feature release is made.</p></div>
  786 <div class="ulist"><ul>
  787 <li>
  788 <p>
  789 Feature releases are numbered as vX.Y.0 and are meant to
  790    contain bugfixes and enhancements in any area, including
  791    functionality, performance and usability, without regression.
  792 </p>
  793 </li>
  794 <li>
  795 <p>
  796 One release cycle for a feature release is expected to last for
  797    eight to ten weeks.
  798 </p>
  799 </li>
  800 <li>
  801 <p>
  802 Maintenance releases are numbered as vX.Y.Z and are meant
  803    to contain only bugfixes for the corresponding vX.Y.0 feature
  804    release and earlier maintenance releases vX.Y.W (W &lt; Z).
  805 </p>
  806 </li>
  807 <li>
  808 <p>
  809 <em>master</em> branch is used to prepare for the next feature
  810    release. In other words, at some point, the tip of <em>master</em>
  811    branch is tagged with vX.Y.0.
  812 </p>
  813 </li>
  814 <li>
  815 <p>
  816 <em>maint</em> branch is used to prepare for the next maintenance
  817    release.  After the feature release vX.Y.0 is made, the tip
  818    of <em>maint</em> branch is set to that release, and bugfixes will
  819    accumulate on the branch, and at some point, the tip of the
  820    branch is tagged with vX.Y.1, vX.Y.2, and so on.
  821 </p>
  822 </li>
  823 <li>
  824 <p>
  825 <em>next</em> branch is used to publish changes (both enhancements
  826    and fixes) that (1) have worthwhile goal, (2) are in a fairly
  827    good shape suitable for everyday use, (3) but have not yet
  828    demonstrated to be regression free.  New changes are tested
  829    in <em>next</em> before merged to <em>master</em>.
  830 </p>
  831 </li>
  832 <li>
  833 <p>
  834 <em>pu</em> branch is used to publish other proposed changes that do
  835    not yet pass the criteria set for <em>next</em>.
  836 </p>
  837 </li>
  838 <li>
  839 <p>
  840 The tips of <em>master</em> and <em>maint</em> branches will not be rewound to
  841    allow people to build their own customization on top of them.
  842    Early in a new development cycle, <em>next</em> is rewound to the tip of
  843    <em>master</em> once, but otherwise it will not be rewound until the end
  844    of the cycle.
  845 </p>
  846 </li>
  847 <li>
  848 <p>
  849 Usually <em>master</em> contains all of <em>maint</em> and <em>next</em> contains all
  850    of <em>master</em>.  <em>pu</em> contains all the topics merged to <em>next</em>, but
  851    is rebuilt directly on <em>master</em>.
  852 </p>
  853 </li>
  854 <li>
  855 <p>
  856 The tip of <em>master</em> is meant to be more stable than any
  857    tagged releases, and the users are encouraged to follow it.
  858 </p>
  859 </li>
  860 <li>
  861 <p>
  862 The <em>next</em> branch is where new action takes place, and the
  863    users are encouraged to test it so that regressions and bugs
  864    are found before new topics are merged to <em>master</em>.
  865 </p>
  866 </li>
  867 </ul></div>
  868 <div class="paragraph"><p>Note that before v1.9.0 release, the version numbers used to be
  869 structured slightly differently.  vX.Y.Z were feature releases while
  870 vX.Y.Z.W were maintenance releases for vX.Y.Z.</p></div>
  871 </div>
  872 </div>
  873 <div class="sect1">
  874 <h2 id="_a_typical_git_day">A Typical Git Day</h2>
  875 <div class="sectionbody">
  876 <div class="paragraph"><p>A typical Git day for the maintainer implements the above policy
  877 by doing the following:</p></div>
  878 <div class="ulist"><ul>
  879 <li>
  880 <p>
  881 Scan mailing list.  Respond with review comments, suggestions
  882    etc.  Kibitz.  Collect potentially usable patches from the
  883    mailing list.  Patches about a single topic go to one mailbox (I
  884    read my mail in Gnus, and type \C-o to save/append messages in
  885    files in mbox format).
  886 </p>
  887 </li>
  888 <li>
  889 <p>
  890 Write his own patches to address issues raised on the list but
  891    nobody has stepped up solving.  Send it out just like other
  892    contributors do, and pick them up just like patches from other
  893    contributors (see above).
  894 </p>
  895 </li>
  896 <li>
  897 <p>
  898 Review the patches in the saved mailboxes.  Edit proposed log
  899    message for typofixes and clarifications, and add Acks
  900    collected from the list.  Edit patch to incorporate "Oops,
  901    that should have been like this" fixes from the discussion.
  902 </p>
  903 </li>
  904 <li>
  905 <p>
  906 Classify the collected patches and handle <em>master</em> and
  907    <em>maint</em> updates:
  908 </p>
  909 </li>
  910 <li>
  911 <p>
  912 Obviously correct fixes that pertain to the tip of <em>maint</em>
  913      are directly applied to <em>maint</em>.
  914 </p>
  915 </li>
  916 <li>
  917 <p>
  918 Obviously correct fixes that pertain to the tip of <em>master</em>
  919      are directly applied to <em>master</em>.
  920 </p>
  921 </li>
  922 <li>
  923 <p>
  924 Other topics are not handled in this step.
  925 </p>
  926 <div class="literalblock">
  927 <div class="content">
  928 <pre><code>This step is done with "git am".</code></pre>
  929 </div></div>
  930 <div class="literalblock">
  931 <div class="content">
  932 <pre><code>$ git checkout master    ;# or "git checkout maint"
  933 $ git am -sc3 mailbox
  934 $ make test</code></pre>
  935 </div></div>
  936 <div class="literalblock">
  937 <div class="content">
  938 <pre><code>In practice, almost no patch directly goes to 'master' or
  939 'maint'.</code></pre>
  940 </div></div>
  941 </li>
  942 <li>
  943 <p>
  944 Review the last issue of "What&#8217;s cooking" message, review the
  945    topics ready for merging (topic&#8594;master and topic&#8594;maint).  Use
  946    "Meta/cook -w" script (where Meta/ contains a checkout of the
  947    <em>todo</em> branch) to aid this step.
  948 </p>
  949 <div class="literalblock">
  950 <div class="content">
  951 <pre><code>And perform the merge.  Use "Meta/Reintegrate -e" script (see
  952 later) to aid this step.</code></pre>
  953 </div></div>
  954 <div class="literalblock">
  955 <div class="content">
  956 <pre><code>$ Meta/cook -w last-issue-of-whats-cooking.mbox</code></pre>
  957 </div></div>
  958 <div class="literalblock">
  959 <div class="content">
  960 <pre><code>$ git checkout master    ;# or "git checkout maint"
  961 $ echo ai/topic | Meta/Reintegrate -e ;# "git merge ai/topic"
  962 $ git log -p ORIG_HEAD.. ;# final review
  963 $ git diff ORIG_HEAD..   ;# final review
  964 $ make test              ;# final review</code></pre>
  965 </div></div>
  966 </li>
  967 <li>
  968 <p>
  969 Handle the remaining patches:
  970 </p>
  971 </li>
  972 <li>
  973 <p>
  974 Anything unobvious that is applicable to <em>master</em> (in other
  975      words, does not depend on anything that is still in <em>next</em>
  976      and not in <em>master</em>) is applied to a new topic branch that
  977      is forked from the tip of <em>master</em>.  This includes both
  978      enhancements and unobvious fixes to <em>master</em>.  A topic
  979      branch is named as ai/topic where "ai" is two-letter string
  980      named after author&#8217;s initial and "topic" is a descriptive name
  981      of the topic (in other words, "what&#8217;s the series is about").
  982 </p>
  983 </li>
  984 <li>
  985 <p>
  986 An unobvious fix meant for <em>maint</em> is applied to a new
  987      topic branch that is forked from the tip of <em>maint</em>.  The
  988      topic is named as ai/maint-topic.
  989 </p>
  990 </li>
  991 <li>
  992 <p>
  993 Changes that pertain to an existing topic are applied to
  994      the branch, but:
  995 </p>
  996 </li>
  997 <li>
  998 <p>
  999 obviously correct ones are applied first;
 1000 </p>
 1001 </li>
 1002 <li>
 1003 <p>
 1004 questionable ones are discarded or applied to near the tip;
 1005 </p>
 1006 </li>
 1007 <li>
 1008 <p>
 1009 Replacement patches to an existing topic are accepted only
 1010      for commits not in <em>next</em>.
 1011 </p>
 1012 <div class="literalblock">
 1013 <div class="content">
 1014 <pre><code>The above except the "replacement" are all done with:</code></pre>
 1015 </div></div>
 1016 <div class="literalblock">
 1017 <div class="content">
 1018 <pre><code>$ git checkout ai/topic ;# or "git checkout -b ai/topic master"
 1019 $ git am -sc3 mailbox</code></pre>
 1020 </div></div>
 1021 <div class="literalblock">
 1022 <div class="content">
 1023 <pre><code>while patch replacement is often done by:</code></pre>
 1024 </div></div>
 1025 <div class="literalblock">
 1026 <div class="content">
 1027 <pre><code>$ git format-patch ai/topic~$n..ai/topic ;# export existing</code></pre>
 1028 </div></div>
 1029 <div class="literalblock">
 1030 <div class="content">
 1031 <pre><code>then replace some parts with the new patch, and reapplying:</code></pre>
 1032 </div></div>
 1033 <div class="literalblock">
 1034 <div class="content">
 1035 <pre><code>$ git checkout ai/topic
 1036 $ git reset --hard ai/topic~$n
 1037 $ git am -sc3 -s 000*.txt</code></pre>
 1038 </div></div>
 1039 <div class="literalblock">
 1040 <div class="content">
 1041 <pre><code>The full test suite is always run for 'maint' and 'master'
 1042 after patch application; for topic branches the tests are run
 1043 as time permits.</code></pre>
 1044 </div></div>
 1045 </li>
 1046 <li>
 1047 <p>
 1048 Merge maint to master as needed:
 1049 </p>
 1050 <div class="literalblock">
 1051 <div class="content">
 1052 <pre><code>$ git checkout master
 1053 $ git merge maint
 1054 $ make test</code></pre>
 1055 </div></div>
 1056 </li>
 1057 <li>
 1058 <p>
 1059 Merge master to next as needed:
 1060 </p>
 1061 <div class="literalblock">
 1062 <div class="content">
 1063 <pre><code>$ git checkout next
 1064 $ git merge master
 1065 $ make test</code></pre>
 1066 </div></div>
 1067 </li>
 1068 <li>
 1069 <p>
 1070 Review the last issue of "What&#8217;s cooking" again and see if topics
 1071    that are ready to be merged to <em>next</em> are still in good shape
 1072    (e.g. has there any new issue identified on the list with the
 1073    series?)
 1074 </p>
 1075 </li>
 1076 <li>
 1077 <p>
 1078 Prepare <em>jch</em> branch, which is used to represent somewhere
 1079    between <em>master</em> and <em>pu</em> and often is slightly ahead of <em>next</em>.
 1080 </p>
 1081 <div class="literalblock">
 1082 <div class="content">
 1083 <pre><code>$ Meta/Reintegrate master..pu &gt;Meta/redo-jch.sh</code></pre>
 1084 </div></div>
 1085 <div class="literalblock">
 1086 <div class="content">
 1087 <pre><code>The result is a script that lists topics to be merged in order to
 1088 rebuild 'pu' as the input to Meta/Reintegrate script.  Remove
 1089 later topics that should not be in 'jch' yet.  Add a line that
 1090 consists of '### match next' before the name of the first topic
 1091 in the output that should be in 'jch' but not in 'next' yet.</code></pre>
 1092 </div></div>
 1093 </li>
 1094 <li>
 1095 <p>
 1096 Now we are ready to start merging topics to <em>next</em>.  For each
 1097    branch whose tip is not merged to <em>next</em>, one of three things can
 1098    happen:
 1099 </p>
 1100 </li>
 1101 <li>
 1102 <p>
 1103 The commits are all next-worthy; merge the topic to next;
 1104 </p>
 1105 </li>
 1106 <li>
 1107 <p>
 1108 The new parts are of mixed quality, but earlier ones are
 1109      next-worthy; merge the early parts to next;
 1110 </p>
 1111 </li>
 1112 <li>
 1113 <p>
 1114 Nothing is next-worthy; do not do anything.
 1115 </p>
 1116 <div class="literalblock">
 1117 <div class="content">
 1118 <pre><code>This step is aided with Meta/redo-jch.sh script created earlier.
 1119 If a topic that was already in 'next' gained a patch, the script
 1120 would list it as "ai/topic~1".  To include the new patch to the
 1121 updated 'next', drop the "~1" part; to keep it excluded, do not
 1122 touch the line.  If a topic that was not in 'next' should be
 1123 merged to 'next', add it at the end of the list.  Then:</code></pre>
 1124 </div></div>
 1125 <div class="literalblock">
 1126 <div class="content">
 1127 <pre><code>$ git checkout -B jch master
 1128 $ Meta/redo-jch.sh -c1</code></pre>
 1129 </div></div>
 1130 <div class="literalblock">
 1131 <div class="content">
 1132 <pre><code>to rebuild the 'jch' branch from scratch.  "-c1" tells the script
 1133 to stop merging at the first line that begins with '###'
 1134 (i.e. the "### match next" line you added earlier).</code></pre>
 1135 </div></div>
 1136 <div class="literalblock">
 1137 <div class="content">
 1138 <pre><code>At this point, build-test the result.  It may reveal semantic
 1139 conflicts (e.g. a topic renamed a variable, another added a new
 1140 reference to the variable under its old name), in which case
 1141 prepare an appropriate merge-fix first (see appendix), and
 1142 rebuild the 'jch' branch from scratch, starting at the tip of
 1143 'master'.</code></pre>
 1144 </div></div>
 1145 <div class="literalblock">
 1146 <div class="content">
 1147 <pre><code>Then do the same to 'next'</code></pre>
 1148 </div></div>
 1149 <div class="literalblock">
 1150 <div class="content">
 1151 <pre><code>$ git checkout next
 1152 $ sh Meta/redo-jch.sh -c1 -e</code></pre>
 1153 </div></div>
 1154 <div class="literalblock">
 1155 <div class="content">
 1156 <pre><code>The "-e" option allows the merge message that comes from the
 1157 history of the topic and the comments in the "What's cooking" to
 1158 be edited.  The resulting tree should match 'jch' as the same set
 1159 of topics are merged on 'master'; otherwise there is a mismerge.
 1160 Investigate why and do not proceed until the mismerge is found
 1161 and rectified.</code></pre>
 1162 </div></div>
 1163 <div class="literalblock">
 1164 <div class="content">
 1165 <pre><code>$ git diff jch next</code></pre>
 1166 </div></div>
 1167 <div class="literalblock">
 1168 <div class="content">
 1169 <pre><code>When all is well, clean up the redo-jch.sh script with</code></pre>
 1170 </div></div>
 1171 <div class="literalblock">
 1172 <div class="content">
 1173 <pre><code>$ sh Meta/redo-jch.sh -u</code></pre>
 1174 </div></div>
 1175 <div class="literalblock">
 1176 <div class="content">
 1177 <pre><code>This removes topics listed in the script that have already been
 1178 merged to 'master'.  This may lose '### match next' marker;
 1179 add it again to the appropriate place when it happens.</code></pre>
 1180 </div></div>
 1181 </li>
 1182 <li>
 1183 <p>
 1184 Rebuild <em>pu</em>.
 1185 </p>
 1186 <div class="literalblock">
 1187 <div class="content">
 1188 <pre><code>$ Meta/Reintegrate master..pu &gt;Meta/redo-pu.sh</code></pre>
 1189 </div></div>
 1190 <div class="literalblock">
 1191 <div class="content">
 1192 <pre><code>Edit the result by adding new topics that are not still in 'pu'
 1193 in the script.  Then</code></pre>
 1194 </div></div>
 1195 <div class="literalblock">
 1196 <div class="content">
 1197 <pre><code>$ git checkout -B pu jch
 1198 $ sh Meta/redo-pu.sh</code></pre>
 1199 </div></div>
 1200 <div class="literalblock">
 1201 <div class="content">
 1202 <pre><code>When all is well, clean up the redo-pu.sh script with</code></pre>
 1203 </div></div>
 1204 <div class="literalblock">
 1205 <div class="content">
 1206 <pre><code>$ sh Meta/redo-pu.sh -u</code></pre>
 1207 </div></div>
 1208 <div class="literalblock">
 1209 <div class="content">
 1210 <pre><code>Double check by running</code></pre>
 1211 </div></div>
 1212 <div class="literalblock">
 1213 <div class="content">
 1214 <pre><code>$ git branch --no-merged pu</code></pre>
 1215 </div></div>
 1216 <div class="literalblock">
 1217 <div class="content">
 1218 <pre><code>to see there is no unexpected leftover topics.</code></pre>
 1219 </div></div>
 1220 <div class="literalblock">
 1221 <div class="content">
 1222 <pre><code>At this point, build-test the result for semantic conflicts, and
 1223 if there are, prepare an appropriate merge-fix first (see
 1224 appendix), and rebuild the 'pu' branch from scratch, starting at
 1225 the tip of 'jch'.</code></pre>
 1226 </div></div>
 1227 </li>
 1228 <li>
 1229 <p>
 1230 Update "What&#8217;s cooking" message to review the updates to
 1231    existing topics, newly added topics and graduated topics.
 1232 </p>
 1233 <div class="literalblock">
 1234 <div class="content">
 1235 <pre><code>This step is helped with Meta/cook script.</code></pre>
 1236 </div></div>
 1237 <div class="literalblock">
 1238 <div class="content">
 1239 <pre><code>$ Meta/cook</code></pre>
 1240 </div></div>
 1241 <div class="literalblock">
 1242 <div class="content">
 1243 <pre><code>This script inspects the history between master..pu, finds tips
 1244 of topic branches, compares what it found with the current
 1245 contents in Meta/whats-cooking.txt, and updates that file.
 1246 Topics not listed in the file but are found in master..pu are
 1247 added to the "New topics" section, topics listed in the file that
 1248 are no longer found in master..pu are moved to the "Graduated to
 1249 master" section, and topics whose commits changed their states
 1250 (e.g. used to be only in 'pu', now merged to 'next') are updated
 1251 with change markers "&lt;&lt;" and "&gt;&gt;".</code></pre>
 1252 </div></div>
 1253 <div class="literalblock">
 1254 <div class="content">
 1255 <pre><code>Look for lines enclosed in "&lt;&lt;" and "&gt;&gt;"; they hold contents from
 1256 old file that are replaced by this integration round.  After
 1257 verifying them, remove the old part.  Review the description for
 1258 each topic and update its doneness and plan as needed.  To review
 1259 the updated plan, run</code></pre>
 1260 </div></div>
 1261 <div class="literalblock">
 1262 <div class="content">
 1263 <pre><code>$ Meta/cook -w</code></pre>
 1264 </div></div>
 1265 <div class="literalblock">
 1266 <div class="content">
 1267 <pre><code>which will pick up comments given to the topics, such as "Will
 1268 merge to 'next'", etc. (see Meta/cook script to learn what kind
 1269 of phrases are supported).</code></pre>
 1270 </div></div>
 1271 </li>
 1272 <li>
 1273 <p>
 1274 Compile, test and install all four (five) integration branches;
 1275    Meta/Dothem script may aid this step.
 1276 </p>
 1277 </li>
 1278 <li>
 1279 <p>
 1280 Format documentation if the <em>master</em> branch was updated;
 1281    Meta/dodoc.sh script may aid this step.
 1282 </p>
 1283 </li>
 1284 <li>
 1285 <p>
 1286 Push the integration branches out to public places; Meta/pushall
 1287    script may aid this step.
 1288 </p>
 1289 </li>
 1290 </ul></div>
 1291 </div>
 1292 </div>
 1293 <div class="sect1">
 1294 <h2 id="_observations">Observations</h2>
 1295 <div class="sectionbody">
 1296 <div class="paragraph"><p>Some observations to be made.</p></div>
 1297 <div class="ulist"><ul>
 1298 <li>
 1299 <p>
 1300 Each topic is tested individually, and also together with other
 1301    topics cooking first in <em>pu</em>, then in <em>jch</em> and then in <em>next</em>.
 1302    Until it matures, no part of it is merged to <em>master</em>.
 1303 </p>
 1304 </li>
 1305 <li>
 1306 <p>
 1307 A topic already in <em>next</em> can get fixes while still in
 1308    <em>next</em>.  Such a topic will have many merges to <em>next</em> (in
 1309    other words, "git log --first-parent next" will show many
 1310    "Merge branch <em>ai/topic</em> to next" for the same topic.
 1311 </p>
 1312 </li>
 1313 <li>
 1314 <p>
 1315 An unobvious fix for <em>maint</em> is cooked in <em>next</em> and then
 1316    merged to <em>master</em> to make extra sure it is Ok and then
 1317    merged to <em>maint</em>.
 1318 </p>
 1319 </li>
 1320 <li>
 1321 <p>
 1322 Even when <em>next</em> becomes empty (in other words, all topics
 1323    prove stable and are merged to <em>master</em> and "git diff master
 1324    next" shows empty), it has tons of merge commits that will
 1325    never be in <em>master</em>.
 1326 </p>
 1327 </li>
 1328 <li>
 1329 <p>
 1330 In principle, "git log --first-parent master..next" should
 1331    show nothing but merges (in practice, there are fixup commits
 1332    and reverts that are not merges).
 1333 </p>
 1334 </li>
 1335 <li>
 1336 <p>
 1337 Commits near the tip of a topic branch that are not in <em>next</em>
 1338    are fair game to be discarded, replaced or rewritten.
 1339    Commits already merged to <em>next</em> will not be.
 1340 </p>
 1341 </li>
 1342 <li>
 1343 <p>
 1344 Being in the <em>next</em> branch is not a guarantee for a topic to
 1345    be included in the next feature release.  Being in the
 1346    <em>master</em> branch typically is.
 1347 </p>
 1348 </li>
 1349 </ul></div>
 1350 </div>
 1351 </div>
 1352 <div class="sect1">
 1353 <h2 id="_appendix">Appendix</h2>
 1354 <div class="sectionbody">
 1355 <div class="sect2">
 1356 <h3 id="_preparing_a_merge_fix">Preparing a "merge-fix"</h3>
 1357 <div class="paragraph"><p>A merge of two topics may not textually conflict but still have
 1358 conflict at the semantic level. A classic example is for one topic
 1359 to rename an variable and all its uses, while another topic adds a
 1360 new use of the variable under its old name. When these two topics
 1361 are merged together, the reference to the variable newly added by
 1362 the latter topic will still use the old name in the result.</p></div>
 1363 <div class="paragraph"><p>The Meta/Reintegrate script that is used by redo-jch and redo-pu
 1364 scripts implements a crude but usable way to work this issue around.
 1365 When the script merges branch $X, it checks if "refs/merge-fix/$X"
 1366 exists, and if so, the effect of it is squashed into the result of
 1367 the mechanical merge.  In other words,</p></div>
 1368 <div class="literalblock">
 1369 <div class="content">
 1370 <pre><code>$ echo $X | Meta/Reintegrate</code></pre>
 1371 </div></div>
 1372 <div class="paragraph"><p>is roughly equivalent to this sequence:</p></div>
 1373 <div class="literalblock">
 1374 <div class="content">
 1375 <pre><code>$ git merge --rerere-autoupdate $X
 1376 $ git commit
 1377 $ git cherry-pick -n refs/merge-fix/$X
 1378 $ git commit --amend</code></pre>
 1379 </div></div>
 1380 <div class="paragraph"><p>The goal of this "prepare a merge-fix" step is to come up with a
 1381 commit that can be squashed into a result of mechanical merge to
 1382 correct semantic conflicts.</p></div>
 1383 <div class="paragraph"><p>After finding that the result of merging branch "ai/topic" to an
 1384 integration branch had such a semantic conflict, say pu~4, check the
 1385 problematic merge out on a detached HEAD, edit the working tree to
 1386 fix the semantic conflict, and make a separate commit to record the
 1387 fix-up:</p></div>
 1388 <div class="literalblock">
 1389 <div class="content">
 1390 <pre><code>$ git checkout pu~4
 1391 $ git show -s --pretty=%s ;# double check
 1392 Merge branch 'ai/topic' to pu
 1393 $ edit
 1394 $ git commit -m 'merge-fix/ai/topic' -a</code></pre>
 1395 </div></div>
 1396 <div class="paragraph"><p>Then make a reference "refs/merge-fix/ai/topic" to point at this
 1397 result:</p></div>
 1398 <div class="literalblock">
 1399 <div class="content">
 1400 <pre><code>$ git update-ref refs/merge-fix/ai/topic HEAD</code></pre>
 1401 </div></div>
 1402 <div class="paragraph"><p>Then double check the result by asking Meta/Reintegrate to redo the
 1403 merge:</p></div>
 1404 <div class="literalblock">
 1405 <div class="content">
 1406 <pre><code>$ git checkout pu~5 ;# the parent of the problem merge
 1407 $ echo ai/topic | Meta/Reintegrate
 1408 $ git diff pu~4</code></pre>
 1409 </div></div>
 1410 <div class="paragraph"><p>This time, because you prepared refs/merge-fix/ai/topic, the
 1411 resulting merge should have been tweaked to include the fix for the
 1412 semantic conflict.</p></div>
 1413 <div class="paragraph"><p>Note that this assumes that the order in which conflicting branches
 1414 are merged does not change.  If the reason why merging ai/topic
 1415 branch needs this merge-fix is because another branch merged earlier
 1416 to the integration branch changed the underlying assumption ai/topic
 1417 branch made (e.g. ai/topic branch added a site to refer to a
 1418 variable, while the other branch renamed that variable and adjusted
 1419 existing use sites), and if you changed redo-jch (or redo-pu) script
 1420 to merge ai/topic branch before the other branch, then the above
 1421 merge-fix should not be applied while merging ai/topic, but should
 1422 instead be applied while merging the other branch.  You would need
 1423 to move the fix to apply to the other branch, perhaps like this:</p></div>
 1424 <div class="literalblock">
 1425 <div class="content">
 1426 <pre><code>$ mf=refs/merge-fix
 1427 $ git update-ref $mf/$the_other_branch $mf/ai/topic
 1428 $ git update-ref -d $mf/ai/topic</code></pre>
 1429 </div></div>
 1430 </div>
 1431 </div>
 1432 </div>
 1433 </div>
 1434 <div id="footnotes"><hr /></div>
 1435 <div id="footer">
 1436 <div id="footer-text">
 1437 Last updated
 1438  2018-12-15 13:25:23 JST
 1439 </div>
 1440 </div>
 1441 </body>
 1442 </html>