Package: git-man
Version: 1:2.45.2-1
Severity: minor
Tags: patch

   * What led up to the situation?

     Checking for defects with

[test-][gn]roff -mandoc -t -K utf8 -rF0 -rHY=0 -ww -b -z < "man page"

  [test-groff is a script in the repository for "groff"] (local copy and
"troff" slightly changed by me).

   * What was the outcome of this action?

Output from "test-groff  -mandoc -t -K utf8 -rF0 -rHY=0 -ww -b -z ":

troff: backtrace: file '<stdin>':2110
troff:<stdin>:2110: warning: [page 21, 7.3i]: cannot break line

Output from "test-nroff  -mandoc -t -K utf8 -rF0 -rHY=0 -ww -b -z ":

troff: backtrace: file '<stdin>':2110
troff:<stdin>:2110: warning: [page 22, line 47]: cannot break line


   * What outcome did you expect instead?

     No output (no warnings).

-.-

  General remarks and further material, if a diff-file exist, are in the
attachments.


-- System Information:
Debian Release: trixie/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 6.10.9-amd64 (SMP w/2 CPU threads; PREEMPT)
Locale: LANG=is_IS.iso88591, LC_CTYPE=is_IS.iso88591 (charmap=ISO-8859-1), 
LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: sysvinit (via /sbin/init)

-- no debconf information
  Any program (person), that produces man pages, should check its content for
defects by using

groff -mandoc -t -ww -b -z [ -K utf8 | k ] <man page>

  The same goes for man pages that are used as an input.

  For a style guide use

  mandoc -T lint

-.-

  So any 'generator' should check its products with the above mentioned
'groff', 'mandoc',  and additionally with 'nroff ...'.

  This is just a simple quality control measure.

  The 'generator' may have to be corrected to get a better man page,
the source file may, and any additional file may.

  Common defects:

  Input text line longer than 80 bytes.

  Not removing trailing spaces (in in- and output).
  The reason for these trailing spaces should be found and eliminated.

  Not beginning each input sentence on a new line.
Lines should thus be shorter.

  See man-pages(7), item 'semantic newline'.

-.-

The difference between the formatted outputs can be seen with:

  nroff -mandoc <file1> > <out1>
  nroff -mandoc <file2> > <out2>
  diff -u <out1> <out2>

and for groff, using

"printf '%s\n%s\n' '.kern 0' '.ss 12 0' | groff -mandoc -Z - "

instead of \'nroff -mandoc\'

  Add the option \'-t\', if the file contains a table.

  Read the output of \'diff -u\' with \'less -R\' or similar.

-.-.

  If \'man\' (man-db) is used to check the manual for warnings,
the following must be set:

  The option "-warnings=w"

  The environmental variable:

export MAN_KEEP_STDERR=yes (or any non-empty value)

  or

  (produce only warnings):

export MANROFFOPT="-ww -b -z"

export MAN_KEEP_STDERR=yes (or any non-empty value)

-.-.

Output from "mandoc -T lint gitcore-tutorial.7": (possibly shortened list)

mandoc: gitcore-tutorial.7:33:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:36:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:37:101: STYLE: input text line longer than 80 bytes: 
This tutorial explai...
mandoc: gitcore-tutorial.7:39:202: STYLE: input text line longer than 80 bytes: 
If you just need to ...
mandoc: gitcore-tutorial.7:41:114: STYLE: input text line longer than 80 bytes: 
However, an understa...
mandoc: gitcore-tutorial.7:43:257: STYLE: input text line longer than 80 bytes: 
The core Git is ofte...
mandoc: gitcore-tutorial.7:45:436: STYLE: input text line longer than 80 bytes: 
Back when this docum...
mandoc: gitcore-tutorial.7:55:2: WARNING: skipping paragraph macro: br before sp
mandoc: gitcore-tutorial.7:57:2: WARNING: skipping paragraph macro: br after br
mandoc: gitcore-tutorial.7:59:95: STYLE: input text line longer than 80 bytes: 
Deeper technical det...
mandoc: gitcore-tutorial.7:63:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:64:309: STYLE: input text line longer than 80 bytes: 
Creating a new Git r...
mandoc: gitcore-tutorial.7:66:291: STYLE: input text line longer than 80 bytes: 
For our first exampl...
mandoc: gitcore-tutorial.7:94:344: STYLE: input text line longer than 80 bytes: 
which is just Git\(c...
mandoc: gitcore-tutorial.7:115:100: STYLE: input text line longer than 80 
bytes: link points to doesn...
mandoc: gitcore-tutorial.7:146:362: STYLE: input text line longer than 80 
bytes: In particular, the \...
mandoc: gitcore-tutorial.7:148:338: STYLE: input text line longer than 80 
bytes: One note: the specia...
mandoc: gitcore-tutorial.7:150:233: STYLE: input text line longer than 80 
bytes: However, this is onl...
mandoc: gitcore-tutorial.7:160:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:162:2: WARNING: skipping paragraph macro: br after br
mandoc: gitcore-tutorial.7:164:478: STYLE: input text line longer than 80 
bytes: An \fIobject\fR is i...
mandoc: gitcore-tutorial.7:176:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:178:2: WARNING: skipping paragraph macro: br after br
mandoc: gitcore-tutorial.7:180:106: STYLE: input text line longer than 80 
bytes: An advanced user may...
mandoc: gitcore-tutorial.7:184:153: STYLE: input text line longer than 80 
bytes: You have now created...
mandoc: gitcore-tutorial.7:186:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:187:124: STYLE: input text line longer than 80 
bytes: We\(cqll keep this s...
mandoc: gitcore-tutorial.7:189:180: STYLE: input text line longer than 80 
bytes: Start off with just ...
mandoc: gitcore-tutorial.7:203:162: STYLE: input text line longer than 80 
bytes: you have now created...
mandoc: gitcore-tutorial.7:230:461: STYLE: input text line longer than 80 
bytes: The first step is tr...
mandoc: gitcore-tutorial.7:247:218: STYLE: input text line longer than 80 
bytes: In fact, as you did ...
mandoc: gitcore-tutorial.7:274:109: STYLE: input text line longer than 80 
bytes: which correspond wit...
mandoc: gitcore-tutorial.7:276:148: STYLE: input text line longer than 80 
bytes: If you want to, you ...
mandoc: gitcore-tutorial.7:289:208: STYLE: input text line longer than 80 
bytes: where the \fB\-t\fR ...
mandoc: gitcore-tutorial.7:302:124: STYLE: input text line longer than 80 
bytes: which will print out...
mandoc: gitcore-tutorial.7:312:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:314:2: WARNING: skipping paragraph macro: br after br
mandoc: gitcore-tutorial.7:316:279: STYLE: input text line longer than 80 
bytes: Don\(cqt confuse tha...
mandoc: gitcore-tutorial.7:328:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:330:2: WARNING: skipping paragraph macro: br after br
mandoc: gitcore-tutorial.7:332:134: STYLE: input text line longer than 80 
bytes: The second example d...
mandoc: gitcore-tutorial.7:336:364: STYLE: input text line longer than 80 
bytes: Anyway, as we mentio...
mandoc: gitcore-tutorial.7:338:403: STYLE: input text line longer than 80 
bytes: Updating the index d...
mandoc: gitcore-tutorial.7:340:147: STYLE: input text line longer than 80 
bytes: However, since Git k...
mandoc: gitcore-tutorial.7:342:133: STYLE: input text line longer than 80 
bytes: In particular, let\(...
mandoc: gitcore-tutorial.7:355:182: STYLE: input text line longer than 80 
bytes: and you can now, sin...
mandoc: gitcore-tutorial.7:368:280: STYLE: input text line longer than 80 
bytes: Oops\&. That wasn\(c...
mandoc: gitcore-tutorial.7:370:118: STYLE: input text line longer than 80 
bytes: To make it readable,...
mandoc: gitcore-tutorial.7:390:82: STYLE: input text line longer than 80 bytes: 
i\&.e\&. the diff of...
mandoc: gitcore-tutorial.7:392:177: STYLE: input text line longer than 80 
bytes: In other words, \fIg...
mandoc: gitcore-tutorial.7:394:113: STYLE: input text line longer than 80 
bytes: A common shorthand f...
mandoc: gitcore-tutorial.7:414:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:415:375: STYLE: input text line longer than 80 
bytes: Now, we want to go t...
mandoc: gitcore-tutorial.7:417:408: STYLE: input text line longer than 80 
bytes: Creating a tree obje...
mandoc: gitcore-tutorial.7:430:131: STYLE: input text line longer than 80 
bytes: and this will just o...
mandoc: gitcore-tutorial.7:443:355: STYLE: input text line longer than 80 
bytes: which is another inc...
mandoc: gitcore-tutorial.7:445:341: STYLE: input text line longer than 80 
bytes: However \(em normall...
mandoc: gitcore-tutorial.7:449:322: STYLE: input text line longer than 80 
bytes: And this is where we...
mandoc: gitcore-tutorial.7:464:213: STYLE: input text line longer than 80 
bytes: In this case this cr...
mandoc: gitcore-tutorial.7:466:261: STYLE: input text line longer than 80 
bytes: Again, normally you\...
mandoc: gitcore-tutorial.7:468:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:469:200: STYLE: input text line longer than 80 
bytes: Remember how we did ...
mandoc: gitcore-tutorial.7:471:403: STYLE: input text line longer than 80 
bytes: Further, remember ho...
mandoc: gitcore-tutorial.7:473:314: STYLE: input text line longer than 80 
bytes: As before, if we do ...
mandoc: gitcore-tutorial.7:475:407: STYLE: input text line longer than 80 
bytes: Unlike \fIgit diff\-...
mandoc: gitcore-tutorial.7:490:346: STYLE: input text line longer than 80 
bytes: (where \fB\-p\fR has...
mandoc: gitcore-tutorial.7:507:431: STYLE: input text line longer than 80 
bytes: In other words, \fIg...
mandoc: gitcore-tutorial.7:517:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:519:2: WARNING: skipping paragraph macro: br after br
mandoc: gitcore-tutorial.7:523:290: STYLE: input text line longer than 80 
bytes: This is not hard to ...
mandoc: gitcore-tutorial.7:527:377: STYLE: input text line longer than 80 
bytes: However, our next st...
mandoc: gitcore-tutorial.7:540:103: STYLE: input text line longer than 80 
bytes: (note how we didn\(c...
mandoc: gitcore-tutorial.7:542:461: STYLE: input text line longer than 80 
bytes: Note what happens to...
mandoc: gitcore-tutorial.7:544:426: STYLE: input text line longer than 80 
bytes: Now, since we\(cqve ...
mandoc: gitcore-tutorial.7:557:106: STYLE: input text line longer than 80 
bytes: which starts an edit...
mandoc: gitcore-tutorial.7:559:391: STYLE: input text line longer than 80 
bytes: Write whatever messa...
mandoc: gitcore-tutorial.7:561:322: STYLE: input text line longer than 80 
bytes: You\(cqve now made y...
mandoc: gitcore-tutorial.7:563:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:564:197: STYLE: input text line longer than 80 
bytes: While creating chang...
mandoc: gitcore-tutorial.7:579:149: STYLE: input text line longer than 80 
bytes: (again, \fB\-p\fR me...
mandoc: gitcore-tutorial.7:589:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:591:2: WARNING: skipping paragraph macro: br after br
mandoc: gitcore-tutorial.7:593:106: STYLE: input text line longer than 80 
bytes: Here is an ASCII art...
mandoc: gitcore-tutorial.7:634:343: STYLE: input text line longer than 80 
bytes: More interestingly, ...
mandoc: gitcore-tutorial.7:636:393: STYLE: input text line longer than 80 
bytes: In fact, together wi...
mandoc: gitcore-tutorial.7:638:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:641:210: STYLE: input text line longer than 80 
bytes: A "light" tag is tec...
mandoc: gitcore-tutorial.7:654:201: STYLE: input text line longer than 80 
bytes: which just writes th...
mandoc: gitcore-tutorial.7:667:235: STYLE: input text line longer than 80 
bytes: to diff your current...
mandoc: gitcore-tutorial.7:669:329: STYLE: input text line longer than 80 
bytes: An "annotated tag" i...
mandoc: gitcore-tutorial.7:682:225: STYLE: input text line longer than 80 
bytes: which will sign the ...
mandoc: gitcore-tutorial.7:684:310: STYLE: input text line longer than 80 
bytes: You normally only do...
mandoc: gitcore-tutorial.7:686:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:687:348: STYLE: input text line longer than 80 
bytes: Git repositories are...
mandoc: gitcore-tutorial.7:697:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:699:2: WARNING: skipping paragraph macro: br after br
mandoc: gitcore-tutorial.7:701:403: STYLE: input text line longer than 80 
bytes: You can tell Git to ...
mandoc: gitcore-tutorial.7:715:139: STYLE: input text line longer than 80 
bytes: if you grow bored wi...
mandoc: gitcore-tutorial.7:727:118: STYLE: input text line longer than 80 
bytes: and it will be gone\...
mandoc: gitcore-tutorial.7:740:160: STYLE: input text line longer than 80 
bytes: command, but if all ...
mandoc: gitcore-tutorial.7:743:230: STYLE: input text line longer than 80 
bytes: Note that when you\(...
mandoc: gitcore-tutorial.7:760:185: STYLE: input text line longer than 80 
bytes: Note that the second...
mandoc: gitcore-tutorial.7:762:364: STYLE: input text line longer than 80 
bytes: When copying a remot...
mandoc: gitcore-tutorial.7:776:397: STYLE: input text line longer than 80 
bytes: which will force a t...
mandoc: gitcore-tutorial.7:791:402: STYLE: input text line longer than 80 
bytes: and in fact a lot of...
mandoc: gitcore-tutorial.7:793:299: STYLE: input text line longer than 80 
bytes: Many (most?) public ...
mandoc: gitcore-tutorial.7:795:290: STYLE: input text line longer than 80 
bytes: To create your own l...
mandoc: gitcore-tutorial.7:823:247: STYLE: input text line longer than 80 
bytes: to populate the inde...
mandoc: gitcore-tutorial.7:836:391: STYLE: input text line longer than 80 
bytes: where the \fB\-u\fR ...
mandoc: gitcore-tutorial.7:855:99: STYLE: input text line longer than 80 bytes: 
You have now success...
mandoc: gitcore-tutorial.7:857:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:858:242: STYLE: input text line longer than 80 
bytes: Branches in Git are ...
mandoc: gitcore-tutorial.7:860:393: STYLE: input text line longer than 80 
bytes: You can at any time ...
mandoc: gitcore-tutorial.7:862:197: STYLE: input text line longer than 80 
bytes: To show that as an e...
mandoc: gitcore-tutorial.7:875:86: STYLE: input text line longer than 80 bytes: 
will create a new br...
mandoc: gitcore-tutorial.7:885:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:887:2: WARNING: skipping paragraph macro: br after br
mandoc: gitcore-tutorial.7:889:273: STYLE: input text line longer than 80 
bytes: If you make the deci...
mandoc: gitcore-tutorial.7:902:112: STYLE: input text line longer than 80 
bytes: and it would create ...
mandoc: gitcore-tutorial.7:919:105: STYLE: input text line longer than 80 
bytes: (or any other branch...
mandoc: gitcore-tutorial.7:932:89: STYLE: input text line longer than 80 bytes: 
will tell you where ...
mandoc: gitcore-tutorial.7:945:160: STYLE: input text line longer than 80 
bytes: which used to be not...
mandoc: gitcore-tutorial.7:947:135: STYLE: input text line longer than 80 
bytes: Sometimes you may wi...
mandoc: gitcore-tutorial.7:960:265: STYLE: input text line longer than 80 
bytes: which will simply \f...
mandoc: gitcore-tutorial.7:962:2: WARNING: skipping paragraph macro: sp after SH
mandoc: gitcore-tutorial.7:963:330: STYLE: input text line longer than 80 
bytes: One of the ideas of ...
mandoc: gitcore-tutorial.7:978:424: STYLE: input text line longer than 80 
bytes: Here, we just added ...
mandoc: gitcore-tutorial.7:980:212: STYLE: input text line longer than 80 
bytes: Now, to make it a bi...
mandoc: gitcore-tutorial.7:993:222: STYLE: input text line longer than 80 
bytes: Here, take a moment ...
mandoc: gitcore-tutorial.7:1010:187: STYLE: input text line longer than 80 
bytes: Now, you\(cqve got t...
mandoc: gitcore-tutorial.7:1023:236: STYLE: input text line longer than 80 
bytes: will show you graphi...
mandoc: gitcore-tutorial.7:1025:360: STYLE: input text line longer than 80 
bytes: Anyway, let\(cqs exi...
mandoc: gitcore-tutorial.7:1038:112: STYLE: input text line longer than 80 
bytes: where the first argu...
mandoc: gitcore-tutorial.7:1040:294: STYLE: input text line longer than 80 
bytes: Now, in this case we...
mandoc: gitcore-tutorial.7:1055:94: STYLE: input text line longer than 80 
bytes: It tells you that it...
mandoc: gitcore-tutorial.7:1057:313: STYLE: input text line longer than 80 
bytes: Not to worry\&. It l...
mandoc: gitcore-tutorial.7:1086:194: STYLE: input text line longer than 80 
bytes: which will very loud...
mandoc: gitcore-tutorial.7:1088:411: STYLE: input text line longer than 80 
bytes: After you\(cqre done...
mandoc: gitcore-tutorial.7:1090:112: STYLE: input text line longer than 80 
bytes: Another useful tool,...
mandoc: gitcore-tutorial.7:1109:1118: STYLE: input text line longer than 80 
bytes: The first two lines ...
mandoc: gitcore-tutorial.7:1119:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:1121:2: WARNING: skipping paragraph macro: br after 
br
mandoc: gitcore-tutorial.7:1123:251: STYLE: input text line longer than 80 
bytes: Without the \fI\-\-m...
mandoc: gitcore-tutorial.7:1135:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:1137:2: WARNING: skipping paragraph macro: br after 
br
mandoc: gitcore-tutorial.7:1139:252: STYLE: input text line longer than 80 
bytes: If there were more c...
mandoc: gitcore-tutorial.7:1143:276: STYLE: input text line longer than 80 
bytes: Now, let\(cqs preten...
mandoc: gitcore-tutorial.7:1157:84: STYLE: input text line longer than 80 
bytes: This outputs somethi...
mandoc: gitcore-tutorial.7:1174:312: STYLE: input text line longer than 80 
bytes: Because your branch ...
mandoc: gitcore-tutorial.7:1176:130: STYLE: input text line longer than 80 
bytes: You can run \fBgitk ...
mandoc: gitcore-tutorial.7:1193:2: WARNING: skipping paragraph macro: sp after 
SH
mandoc: gitcore-tutorial.7:1194:392: STYLE: input text line longer than 80 
bytes: It\(cqs usually much...
mandoc: gitcore-tutorial.7:1209:84: STYLE: input text line longer than 80 
bytes: One of the following...
mandoc: gitcore-tutorial.7:1218:112: STYLE: input text line longer than 80 
bytes: This transport can b...
mandoc: gitcore-tutorial.7:1220:258: STYLE: input text line longer than 80 
bytes: to the remote machin...
mandoc: gitcore-tutorial.7:1229:92: STYLE: input text line longer than 80 
bytes: to run both ends on ...
mandoc: gitcore-tutorial.7:1237:185: STYLE: input text line longer than 80 
bytes: This transport was d...
mandoc: gitcore-tutorial.7:1244:142: STYLE: input text line longer than 80 
bytes: Downloader from http...
mandoc: gitcore-tutorial.7:1248:264: STYLE: input text line longer than 80 
bytes: using the object nam...
mandoc: gitcore-tutorial.7:1259:91: STYLE: input text line longer than 80 
bytes: Once you fetch from ...
mandoc: gitcore-tutorial.7:1261:147: STYLE: input text line longer than 80 
bytes: However \(em it\(cqs...
mandoc: gitcore-tutorial.7:1284:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:1286:2: WARNING: skipping paragraph macro: br after 
br
mandoc: gitcore-tutorial.7:1288:549: STYLE: input text line longer than 80 
bytes: You could do without...
mandoc: gitcore-tutorial.7:1292:199: STYLE: input text line longer than 80 
bytes: It is likely that yo...
mandoc: gitcore-tutorial.7:1355:2: WARNING: skipping paragraph macro: sp after 
SH
mandoc: gitcore-tutorial.7:1356:305: STYLE: input text line longer than 80 
bytes: We said this tutoria...
mandoc: gitcore-tutorial.7:1358:178: STYLE: input text line longer than 80 
bytes: OK, still with me? T...
mandoc: gitcore-tutorial.7:1377:154: STYLE: input text line longer than 80 
bytes: Remember, before run...
mandoc: gitcore-tutorial.7:1426:283: STYLE: input text line longer than 80 
bytes: The command writes t...
mandoc: gitcore-tutorial.7:1453:626: STYLE: input text line longer than 80 
bytes: This is the same \fI...
mandoc: gitcore-tutorial.7:1455:170: STYLE: input text line longer than 80 
bytes: After \fIcollapsing\...
mandoc: gitcore-tutorial.7:1472:346: STYLE: input text line longer than 80 
bytes: In our example of on...
mandoc: gitcore-tutorial.7:1490:209: STYLE: input text line longer than 80 
bytes: The next step of mer...
mandoc: gitcore-tutorial.7:1523:318: STYLE: input text line longer than 80 
bytes: This is the state of...
mandoc: gitcore-tutorial.7:1525:2: WARNING: skipping paragraph macro: sp after 
SH
mandoc: gitcore-tutorial.7:1526:141: STYLE: input text line longer than 80 
bytes: So, we can use someb...
mandoc: gitcore-tutorial.7:1528:521: STYLE: input text line longer than 80 
bytes: You do your real wor...
mandoc: gitcore-tutorial.7:1538:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:1540:2: WARNING: skipping paragraph macro: br after 
br
mandoc: gitcore-tutorial.7:1542:119: STYLE: input text line longer than 80 
bytes: This public reposito...
mandoc: gitcore-tutorial.7:1546:237: STYLE: input text line longer than 80 
bytes: Publishing the chang...
mandoc: gitcore-tutorial.7:1548:266: STYLE: input text line longer than 80 
bytes: First, you need to c...
mandoc: gitcore-tutorial.7:1558:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:1560:2: WARNING: skipping paragraph macro: br after 
br
mandoc: gitcore-tutorial.7:1566:303: STYLE: input text line longer than 80 
bytes: Your private reposit...
mandoc: gitcore-tutorial.7:1579:170: STYLE: input text line longer than 80 
bytes: Then, make that dire...
mandoc: gitcore-tutorial.7:1592:219: STYLE: input text line longer than 80 
bytes: Make sure this direc...
mandoc: gitcore-tutorial.7:1602:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:1604:2: WARNING: skipping paragraph macro: br after 
br
mandoc: gitcore-tutorial.7:1606:342: STYLE: input text line longer than 80 
bytes: Many installations o...
mandoc: gitcore-tutorial.7:1618:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:1620:2: WARNING: skipping paragraph macro: br after 
br
mandoc: gitcore-tutorial.7:1622:283: STYLE: input text line longer than 80 
bytes: If you plan to publi...
mandoc: gitcore-tutorial.7:1626:154: STYLE: input text line longer than 80 
bytes: Your "public reposit...
mandoc: gitcore-tutorial.7:1639:170: STYLE: input text line longer than 80 
bytes: This synchronizes yo...
mandoc: gitcore-tutorial.7:1641:161: STYLE: input text line longer than 80 
bytes: As a real example, t...
mandoc: gitcore-tutorial.7:1654:2: WARNING: skipping paragraph macro: sp after 
SH
mandoc: gitcore-tutorial.7:1655:371: STYLE: input text line longer than 80 
bytes: Earlier, we saw that...
mandoc: gitcore-tutorial.7:1668:282: STYLE: input text line longer than 80 
bytes: will do it for you\&...
mandoc: gitcore-tutorial.7:1678:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:1680:2: WARNING: skipping paragraph macro: br after 
br
mandoc: gitcore-tutorial.7:1682:391: STYLE: input text line longer than 80 
bytes: You will see two fil...
mandoc: gitcore-tutorial.7:1686:169: STYLE: input text line longer than 80 
bytes: If you are paranoid,...
mandoc: gitcore-tutorial.7:1688:122: STYLE: input text line longer than 80 
bytes: Once you have packed...
mandoc: gitcore-tutorial.7:1703:260: STYLE: input text line longer than 80 
bytes: You can try running ...
mandoc: gitcore-tutorial.7:1713:2: WARNING: skipping paragraph macro: br before 
sp
mandoc: gitcore-tutorial.7:1715:2: WARNING: skipping paragraph macro: br after 
br
mandoc: gitcore-tutorial.7:1721:505: STYLE: input text line longer than 80 
bytes: If you run \fBgit re...
mandoc: gitcore-tutorial.7:1723:313: STYLE: input text line longer than 80 
bytes: When a repository is...
mandoc: gitcore-tutorial.7:1725:2: WARNING: skipping paragraph macro: sp after 
SH
mandoc: gitcore-tutorial.7:1726:312: STYLE: input text line longer than 80 
bytes: Although Git is a tr...
mandoc: gitcore-tutorial.7:1728:230: STYLE: input text line longer than 80 
bytes: It should be stresse...
mandoc: gitcore-tutorial.7:1740:83: STYLE: input text line longer than 80 
bytes: Prepare your primary...
mandoc: gitcore-tutorial.7:1753:119: STYLE: input text line longer than 80 
bytes: If other people are ...
mandoc: gitcore-tutorial.7:1785:123: STYLE: input text line longer than 80 
bytes: the public repositor...
mandoc: gitcore-tutorial.7:1787:86: STYLE: input text line longer than 80 
bytes: if the transport use...
mandoc: gitcore-tutorial.7:1798:219: STYLE: input text line longer than 80 
bytes: Keep working in your...
mandoc: gitcore-tutorial.7:1827:130: STYLE: input text line longer than 80 
bytes: A recommended work c...
mandoc: gitcore-tutorial.7:1839:151: STYLE: input text line longer than 80 
bytes: on the public reposi...
mandoc: gitcore-tutorial.7:1850:93: STYLE: input text line longer than 80 
bytes: Prepare a public rep...
mandoc: gitcore-tutorial.7:1861:198: STYLE: input text line longer than 80 
bytes: Copy over the packed...
mandoc: gitcore-tutorial.7:1877:86: STYLE: input text line longer than 80 
bytes: if the transport use...
mandoc: gitcore-tutorial.7:1888:257: STYLE: input text line longer than 80 
bytes: Keep working in your...
mandoc: gitcore-tutorial.7:1901:138: STYLE: input text line longer than 80 
bytes: Push your changes to...
mandoc: gitcore-tutorial.7:1917:138: STYLE: input text line longer than 80 
bytes: A recommended work c...
mandoc: gitcore-tutorial.7:1929:206: STYLE: input text line longer than 80 
bytes: the public repositor...
mandoc: gitcore-tutorial.7:1955:101: STYLE: input text line longer than 80 
bytes: from the public repo...
mandoc: gitcore-tutorial.7:1986:114: STYLE: input text line longer than 80 
bytes: to prepare patches f...
mandoc: gitcore-tutorial.7:1989:2: WARNING: skipping paragraph macro: sp after 
SH
mandoc: gitcore-tutorial.7:1990:260: STYLE: input text line longer than 80 
bytes: If you are coming fr...
mandoc: gitcore-tutorial.7:1994:2: WARNING: skipping paragraph macro: sp after 
SH
mandoc: gitcore-tutorial.7:1995:160: STYLE: input text line longer than 80 
bytes: It is likely that yo...
mandoc: gitcore-tutorial.7:1997:329: STYLE: input text line longer than 80 
bytes: We have already seen...
mandoc: gitcore-tutorial.7:2019:168: STYLE: input text line longer than 80 
bytes: Both fixes are teste...
mandoc: gitcore-tutorial.7:2057:448: STYLE: input text line longer than 80 
bytes: However, there is no...
mandoc: gitcore-tutorial.7:2070:254: STYLE: input text line longer than 80 
bytes: You can make sure \f...
mandoc: gitcore-tutorial.7:2094:660: STYLE: input text line longer than 80 
bytes: Note that you should...
mandoc: gitcore-tutorial.7:2096:2: WARNING: skipping paragraph macro: sp after 
SH
mandoc: gitcore-tutorial.7:2099:2: WARNING: skipping paragraph macro: sp after 
SH

-.-.

Strings longer than 3/4 of a standard line length (80)
Use "\:" to split the string at the end of an output line, for example a
long URLs (web address)

2110 
\%https://web.archive.org/web/20120915203609/http://www.xenotime.net/linux/mentor/linux-mentoring-2006.pdf

-.-.

Add a zero (0) in front of a decimal fraction that begins with a period
(.)

60:.sp .5v
165:.sp .5v
181:.sp .5v
317:.sp .5v
333:.sp .5v
524:.sp .5v
631:.sp .5v
702:.sp .5v
903:.sp .5v
1124:.sp .5v
1140:.sp .5v
1289:.sp .5v
1543:.sp .5v
1563:.sp .5v
1607:.sp .5v
1623:.sp .5v
1683:.sp .5v
1718:.sp .5v

-.-.

Show if docman-to-man created this

3:.\"    Author: [FIXME: author] [see 
http://www.docbook.org/tdg5/en/html/author]
4:.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>

-.-.

Output from "test-groff  -mandoc -t -K utf8 -rF0 -rHY=0 -ww -b -z ":

troff: backtrace: file '<stdin>':2110
troff:<stdin>:2110: warning: [page 21, 7.3i]: cannot break line

Output from "test-nroff  -mandoc -t -K utf8 -rF0 -rHY=0 -ww -b -z ":

troff: backtrace: file '<stdin>':2110
troff:<stdin>:2110: warning: [page 22, line 47]: cannot break line

-.-.

Additionally (general):

Abbreviations get a '\&' added after their final full stop (.) to mark them as
such and not as an end of sentence.

There is no need to add a '\&' before a full stop (.) if it has a character
before it!
--- gitcore-tutorial.7  2024-09-24 21:31:58.218881293 +0000
+++ gitcore-tutorial.7.new      2024-09-24 22:07:51.484944926 +0000
@@ -30,10 +30,8 @@
 .SH "NAME"
 gitcore-tutorial \- A Git core tutorial for developers
 .SH "SYNOPSIS"
-.sp
 git *
 .SH "DESCRIPTION"
-.sp
 This tutorial explains how to use the "core" Git commands to set up and work 
with a Git repository\&.
 .sp
 If you just need to use Git as a revision control system you may prefer to 
start with "A Tutorial Introduction to Git" (\fBgittutorial\fR(7)) or 
\m[blue]\fBthe Git User Manual\fR\m[]\&\s-2\u[1]\d\s+2\&.
@@ -57,10 +55,9 @@ Back when this document was originally w
 .br
 .sp
 Deeper technical details are often marked as Notes, which you can skip on your 
first reading\&.
-.sp .5v
+.sp 0.5v
 .RE
 .SH "CREATING A GIT REPOSITORY"
-.sp
 Creating a new Git repository couldn\(cqt be easier: all Git repositories 
start out empty, and the only thing you need to do is find yourself a 
subdirectory that you want to use as a working tree \- either an empty one for 
a totally new project, or an existing working tree that you want to import into 
Git\&.
 .sp
 For our first example, we\(cqre going to start a totally new repository from 
scratch, with no pre\-existing files, and we\(cqll call it 
\fIgit\-tutorial\fR\&. To start up, create a subdirectory for it, change into 
that subdirectory, and initialize the Git infrastructure with \fIgit init\fR:
@@ -162,7 +159,7 @@ However, this is only a convention, and
 .br
 .sp
 An \fIobject\fR is identified by its 160\-bit SHA\-1 hash, aka \fIobject 
name\fR, and a reference to an object is always the 40\-byte hex representation 
of that SHA\-1 name\&. The files in the \fBrefs\fR subdirectory are expected to 
contain these hex references (usually with a final \fB\en\fR at the end), and 
you should thus expect to see a number of 41\-byte files containing these 
references in these \fBrefs\fR subdirectories when you actually start 
populating your tree\&.
-.sp .5v
+.sp 0.5v
 .RE
 .if n \{\
 .sp
@@ -175,15 +172,13 @@ An \fIobject\fR is identified by its 160
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 An advanced user may want to take a look at \fBgitrepository-layout\fR(5) 
after finishing this tutorial\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 You have now created your first Git repository\&. Of course, since it\(cqs 
empty, that\(cqs not very useful, so let\(cqs start populating it with data\&.
 .SH "POPULATING A GIT REPOSITORY"
-.sp
 We\(cqll keep this simple and stupid, so we\(cqll start off with populating a 
few trivial files just to get a feel for it\&.
 .sp
 Start off with just creating any random files that you want to maintain in 
your Git repository\&. We\(cqll start off with a few bad examples, just to get 
a feel for how this works:
@@ -311,10 +306,9 @@ which will print out "Hello World"\&. Th
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 Don\(cqt confuse that object with the file \fBhello\fR itself\&. The object is 
literally just those specific \fBcontents\fR of the file, and however much you 
later change the contents in file \fBhello\fR, the object we just looked at 
will never change\&. Objects are immutable\&.
-.sp .5v
+.sp 0.5v
 .RE
 .if n \{\
 .sp
@@ -327,10 +321,9 @@ Don\(cqt confuse that object with the fi
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 The second example demonstrates that you can abbreviate the object name to 
only the first several hexadecimal digits in most places\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 Anyway, as we mentioned previously, you normally never actually take a look at 
the objects themselves, and typing long 40\-character hex names is not 
something you\(cqd normally want to do\&. The above digression was just to show 
that \fIgit update\-index\fR did something magical, and actually saved away the 
contents of your files into the Git object database\&.
@@ -411,7 +404,6 @@ index 557db03\&.\&.263414f 100644
 .\}
 .sp
 .SH "COMMITTING GIT STATE"
-.sp
 Now, we want to go to the next stage in Git, which is to take the files that 
Git knows about in the index, and commit them as a real tree\&. We do that in 
two phases: creating a \fItree\fR object, and committing that \fItree\fR object 
as a \fIcommit\fR object together with an explanation of what the tree was all 
about, along with information of how we came to that state\&.
 .sp
 Creating a tree object is trivial, and is done with \fIgit write\-tree\fR\&. 
There are no options or other input: \fBgit write\-tree\fR will take the 
current index state, and write an object that describes that whole index\&. In 
other words, we\(cqre now tying together all the different filenames with their 
contents (and their permissions), and we\(cqre creating the equivalent of a Git 
"directory" object:
@@ -465,7 +457,6 @@ In this case this creates a totally new
 .sp
 Again, normally you\(cqd never actually do this by hand\&. There is a helpful 
script called \fBgit commit\fR that will do all of this for you\&. So you could 
have just written \fBgit commit\fR instead, and it would have done the above 
magic scripting for you\&.
 .SH "MAKING A CHANGE"
-.sp
 Remember how we did the \fIgit update\-index\fR on file \fBhello\fR and then 
we changed \fBhello\fR afterward, and could compare the new state of 
\fBhello\fR with the state we saved in the index file?
 .sp
 Further, remember how I said that \fIgit write\-tree\fR writes the contents of 
the \fBindex\fR file to the tree, and thus what we just committed was in fact 
the \fBoriginal\fR contents of the file \fBhello\fR, not the new ones\&. We did 
that on purpose, to show the difference between the index state, and the state 
in the working tree, and how they don\(cqt have to match, even when we commit 
things\&.
@@ -516,12 +507,11 @@ In other words, \fIgit diff\-index\fR no
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 \fIgit diff\-index\fR really always uses the index for its comparisons, and 
saying that it compares a tree against the working tree is thus not strictly 
accurate\&. In particular, the list of files to compare (the "meta\-data") 
\fBalways\fR comes from the index file, regardless of whether the 
\fB\-\-cached\fR flag is used or not\&. The \fB\-\-cached\fR flag really only 
determines whether the file \fBcontents\fR to be compared come from the working 
tree or not\&.
 .sp
 This is not hard to understand, as soon as you realize that Git simply never 
knows (or cares) about files that it is not told about explicitly\&. Git will 
never go \fBlooking\fR for files to compare, it expects you to tell it what the 
files are, and that\(cqs what the index is there for\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 However, our next step is to commit the \fBchange\fR we did, and again, to 
understand what\(cqs going on, keep in mind the difference between "working 
tree contents", "index file" and "committed tree"\&. We have changes in the 
working tree that we want to commit, and we always have to work through the 
index file, so the first thing we need to do is to update the index cache:
@@ -560,7 +550,6 @@ Write whatever message you want, and all
 .sp
 You\(cqve now made your first real Git commit\&. And if you\(cqre interested 
in looking at what \fBgit commit\fR really does, feel free to investigate: 
it\(cqs a few very simple shell scripts to generate the helpful (?) commit 
message headers, and a few one\-liners that actually do the commit itself 
(\fIgit commit\fR)\&.
 .SH "INSPECTING CHANGES"
-.sp
 While creating changes is useful, it\(cqs even more useful if you can tell 
later what changed\&. The most useful command for this is another of the 
\fIdiff\fR family, namely \fIgit diff\-tree\fR\&.
 .sp
 \fIgit diff\-tree\fR can be given two arbitrary trees, and it will tell you 
the differences between them\&. Perhaps even more commonly, though, you can 
give it just a single commit object, and it will figure out the parent of that 
commit itself, and show the difference directly\&. Thus, to get the same diff 
that we\(cqve already seen several times, we can now do
@@ -588,7 +577,6 @@ $ git diff\-tree \-p HEAD
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 Here is an ASCII art by Jon Loeliger that illustrates how various 
\fIdiff\-*\fR commands compare things\&.
 .sp
@@ -628,14 +616,13 @@ diff\-index  |    V
 .if n \{\
 .RE
 .\}
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 More interestingly, you can also give \fIgit diff\-tree\fR the 
\fB\-\-pretty\fR flag, which tells it to also show the commit message and 
author and date of the commit, and you can tell it to show a whole series of 
diffs\&. Alternatively, you can tell it to be "silent", and not show the diffs 
at all, but just show the actual commit message\&.
 .sp
 In fact, together with the \fIgit rev\-list\fR program (which generates a list 
of revisions), \fIgit diff\-tree\fR ends up being a veritable fount of 
changes\&. You can emulate \fBgit log\fR, \fBgit log \-p\fR, etc\&. with a 
trivial script that pipes the output of \fBgit rev\-list\fR to \fBgit 
diff\-tree \-\-stdin\fR, which was exactly how early versions of \fBgit log\fR 
were implemented\&.
 .SH "TAGGING A VERSION"
-.sp
 In Git, there are two kinds of tags, a "light" one, and an "annotated tag"\&.
 .sp
 A "light" tag is technically nothing more than a branch, except we put it in 
the \fB\&.git/refs/tags/\fR subdirectory instead of calling it a \fBhead\fR\&. 
So the simplest form of tag involves nothing more than
@@ -683,7 +670,6 @@ which will sign the current \fBHEAD\fR (
 .sp
 You normally only do signed tags for major releases or things like that, while 
the light\-weight tags are useful for any marking you want to do \(em any time 
you decide that you want to remember a certain point, just create a private tag 
for it, and you have a nice symbolic name for the state at that point\&.
 .SH "COPYING REPOSITORIES"
-.sp
 Git repositories are normally totally self\-sufficient and relocatable\&. 
Unlike CVS, for example, there is no separate notion of "repository" and 
"working tree"\&. A Git repository normally \fBis\fR the working tree, with the 
local Git information hidden in the \fB\&.git\fR subdirectory\&. There is 
nothing else\&. What you see is what you got\&.
 .if n \{\
 .sp
@@ -696,10 +682,9 @@ Git repositories are normally totally se
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 You can tell Git to split the Git internal information from the directory that 
it tracks, but we\(cqll ignore that for now: it\(cqs not how normal projects 
work, and it\(cqs really only meant for special uses\&. So the mental model of 
"the Git information is always tied directly to the working tree that it 
describes" may not be technically 100% accurate, but it\(cqs a good model for 
all normal use\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 This has two implications:
@@ -854,7 +839,6 @@ which will end up doing all of the above
 .sp
 You have now successfully copied somebody else\(cqs (mine) remote repository, 
and checked it out\&.
 .SH "CREATING A NEW BRANCH"
-.sp
 Branches in Git are really nothing more than pointers into the Git object 
database from within the \fB\&.git/refs/\fR subdirectory, and as we already 
discussed, the \fBHEAD\fR branch is nothing but a symlink to one of these 
object pointers\&.
 .sp
 You can at any time create a new branch by just picking an arbitrary point in 
the project history, and just writing the SHA\-1 name of that object into a 
file under \fB\&.git/refs/heads/\fR\&. You can use any filename you want (and 
indeed, subdirectories), but the convention is that the "normal" branch is 
called \fBmaster\fR\&. That\(cqs just a convention, though, and nothing 
enforces it\&.
@@ -884,7 +868,6 @@ will create a new branch based at the cu
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 If you make the decision to start your new branch at some other point in the 
history than the current \fBHEAD\fR, you can do so by just telling \fIgit 
switch\fR what the base of the checkout would be\&. In other words, if you have 
an earlier tag or branch, you\(cqd just do
 .sp
@@ -900,7 +883,7 @@ $ git switch \-c mybranch earlier\-commi
 .sp
 .sp
 and it would create the new branch \fBmybranch\fR at the earlier commit, and 
check out the state at that time\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 You can always just jump back to your original \fBmaster\fR branch by doing
@@ -959,7 +942,6 @@ $ git branch <branchname> [startingpoint
 .sp
 which will simply \fIcreate\fR the branch, but will not do anything further\&. 
You can then later \(em once you decide that you want to actually develop on 
that branch \(em switch to that branch with a regular \fIgit switch\fR with the 
branchname as the argument\&.
 .SH "MERGING TWO BRANCHES"
-.sp
 One of the ideas of having a branch is that you do some (possibly 
experimental) work in it, and eventually merge it back to the main branch\&. So 
assuming you created the above \fBmybranch\fR that started out being the same 
as the original \fBmaster\fR branch, let\(cqs make sure we\(cqre in that 
branch, and do some work there\&.
 .sp
 .if n \{\
@@ -1118,10 +1100,9 @@ The first two lines indicate that it is
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 Without the \fI\-\-more=1\fR option, \fIgit show\-branch\fR would not output 
the \fI[master^]\fR commit, as \fI[mybranch]\fR commit is a common ancestor of 
both \fImaster\fR and \fImybranch\fR tips\&. Please see 
\fBgit-show-branch\fR(1) for details\&.
-.sp .5v
+.sp 0.5v
 .RE
 .if n \{\
 .sp
@@ -1134,10 +1115,9 @@ Without the \fI\-\-more=1\fR option, \fI
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 If there were more commits on the \fImaster\fR branch after the merge, the 
merge commit itself would not be shown by \fIgit show\-branch\fR by default\&. 
You would need to provide \fB\-\-sparse\fR option to make the merge commit 
visible in this case\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 Now, let\(cqs pretend you are the one who did all the work in \fBmybranch\fR, 
and the fruit of your hard work has finally been merged to the \fBmaster\fR 
branch\&. Let\(cqs go back to \fBmybranch\fR, and run \fIgit merge\fR to get 
the "upstream changes" back to your branch\&.
@@ -1190,7 +1170,6 @@ $ git show\-branch master mybranch
 .\}
 .sp
 .SH "MERGING EXTERNAL WORK"
-.sp
 It\(cqs usually much more common that you merge with somebody else than 
merging with your own branches, so it\(cqs worth pointing out that Git makes 
that very easy too, and in fact, it\(cqs not that different from doing a \fIgit 
merge\fR\&. In fact, a remote merge ends up being nothing more than "fetch the 
work from a remote repository into a temporary tag" followed by a \fIgit 
merge\fR\&.
 .sp
 Fetching from a remote repository is done by, unsurprisingly, \fIgit fetch\fR:
@@ -1283,10 +1262,9 @@ and optionally give a branch\-name for t
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 You could do without using any branches at all, by keeping as many local 
repositories as you would like to have branches, and merging between them with 
\fIgit pull\fR, just like you merge between branches\&. The advantage of this 
approach is that it lets you keep a set of files for each \fBbranch\fR checked 
out and you may find it easier to switch back and forth if you juggle multiple 
lines of development simultaneously\&. Of course, you will pay the price of 
more disk usage to hold multiple working trees, but disk space is cheap these 
days\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 It is likely that you will be pulling from the same remote repository from 
time to time\&. As a short hand, you can store the remote repository URL in the 
local repository\(cqs config file like this:
@@ -1352,7 +1330,6 @@ the above are equivalent to:
 \fBgit pull http://www\&.kernel\&.org/pub/scm/git/git\&.git/ tag v0\&.99\&.1\fR
 .RE
 .SH "HOW DOES THE MERGE WORK?"
-.sp
 We said this tutorial shows what plumbing does to help you cope with the 
porcelain that isn\(cqt flushing, but we so far did not talk about how the 
merge really works\&. If you are following this tutorial the first time, I\(cqd 
suggest to skip to "Publishing your work" section and come back here later\&.
 .sp
 OK, still with me? To give us an example to look at, let\(cqs go back to the 
earlier repository with "hello" and "example" file, and bring ourselves back to 
the pre\-merge state:
@@ -1522,7 +1499,6 @@ $ git ls\-files \-\-stage
 .sp
 This is the state of the index file and the working file after \fIgit merge\fR 
returns control back to you, leaving the conflicting merge for you to 
resolve\&. Notice that the path \fBhello\fR is still unmerged, and what you see 
with \fIgit diff\fR at this point is differences since stage 2 (i\&.e\&. your 
version)\&.
 .SH "PUBLISHING YOUR WORK"
-.sp
 So, we can use somebody else\(cqs work from a remote repository, but how can 
\fByou\fR prepare a repository to let other people pull from it?
 .sp
 You do your real work in your working tree that has your primary repository 
hanging under it as its \fB\&.git\fR subdirectory\&. You \fBcould\fR make that 
repository accessible remotely and ask people to pull from it, but in practice 
that is not the way things are usually done\&. A recommended way is to have a 
public repository, make it reachable by other people, and when the changes you 
made in your primary working tree are in good shape, update the public 
repository from it\&. This is often called \fIpushing\fR\&.
@@ -1537,10 +1513,9 @@ You do your real work in your working tr
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 This public repository could further be mirrored, and that is how Git 
repositories at \fBkernel\&.org\fR are managed\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 Publishing the changes from your local (private) repository to your remote 
(public) repository requires a write privilege on the remote machine\&. You 
need to have an SSH account there to run a single command, 
\fIgit\-receive\-pack\fR\&.
@@ -1557,10 +1532,9 @@ First, you need to create an empty repos
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 \fIgit push\fR uses a pair of commands, \fIgit send\-pack\fR on your local 
machine, and \fIgit\-receive\-pack\fR on the remote machine\&. The 
communication between the two over the network internally uses an SSH 
connection\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 Your private repository\(cqs Git directory is usually \fB\&.git\fR, but your 
public repository is often named after the project name, i\&.e\&. 
\fB<project>\&.git\fR\&. Let\(cqs create such a public repository for project 
\fBmy\-git\fR\&. After logging into the remote machine, create an empty 
directory:
@@ -1601,10 +1575,9 @@ Make sure this directory is available fo
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 Many installations of sshd do not invoke your shell as the login shell when 
you directly run programs; what this means is that if your login shell is 
\fIbash\fR, only \fB\&.bashrc\fR is read and not \fB\&.bash_profile\fR\&. As a 
workaround, make sure \fB\&.bashrc\fR sets up \fB$PATH\fR so that you can run 
\fIgit\-receive\-pack\fR program\&.
-.sp .5v
+.sp 0.5v
 .RE
 .if n \{\
 .sp
@@ -1617,10 +1590,9 @@ Many installations of sshd do not invoke
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 If you plan to publish this repository to be accessed over http, you should do 
\fBmv my\-git\&.git/hooks/post\-update\&.sample 
my\-git\&.git/hooks/post\-update\fR at this point\&. This makes sure that every 
time you push into this repository, \fBgit update\-server\-info\fR is run\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 Your "public repository" is now ready to accept your changes\&. Come back to 
the machine you have your private repository\&. From there, run this command:
@@ -1651,7 +1623,6 @@ $ git push master\&.kernel\&.org:/pub/sc
 .\}
 .sp
 .SH "PACKING YOUR REPOSITORY"
-.sp
 Earlier, we saw that one file under \fB\&.git/objects/??/\fR directory is 
stored for each Git object you create\&. This representation is efficient to 
create atomically and safely, but not so convenient to transport over the 
network\&. Since Git objects are immutable once they are created, there is a 
way to optimize the storage by "packing them together"\&. The command
 .sp
 .if n \{\
@@ -1677,10 +1648,9 @@ will do it for you\&. If you followed th
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 You will see two files, \fBpack\-*\&.pack\fR and \fBpack\-*\&.idx\fR, in 
\fB\&.git/objects/pack\fR directory\&. They are closely related to each other, 
and if you ever copy them by hand to a different repository for whatever 
reason, you should make sure you copy them together\&. The former holds all the 
data from the objects in the pack, and the latter holds the index for random 
access\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 If you are paranoid, running \fIgit verify\-pack\fR command would detect if 
you have a corrupt pack, but do not worry too much\&. Our programs are always 
perfect ;\-)\&.
@@ -1712,17 +1682,15 @@ You can try running \fBfind \&.git/objec
 .ps +1
 \fBNote\fR
 .ps -1
-.br
 .sp
 \fBgit pull\fR is slightly cumbersome for HTTP transport, as a packed 
repository may contain relatively few objects in a relatively large pack\&. If 
you expect many HTTP pulls from your public repository you might want to repack 
& prune often, or never\&.
-.sp .5v
+.sp 0.5v
 .RE
 .sp
 If you run \fBgit repack\fR again at this point, it will say "Nothing new to 
pack\&."\&. Once you continue your development and accumulate the changes, 
running \fBgit repack\fR again will create a new pack, that contains objects 
created since you packed your repository the last time\&. We recommend that you 
pack your project soon after the initial import (unless you are starting your 
project from scratch), and then run \fBgit repack\fR every once in a while, 
depending on how active your project is\&.
 .sp
 When a repository is synchronized via \fBgit push\fR and \fBgit pull\fR 
objects packed in the source repository are usually stored unpacked in the 
destination\&. While this allows you to use different packing strategies on 
both ends, it also means you may need to repack both repositories every once in 
a while\&.
 .SH "WORKING WITH OTHERS"
-.sp
 Although Git is a truly distributed system, it is often convenient to organize 
your project with an informal hierarchy of developers\&. Linux kernel 
development is run this way\&. There is a nice illustration (page 17, "Merges 
to Mainline") in \m[blue]\fBRandy Dunlap\(cqs 
presentation\fR\m[]\&\s-2\u[2]\d\s+2\&.
 .sp
 It should be stressed that this hierarchy is purely \fBinformal\fR\&. There is 
nothing fundamental in Git that enforces the "chain of patch flow" this 
hierarchy implies\&. You do not have to pull from only one remote repository\&.
@@ -1986,12 +1954,10 @@ Use
 to prepare patches for e\-mail submission to your upstream and send it out\&. 
Go back to step 2\&. and continue\&.
 .RE
 .SH "WORKING WITH OTHERS, SHARED REPOSITORY STYLE"
-.sp
 If you are coming from a CVS background, the style of cooperation suggested in 
the previous section may be new to you\&. You do not have to worry\&. Git 
supports the "shared public repository" style of cooperation you are probably 
more familiar with as well\&.
 .sp
 See \fBgitcvs-migration\fR(7) for the details\&.
 .SH "BUNDLING YOUR WORK TOGETHER"
-.sp
 It is likely that you will be working on more than one thing at a time\&. It 
is easy to manage those more\-or\-less independent tasks using branches with 
Git\&.
 .sp
 We have already seen how branches work previously, with "fun and work" example 
using two branches\&. The idea is the same if there are more than two 
branches\&. Let\(cqs say you started out from "master" head, and have some new 
code in the "master" branch, and two independent fixes in the "commit\-fix" and 
"diff\-fix" branches:
@@ -2093,10 +2059,8 @@ $ git show\-branch
 .sp
 Note that you should not do Octopus just because you can\&. An octopus is a 
valid thing to do and often makes it easier to view the commit history if you 
are merging more than two independent changes at the same time\&. However, if 
you have merge conflicts with any of the branches you are merging in and need 
to hand resolve, that is an indication that the development happened in those 
branches were not independent after all, and you should merge two at a time, 
documenting how you resolved the conflicts, and the reason why you preferred 
changes made in one side over the other\&. Otherwise it would make the project 
history harder to follow, not easier\&.
 .SH "SEE ALSO"
-.sp
 \fBgittutorial\fR(7), \fBgittutorial-2\fR(7), \fBgitcvs-migration\fR(7), 
\fBgit-help\fR(1), \fBgiteveryday\fR(7), \m[blue]\fBThe Git User\(cqs 
Manual\fR\m[]\&\s-2\u[1]\d\s+2
 .SH "GIT"
-.sp
 Part of the \fBgit\fR(1) suite
 .SH "NOTES"
 .IP " 1." 4
@@ -2107,5 +2071,5 @@ the Git User Manual
 .IP " 2." 4
 Randy Dunlap\(cqs presentation
 .RS 4
-\%https://web.archive.org/web/20120915203609/http://www.xenotime.net/linux/mentor/linux-mentoring-2006.pdf
+\%https://web.archive.org/\:web/20120915203609/\:http://www.xenotime.net/\:linux/mentor/\:linux\-mentoring\-2006.pdf
 .RE

Reply via email to