"Fossies" - the Fresh Open Source Software Archive

Member "gitcvs-migration.html" (15 Dec 2018, 27145 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>gitcvs-migration(7)</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="manpage">
  736 <div id="header">
  737 <h1>
  738 gitcvs-migration(7) Manual Page
  739 </h1>
  740 <h2>NAME</h2>
  741 <div class="sectionbody">
  742 <p>gitcvs-migration -
  743    Git for CVS users
  744 </p>
  745 </div>
  746 </div>
  747 <div id="content">
  748 <div class="sect1">
  749 <h2 id="_synopsis">SYNOPSIS</h2>
  750 <div class="sectionbody">
  751 <div class="verseblock">
  752 <pre class="content"><em>git cvsimport</em> *</pre>
  753 <div class="attribution">
  754 </div></div>
  755 </div>
  756 </div>
  757 <div class="sect1">
  758 <h2 id="_description">DESCRIPTION</h2>
  759 <div class="sectionbody">
  760 <div class="paragraph"><p>Git differs from CVS in that every working tree contains a repository with
  761 a full copy of the project history, and no repository is inherently more
  762 important than any other.  However, you can emulate the CVS model by
  763 designating a single shared repository which people can synchronize with;
  764 this document explains how to do that.</p></div>
  765 <div class="paragraph"><p>Some basic familiarity with Git is required. Having gone through
  766 <a href="gittutorial.html">gittutorial(7)</a> and
  767 <a href="gitglossary.html">gitglossary(7)</a> should be sufficient.</p></div>
  768 </div>
  769 </div>
  770 <div class="sect1">
  771 <h2 id="_developing_against_a_shared_repository">Developing against a shared repository</h2>
  772 <div class="sectionbody">
  773 <div class="paragraph"><p>Suppose a shared repository is set up in /pub/repo.git on the host
  774 foo.com.  Then as an individual committer you can clone the shared
  775 repository over ssh with:</p></div>
  776 <div class="listingblock">
  777 <div class="content">
  778 <pre><code>$ git clone foo.com:/pub/repo.git/ my-project
  779 $ cd my-project</code></pre>
  780 </div></div>
  781 <div class="paragraph"><p>and hack away.  The equivalent of <em>cvs update</em> is</p></div>
  782 <div class="listingblock">
  783 <div class="content">
  784 <pre><code>$ git pull origin</code></pre>
  785 </div></div>
  786 <div class="paragraph"><p>which merges in any work that others might have done since the clone
  787 operation.  If there are uncommitted changes in your working tree, commit
  788 them first before running git pull.</p></div>
  789 <div class="admonitionblock">
  790 <table><tr>
  791 <td class="icon">
  792 <div class="title">Note</div>
  793 </td>
  794 <td class="content">
  795 <div class="paragraph"><p>The <em>pull</em> command knows where to get updates from because of certain
  796 configuration variables that were set by the first <em>git clone</em>
  797 command; see <code>git config -l</code> and the <a href="git-config.html">git-config(1)</a> man
  798 page for details.</p></div>
  799 </td>
  800 </tr></table>
  801 </div>
  802 <div class="paragraph"><p>You can update the shared repository with your changes by first committing
  803 your changes, and then using the <em>git push</em> command:</p></div>
  804 <div class="listingblock">
  805 <div class="content">
  806 <pre><code>$ git push origin master</code></pre>
  807 </div></div>
  808 <div class="paragraph"><p>to "push" those commits to the shared repository.  If someone else has
  809 updated the repository more recently, <em>git push</em>, like <em>cvs commit</em>, will
  810 complain, in which case you must pull any changes before attempting the
  811 push again.</p></div>
  812 <div class="paragraph"><p>In the <em>git push</em> command above we specify the name of the remote branch
  813 to update (<code>master</code>).  If we leave that out, <em>git push</em> tries to update
  814 any branches in the remote repository that have the same name as a branch
  815 in the local repository.  So the last <em>push</em> can be done with either of:</p></div>
  816 <div class="listingblock">
  817 <div class="content">
  818 <pre><code>$ git push origin
  819 $ git push foo.com:/pub/project.git/</code></pre>
  820 </div></div>
  821 <div class="paragraph"><p>as long as the shared repository does not have any branches
  822 other than <code>master</code>.</p></div>
  823 </div>
  824 </div>
  825 <div class="sect1">
  826 <h2 id="_setting_up_a_shared_repository">Setting Up a Shared Repository</h2>
  827 <div class="sectionbody">
  828 <div class="paragraph"><p>We assume you have already created a Git repository for your project,
  829 possibly created from scratch or from a tarball (see
  830 <a href="gittutorial.html">gittutorial(7)</a>), or imported from an already existing CVS
  831 repository (see the next section).</p></div>
  832 <div class="paragraph"><p>Assume your existing repo is at /home/alice/myproject.  Create a new "bare"
  833 repository (a repository without a working tree) and fetch your project into
  834 it:</p></div>
  835 <div class="listingblock">
  836 <div class="content">
  837 <pre><code>$ mkdir /pub/my-repo.git
  838 $ cd /pub/my-repo.git
  839 $ git --bare init --shared
  840 $ git --bare fetch /home/alice/myproject master:master</code></pre>
  841 </div></div>
  842 <div class="paragraph"><p>Next, give every team member read/write access to this repository.  One
  843 easy way to do this is to give all the team members ssh access to the
  844 machine where the repository is hosted.  If you don&#8217;t want to give them a
  845 full shell on the machine, there is a restricted shell which only allows
  846 users to do Git pushes and pulls; see <a href="git-shell.html">git-shell(1)</a>.</p></div>
  847 <div class="paragraph"><p>Put all the committers in the same group, and make the repository
  848 writable by that group:</p></div>
  849 <div class="listingblock">
  850 <div class="content">
  851 <pre><code>$ chgrp -R $group /pub/my-repo.git</code></pre>
  852 </div></div>
  853 <div class="paragraph"><p>Make sure committers have a umask of at most 027, so that the directories
  854 they create are writable and searchable by other group members.</p></div>
  855 </div>
  856 </div>
  857 <div class="sect1">
  858 <h2 id="_importing_a_cvs_archive">Importing a CVS archive</h2>
  859 <div class="sectionbody">
  860 <div class="admonitionblock">
  861 <table><tr>
  862 <td class="icon">
  863 <div class="title">Note</div>
  864 </td>
  865 <td class="content">These instructions use the <code>git-cvsimport</code> script which ships with
  866 git, but other importers may provide better results. See the note in
  867 <a href="git-cvsimport.html">git-cvsimport(1)</a> for other options.</td>
  868 </tr></table>
  869 </div>
  870 <div class="paragraph"><p>First, install version 2.1 or higher of cvsps from
  871 <a href="https://github.com/andreyvit/cvsps">https://github.com/andreyvit/cvsps</a> and make
  872 sure it is in your path.  Then cd to a checked out CVS working directory
  873 of the project you are interested in and run <a href="git-cvsimport.html">git-cvsimport(1)</a>:</p></div>
  874 <div class="listingblock">
  875 <div class="content">
  876 <pre><code>$ git cvsimport -C &lt;destination&gt; &lt;module&gt;</code></pre>
  877 </div></div>
  878 <div class="paragraph"><p>This puts a Git archive of the named CVS module in the directory
  879 &lt;destination&gt;, which will be created if necessary.</p></div>
  880 <div class="paragraph"><p>The import checks out from CVS every revision of every file.  Reportedly
  881 cvsimport can average some twenty revisions per second, so for a
  882 medium-sized project this should not take more than a couple of minutes.
  883 Larger projects or remote repositories may take longer.</p></div>
  884 <div class="paragraph"><p>The main trunk is stored in the Git branch named <code>origin</code>, and additional
  885 CVS branches are stored in Git branches with the same names.  The most
  886 recent version of the main trunk is also left checked out on the <code>master</code>
  887 branch, so you can start adding your own changes right away.</p></div>
  888 <div class="paragraph"><p>The import is incremental, so if you call it again next month it will
  889 fetch any CVS updates that have been made in the meantime.  For this to
  890 work, you must not modify the imported branches; instead, create new
  891 branches for your own changes, and merge in the imported branches as
  892 necessary.</p></div>
  893 <div class="paragraph"><p>If you want a shared repository, you will need to make a bare clone
  894 of the imported directory, as described above. Then treat the imported
  895 directory as another development clone for purposes of merging
  896 incremental imports.</p></div>
  897 </div>
  898 </div>
  899 <div class="sect1">
  900 <h2 id="_advanced_shared_repository_management">Advanced Shared Repository Management</h2>
  901 <div class="sectionbody">
  902 <div class="paragraph"><p>Git allows you to specify scripts called "hooks" to be run at certain
  903 points.  You can use these, for example, to send all commits to the shared
  904 repository to a mailing list.  See <a href="githooks.html">githooks(5)</a>.</p></div>
  905 <div class="paragraph"><p>You can enforce finer grained permissions using update hooks.  See
  906 <a href="howto/update-hook-example.html">Controlling access to branches using
  907 update hooks</a>.</p></div>
  908 </div>
  909 </div>
  910 <div class="sect1">
  911 <h2 id="_providing_cvs_access_to_a_git_repository">Providing CVS Access to a Git Repository</h2>
  912 <div class="sectionbody">
  913 <div class="paragraph"><p>It is also possible to provide true CVS access to a Git repository, so
  914 that developers can still use CVS; see <a href="git-cvsserver.html">git-cvsserver(1)</a> for
  915 details.</p></div>
  916 </div>
  917 </div>
  918 <div class="sect1">
  919 <h2 id="_alternative_development_models">Alternative Development Models</h2>
  920 <div class="sectionbody">
  921 <div class="paragraph"><p>CVS users are accustomed to giving a group of developers commit access to
  922 a common repository.  As we&#8217;ve seen, this is also possible with Git.
  923 However, the distributed nature of Git allows other development models,
  924 and you may want to first consider whether one of them might be a better
  925 fit for your project.</p></div>
  926 <div class="paragraph"><p>For example, you can choose a single person to maintain the project&#8217;s
  927 primary public repository.  Other developers then clone this repository
  928 and each work in their own clone.  When they have a series of changes that
  929 they&#8217;re happy with, they ask the maintainer to pull from the branch
  930 containing the changes.  The maintainer reviews their changes and pulls
  931 them into the primary repository, which other developers pull from as
  932 necessary to stay coordinated.  The Linux kernel and other projects use
  933 variants of this model.</p></div>
  934 <div class="paragraph"><p>With a small group, developers may just pull changes from each other&#8217;s
  935 repositories without the need for a central maintainer.</p></div>
  936 </div>
  937 </div>
  938 <div class="sect1">
  939 <h2 id="_see_also">SEE ALSO</h2>
  940 <div class="sectionbody">
  941 <div class="paragraph"><p><a href="gittutorial.html">gittutorial(7)</a>,
  942 <a href="gittutorial-2.html">gittutorial-2(7)</a>,
  943 <a href="gitcore-tutorial.html">gitcore-tutorial(7)</a>,
  944 <a href="gitglossary.html">gitglossary(7)</a>,
  945 <a href="giteveryday.html">giteveryday(7)</a>,
  946 <a href="user-manual.html">The Git User&#8217;s Manual</a></p></div>
  947 </div>
  948 </div>
  949 <div class="sect1">
  950 <h2 id="_git">GIT</h2>
  951 <div class="sectionbody">
  952 <div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
  953 </div>
  954 </div>
  955 </div>
  956 <div id="footnotes"><hr /></div>
  957 <div id="footer">
  958 <div id="footer-text">
  959 Last updated
  960  2018-12-10 16:43:18 JST
  961 </div>
  962 </div>
  963 </body>
  964 </html>