0000: 3c 74 69 74 6c 65 3e 46 6f 73 73 69 6c 20 56 65 <title>Fossil Ve
0010: 72 73 75 73 20 47 69 74 3c 2f 74 69 74 6c 65 3e rsus Git</title>
0020: 0a 0a 3c 68 32 3e 31 2e 30 20 44 6f 6e 27 74 20 ..<h2>1.0 Don't
0030: 53 74 72 65 73 73 21 3c 2f 68 32 3e 0a 0a 54 68 Stress!</h2>..Th
0040: 65 20 66 65 61 74 75 72 65 20 73 65 74 73 20 6f e feature sets o
0050: 66 20 46 6f 73 73 69 6c 20 61 6e 64 20 5b 68 74 f Fossil and [ht
0060: 74 70 3a 2f 2f 67 69 74 2d 73 63 6d 2e 63 6f 6d tp://git-scm.com
0070: 20 7c 20 47 69 74 5d 20 6f 76 65 72 6c 61 70 20 | Git] overlap
0080: 69 6e 0a 6d 61 6e 79 20 77 61 79 73 2e 20 42 6f in.many ways. Bo
0090: 74 68 20 61 72 65 0a 5b 68 74 74 70 73 3a 2f 2f th are.[https://
00a0: 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 en.wikipedia.org
00b0: 2f 77 69 6b 69 2f 44 69 73 74 72 69 62 75 74 65 /wiki/Distribute
00c0: 64 5f 76 65 72 73 69 6f 6e 5f 63 6f 6e 74 72 6f d_version_contro
00d0: 6c 20 7c 20 64 69 73 74 72 69 62 75 74 65 64 0a l | distributed.
00e0: 76 65 72 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 version control
00f0: 73 79 73 74 65 6d 73 5d 20 77 68 69 63 68 20 73 systems] which s
0100: 74 6f 72 65 20 61 20 74 72 65 65 20 6f 66 20 63 tore a tree of c
0110: 68 65 63 6b 2d 69 6e 20 6f 62 6a 65 63 74 73 20 heck-in objects
0120: 74 6f 20 61 0a 6c 6f 63 61 6c 20 72 65 70 6f 73 to a.local repos
0130: 69 74 6f 72 79 20 63 6c 6f 6e 65 2e 20 49 6e 20 itory clone. In
0140: 62 6f 74 68 20 73 79 73 74 65 6d 73 2c 20 74 68 both systems, th
0150: 65 20 6c 6f 63 61 6c 20 63 6c 6f 6e 65 20 73 74 e local clone st
0160: 61 72 74 73 20 6f 75 74 20 61 73 20 61 0a 66 75 arts out as a.fu
0170: 6c 6c 20 63 6f 70 79 20 6f 66 20 74 68 65 20 72 ll copy of the r
0180: 65 6d 6f 74 65 20 70 61 72 65 6e 74 2e 20 4e 65 emote parent. Ne
0190: 77 20 63 6f 6e 74 65 6e 74 20 67 65 74 73 20 61 w content gets a
01a0: 64 64 65 64 20 74 6f 20 74 68 65 20 6c 6f 63 61 dded to the loca
01b0: 6c 0a 63 6c 6f 6e 65 20 61 6e 64 20 74 68 65 6e l.clone and then
01c0: 20 6c 61 74 65 72 20 6f 70 74 69 6f 6e 61 6c 6c later optionall
01d0: 79 20 70 75 73 68 65 64 20 75 70 20 74 6f 20 74 y pushed up to t
01e0: 68 65 20 72 65 6d 6f 74 65 2c 20 61 6e 64 20 63 he remote, and c
01f0: 68 61 6e 67 65 73 20 74 6f 0a 74 68 65 20 72 65 hanges to.the re
0200: 6d 6f 74 65 20 63 61 6e 20 62 65 20 70 75 6c 6c mote can be pull
0210: 65 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6c ed down to the l
0220: 6f 63 61 6c 20 63 6c 6f 6e 65 20 61 74 20 77 69 ocal clone at wi
0230: 6c 6c 2e 20 42 6f 74 68 20 73 79 73 74 65 6d 73 ll. Both systems
0240: 0a 6f 66 66 65 72 20 64 69 66 66 69 6e 67 2c 20 .offer diffing,
0250: 70 61 74 63 68 69 6e 67 2c 20 62 72 61 6e 63 68 patching, branch
0260: 69 6e 67 2c 20 6d 65 72 67 69 6e 67 2c 20 63 68 ing, merging, ch
0270: 65 72 72 79 2d 70 69 63 6b 69 6e 67 2c 20 62 69 erry-picking, bi
0280: 73 65 63 74 69 6e 67 2c 0a 70 72 69 76 61 74 65 secting,.private
0290: 20 62 72 61 6e 63 68 65 73 2c 20 61 20 73 74 61 branches, a sta
02a0: 73 68 2c 20 65 74 63 2e 0a 0a 46 6f 73 73 69 6c sh, etc...Fossil
02b0: 20 68 61 73 20 69 6e 62 6f 75 6e 64 20 61 6e 64 has inbound and
02c0: 20 6f 75 74 62 6f 75 6e 64 20 47 69 74 20 63 6f outbound Git co
02d0: 6e 76 65 72 73 69 6f 6e 20 66 65 61 74 75 72 65 nversion feature
02e0: 73 2c 20 73 6f 20 69 66 20 79 6f 75 20 73 74 61 s, so if you sta
02f0: 72 74 0a 6f 75 74 20 75 73 69 6e 67 20 6f 6e 65 rt.out using one
0300: 20 44 56 43 53 20 61 6e 64 20 6c 61 74 65 72 20 DVCS and later
0310: 64 65 63 69 64 65 20 79 6f 75 20 6c 69 6b 65 20 decide you like
0320: 74 68 65 20 6f 74 68 65 72 20 62 65 74 74 65 72 the other better
0330: 2c 20 79 6f 75 20 63 61 6e 0a 65 61 73 69 6c 79 , you can.easily
0340: 20 5b 2e 2f 69 6e 6f 75 74 2e 77 69 6b 69 20 7c [./inout.wiki |
0350: 20 6d 6f 76 65 20 79 6f 75 72 20 76 65 72 73 69 move your versi
0360: 6f 6e 2d 63 6f 6e 74 72 6f 6c 6c 65 64 20 66 69 on-controlled fi
0370: 6c 65 20 63 6f 6e 74 65 6e 74 5d 2e c2 b9 0a 0a le content].¹..
0380: 49 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 In this document
0390: 2c 20 77 65 20 73 65 74 20 61 6c 6c 20 6f 66 20 , we set all of
03a0: 74 68 61 74 20 73 69 6d 69 6c 61 72 69 74 79 20 that similarity
03b0: 61 6e 64 20 69 6e 74 65 72 6f 70 65 72 61 62 69 and interoperabi
03c0: 6c 69 74 79 0a 61 73 69 64 65 20 61 6e 64 20 66 lity.aside and f
03d0: 6f 63 75 73 20 6f 6e 20 74 68 65 20 69 6d 70 6f ocus on the impo
03e0: 72 74 61 6e 74 20 64 69 66 66 65 72 65 6e 63 65 rtant difference
03f0: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 77 s between the tw
0400: 6f 2c 20 65 73 70 65 63 69 61 6c 6c 79 0a 74 68 o, especially.th
0410: 6f 73 65 20 74 68 61 74 20 69 6d 70 61 63 74 20 ose that impact
0420: 74 68 65 20 75 73 65 72 20 65 78 70 65 72 69 65 the user experie
0430: 6e 63 65 2e 0a 0a 4b 65 65 70 20 69 6e 20 6d 69 nce...Keep in mi
0440: 6e 64 20 74 68 61 74 20 79 6f 75 20 61 72 65 20 nd that you are
0450: 72 65 61 64 69 6e 67 20 74 68 69 73 20 6f 6e 20 reading this on
0460: 61 20 46 6f 73 73 69 6c 20 77 65 62 73 69 74 65 a Fossil website
0470: 2c 20 61 6e 64 20 74 68 6f 75 67 68 0a 77 65 20 , and though.we
0480: 74 72 79 20 74 6f 20 62 65 20 66 61 69 72 2c 20 try to be fair,
0490: 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 the information
04a0: 68 65 72 65 0a 6d 69 67 68 74 20 62 65 20 62 69 here.might be bi
04b0: 61 73 65 64 20 69 6e 20 66 61 76 6f 72 20 6f 66 ased in favor of
04c0: 20 46 6f 73 73 69 6c 2c 20 69 66 20 6f 6e 6c 79 Fossil, if only
04d0: 20 62 65 63 61 75 73 65 20 77 65 20 73 70 65 6e because we spen
04e0: 64 20 6d 6f 73 74 20 6f 66 20 6f 75 72 0a 74 69 d most of our.ti
04f0: 6d 65 20 75 73 69 6e 67 20 46 6f 73 73 69 6c 2c me using Fossil,
0500: 20 6e 6f 74 20 47 69 74 2e 20 20 41 73 6b 20 61 not Git. Ask a
0510: 72 6f 75 6e 64 20 66 6f 72 20 73 65 63 6f 6e 64 round for second
0520: 20 6f 70 69 6e 69 6f 6e 73 20 66 72 6f 6d 0a 70 opinions from.p
0530: 65 6f 70 6c 65 20 77 68 6f 20 68 61 76 65 20 75 eople who have u
0540: 73 65 64 20 3c 65 6d 3e 62 6f 74 68 3c 2f 65 6d sed <em>both</em
0550: 3e 20 46 6f 73 73 69 6c 20 61 6e 64 20 47 69 74 > Fossil and Git
0560: 2e 0a 0a 49 66 20 79 6f 75 20 77 61 6e 74 20 61 ...If you want a
0570: 20 6d 6f 72 65 20 70 72 61 63 74 69 63 61 6c 2c more practical,
0580: 20 6c 65 73 73 20 70 68 69 6c 6f 73 6f 70 68 69 less philosophi
0590: 63 61 6c 20 67 75 69 64 65 20 74 6f 20 6d 6f 76 cal guide to mov
05a0: 69 6e 67 20 66 72 6f 6d 0a 47 69 74 20 74 6f 20 ing from.Git to
05b0: 46 6f 73 73 69 6c 2c 20 73 65 65 20 6f 75 72 20 Fossil, see our
05c0: 5b 2e 2f 67 69 74 75 73 65 72 73 2e 6d 64 20 7c [./gitusers.md |
05d0: 20 47 69 74 20 74 6f 20 46 6f 73 73 69 6c 20 54 Git to Fossil T
05e0: 72 61 6e 73 6c 61 74 69 6f 6e 20 47 75 69 64 65 ranslation Guide
05f0: 5d 2e 0a 0a 0a 3c 68 32 3e 32 2e 30 20 44 69 66 ]....<h2>2.0 Dif
0600: 66 65 72 65 6e 63 65 73 20 42 65 74 77 65 65 6e ferences Between
0610: 20 46 6f 73 73 69 6c 20 41 6e 64 20 47 69 74 3c Fossil And Git<
0620: 2f 68 32 3e 0a 0a 44 69 66 66 65 72 65 6e 63 65 /h2>..Difference
0630: 73 20 62 65 74 77 65 65 6e 20 46 6f 73 73 69 6c s between Fossil
0640: 20 61 6e 64 20 47 69 74 20 61 72 65 20 73 75 6d and Git are sum
0650: 6d 61 72 69 7a 65 64 20 62 79 20 74 68 65 20 66 marized by the f
0660: 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 2c 0a ollowing table,.
0670: 77 69 74 68 20 66 75 72 74 68 65 72 20 64 65 73 with further des
0680: 63 72 69 70 74 69 6f 6e 20 69 6e 20 74 68 65 20 cription in the
0690: 74 65 78 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 text that follow
06a0: 73 2e 0a 0a 3c 74 61 62 6c 65 20 73 74 79 6c 65 s...<table style
06b0: 3d 22 77 69 64 74 68 3a 20 66 69 74 2d 63 6f 6e ="width: fit-con
06c0: 74 65 6e 74 22 3e 0a 3c 74 72 3e 3c 74 68 3e 47 tent">.<tr><th>G
06d0: 49 54 3c 2f 74 68 3e 3c 74 68 3e 46 4f 53 53 49 IT</th><th>FOSSI
06e0: 4c 3c 2f 74 68 3e 3c 74 68 3e 6d 6f 72 65 3c 2f L</th><th>more</
06f0: 74 68 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 20 20 th></tr>.<tr>.
0700: 20 20 3c 74 64 3e 46 69 6c 65 20 76 65 72 73 69 <td>File versi
0710: 6f 6e 69 6e 67 20 6f 6e 6c 79 3c 2f 74 64 3e 0a oning only</td>.
0720: 20 20 20 20 3c 74 64 3e 0a 20 20 20 20 20 20 56 <td>. V
0730: 43 53 2c 20 74 69 63 6b 65 74 73 2c 20 77 69 6b CS, tickets, wik
0740: 69 2c 20 64 6f 63 73 2c 20 6e 6f 74 65 73 2c 20 i, docs, notes,
0750: 66 6f 72 75 6d 2c 20 63 68 61 74 2c 20 55 49 2c forum, chat, UI,
0760: 0a 20 20 20 20 20 20 5b 68 74 74 70 73 3a 2f 2f . [https://
0770: 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 en.wikipedia.org
0780: 2f 77 69 6b 69 2f 52 6f 6c 65 2d 62 61 73 65 64 /wiki/Role-based
0790: 5f 61 63 63 65 73 73 5f 63 6f 6e 74 72 6f 6c 7c _access_control|
07a0: 52 42 41 43 5d 0a 20 20 20 20 3c 2f 74 64 3e 0a RBAC]. </td>.
07b0: 20 20 20 20 3c 74 64 3e 3c 61 20 68 72 65 66 3d <td><a href=
07c0: 22 23 66 65 61 74 75 72 65 73 22 3e 32 2e 31 26 "#features">2.1&
07d0: 6e 62 73 70 3b 26 64 61 72 72 3b 3c 2f 61 3e 3c nbsp;↓</a><
07e0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a /td>.</tr>.<tr>.
07f0: 20 20 20 20 3c 74 64 3e 41 20 66 65 64 65 72 61 <td>A federa
0800: 74 69 6f 6e 20 6f 66 20 6d 61 6e 79 20 73 6d 61 tion of many sma
0810: 6c 6c 20 70 72 6f 67 72 61 6d 73 3c 2f 74 64 3e ll programs</td>
0820: 0a 20 20 20 20 3c 74 64 3e 4f 6e 65 20 73 65 6c . <td>One sel
0830: 66 2d 63 6f 6e 74 61 69 6e 65 64 2c 20 73 74 61 f-contained, sta
0840: 6e 64 2d 61 6c 6f 6e 65 20 65 78 65 63 75 74 61 nd-alone executa
0850: 62 6c 65 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 ble</td>. <td
0860: 3e 3c 61 20 68 72 65 66 3d 22 23 73 65 6c 66 63 ><a href="#selfc
0870: 6f 6e 74 61 69 6e 65 64 22 3e 32 2e 32 26 6e 62 ontained">2.2&nb
0880: 73 70 3b 26 64 61 72 72 3b 3c 2f 61 3e 3c 2f 74 sp;↓</a></t
0890: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 20 20 d>.</tr>.<tr>.
08a0: 20 20 3c 74 64 3e 43 75 73 74 6f 6d 20 6b 65 79 <td>Custom key
08b0: 2f 76 61 6c 75 65 20 64 61 74 61 20 73 74 6f 72 /value data stor
08c0: 65 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5b e</td>. <td>[
08d0: 68 74 74 70 73 3a 2f 2f 73 71 6c 69 74 65 2e 6f https://sqlite.o
08e0: 72 67 2f 6d 6f 73 74 64 65 70 6c 6f 79 65 64 2e rg/mostdeployed.
08f0: 68 74 6d 6c 7c 54 68 65 20 6d 6f 73 74 20 75 73 html|The most us
0900: 65 64 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 ed SQL database
0910: 69 6e 20 74 68 65 20 77 6f 72 6c 64 5d 3c 2f 74 in the world]</t
0920: 64 3e 0a 20 20 20 20 3c 74 64 3e 3c 61 20 68 72 d>. <td><a hr
0930: 65 66 3d 22 23 64 75 72 61 62 6c 65 22 3e 32 2e ef="#durable">2.
0940: 33 26 6e 62 73 70 3b 26 64 61 72 72 3b 3c 2f 61 3 ↓</a
0950: 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 ></td>.</tr>.<tr
0960: 3e 0a 20 20 20 20 3c 74 64 3e 52 75 6e 73 20 6e >. <td>Runs n
0970: 61 74 69 76 65 6c 79 20 6f 6e 20 50 4f 53 49 58 atively on POSIX
0980: 20 73 79 73 74 65 6d 73 3c 2f 74 64 3e 0a 20 20 systems</td>.
0990: 20 20 3c 74 64 3e 52 75 6e 73 20 6e 61 74 69 76 <td>Runs nativ
09a0: 65 6c 79 20 6f 6e 20 62 6f 74 68 20 50 4f 53 49 ely on both POSI
09b0: 58 20 61 6e 64 20 57 69 6e 64 6f 77 73 3c 2f 74 X and Windows</t
09c0: 64 3e 0a 20 20 20 20 3c 74 64 3e 3c 61 20 68 72 d>. <td><a hr
09d0: 65 66 3d 22 23 70 6f 72 74 61 62 6c 65 22 3e 32 ef="#portable">2
09e0: 2e 34 26 6e 62 73 70 3b 26 64 61 72 72 3b 3c 2f .4 ↓</
09f0: 61 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 a></td>.</tr>.<t
0a00: 72 3e 0a 20 20 20 20 3c 74 64 3e 42 61 7a 61 61 r>. <td>Bazaa
0a10: 72 2d 73 74 79 6c 65 20 64 65 76 65 6c 6f 70 6d r-style developm
0a20: 65 6e 74 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 ent</td>. <td
0a30: 3e 43 61 74 68 65 64 72 61 6c 2d 73 74 79 6c 65 >Cathedral-style
0a40: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 3c 2f 74 64 development</td
0a50: 3e 0a 20 20 20 20 3c 74 64 3e 3c 61 20 68 72 65 >. <td><a hre
0a60: 66 3d 22 23 64 65 76 6f 72 67 22 3e 32 2e 35 2e f="#devorg">2.5.
0a70: 31 26 6e 62 73 70 3b 26 64 61 72 72 3b 3c 2f 61 1 ↓</a
0a80: 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 ></td>.</tr>.<tr
0a90: 3e 0a 20 20 20 20 3c 74 64 3e 44 65 73 69 67 6e >. <td>Design
0aa0: 65 64 20 66 6f 72 20 4c 69 6e 75 78 20 6b 65 72 ed for Linux ker
0ab0: 6e 65 6c 20 64 65 76 65 6c 6f 70 6d 65 6e 74 3c nel development<
0ac0: 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 44 65 73 /td>. <td>Des
0ad0: 69 67 6e 65 64 20 66 6f 72 20 53 51 4c 69 74 65 igned for SQLite
0ae0: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 3c 2f 74 64 development</td
0af0: 3e 0a 20 20 20 20 3c 74 64 3e 3c 61 20 68 72 65 >. <td><a hre
0b00: 66 3d 22 23 73 63 61 6c 65 22 3e 32 2e 35 2e 32 f="#scale">2.5.2
0b10: 26 6e 62 73 70 3b 26 64 61 72 72 3b 3c 2f 61 3e ↓</a>
0b20: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e </td>.</tr>.<tr>
0b30: 0a 20 20 20 20 3c 74 64 3e 46 6f 63 75 73 20 6f . <td>Focus o
0b40: 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 62 72 61 n individual bra
0b50: 6e 63 68 65 73 3c 2f 74 64 3e 0a 20 20 20 20 3c nches</td>. <
0b60: 74 64 3e 46 6f 63 75 73 20 6f 6e 20 74 68 65 20 td>Focus on the
0b70: 65 6e 74 69 72 65 20 74 72 65 65 20 6f 66 20 63 entire tree of c
0b80: 68 61 6e 67 65 73 3c 2f 74 64 3e 0a 20 20 20 20 hanges</td>.
0b90: 3c 74 64 3e 3c 61 20 68 72 65 66 3d 22 23 62 72 <td><a href="#br
0ba0: 61 6e 63 68 65 73 22 3e 32 2e 35 2e 33 26 6e 62 anches">2.5.3&nb
0bb0: 73 70 3b 26 64 61 72 72 3b 3c 2f 61 3e 3c 2f 74 sp;↓</a></t
0bc0: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 20 20 d>.</tr>.<tr>.
0bd0: 20 20 3c 74 64 3e 4f 6e 65 20 63 68 65 63 6b 2d <td>One check-
0be0: 6f 75 74 20 70 65 72 20 72 65 70 6f 73 69 74 6f out per reposito
0bf0: 72 79 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e ry</td>. <td>
0c00: 4d 61 6e 79 20 63 68 65 63 6b 2d 6f 75 74 73 20 Many check-outs
0c10: 70 65 72 20 72 65 70 6f 73 69 74 6f 72 79 3c 2f per repository</
0c20: 74 64 3e 0a 20 20 20 20 3c 74 64 3e 3c 61 20 68 td>. <td><a h
0c30: 72 65 66 3d 22 23 63 68 65 63 6b 6f 75 74 73 22 ref="#checkouts"
0c40: 3e 32 2e 36 26 6e 62 73 70 3b 26 64 61 72 72 3b >2.6 ↓
0c50: 3c 2f 61 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a </a></td>.</tr>.
0c60: 3c 74 72 3e 0a 20 20 20 20 3c 74 64 3e 52 65 6d <tr>. <td>Rem
0c70: 65 6d 62 65 72 73 20 77 68 61 74 20 79 6f 75 20 embers what you
0c80: 73 68 6f 75 6c 64 20 68 61 76 65 20 64 6f 6e 65 should have done
0c90: 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 52 65 </td>. <td>Re
0ca0: 6d 65 6d 62 65 72 73 20 77 68 61 74 20 79 6f 75 members what you
0cb0: 20 61 63 74 75 61 6c 6c 79 20 64 69 64 3c 2f 74 actually did</t
0cc0: 64 3e 0a 20 20 20 20 3c 74 64 3e 3c 61 20 68 72 d>. <td><a hr
0cd0: 65 66 3d 22 23 68 69 73 74 6f 72 79 22 3e 32 2e ef="#history">2.
0ce0: 37 26 6e 62 73 70 3b 26 64 61 72 72 3b 3c 2f 61 7 ↓</a
0cf0: 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 ></td>.</tr>.<tr
0d00: 3e 0a 20 20 20 20 3c 74 64 3e 43 6f 6d 6d 69 74 >. <td>Commit
0d10: 20 66 69 72 73 74 3c 2f 74 64 3e 0a 20 20 20 20 first</td>.
0d20: 3c 74 64 3e 54 65 73 74 20 66 69 72 73 74 3c 2f <td>Test first</
0d30: 74 64 3e 0a 20 20 20 20 3c 74 64 3e 3c 61 20 68 td>. <td><a h
0d40: 72 65 66 3d 22 23 74 65 73 74 69 6e 67 22 3e 32 ref="#testing">2
0d50: 2e 38 26 6e 62 73 70 3b 26 64 61 72 72 3b 3c 2f .8 ↓</
0d60: 61 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 a></td>.</tr>.<t
0d70: 72 3e 0a 20 20 20 20 3c 74 64 3e 53 48 41 2d 31 r>. <td>SHA-1
0d80: 20 6f 72 20 53 48 41 2d 32 3c 2f 74 64 3e 0a 20 or SHA-2</td>.
0d90: 20 20 20 3c 74 64 3e 53 48 41 2d 31 20 61 6e 64 <td>SHA-1 and
0da0: 2f 6f 72 20 53 48 41 2d 33 2c 20 69 6e 20 74 68 /or SHA-3, in th
0db0: 65 20 73 61 6d 65 20 72 65 70 6f 73 69 74 6f 72 e same repositor
0dc0: 79 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 3c y</td>. <td><
0dd0: 61 20 68 72 65 66 3d 22 23 68 61 73 68 22 3e 32 a href="#hash">2
0de0: 2e 39 26 6e 62 73 70 3b 26 64 61 72 72 3b 3c 2f .9 ↓</
0df0: 61 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f a></td>.</tr>.</
0e00: 74 61 62 6c 65 3e 0a 0a 3c 68 33 20 69 64 3d 22 table>..<h3 id="
0e10: 66 65 61 74 75 72 65 73 22 3e 32 2e 31 20 46 65 features">2.1 Fe
0e20: 61 74 75 72 65 66 75 6c 3c 2f 68 33 3e 0a 0a 47 atureful</h3>..G
0e30: 69 74 20 70 72 6f 76 69 64 65 73 20 66 69 6c 65 it provides file
0e40: 20 76 65 72 73 69 6f 6e 69 6e 67 20 73 65 72 76 versioning serv
0e50: 69 63 65 73 20 6f 6e 6c 79 2c 20 77 68 65 72 65 ices only, where
0e60: 61 73 20 46 6f 73 73 69 6c 20 61 64 64 73 0a 61 as Fossil adds.a
0e70: 6e 20 69 6e 74 65 67 72 61 74 65 64 20 5b 2e 2f n integrated [./
0e80: 77 69 6b 69 74 68 65 6f 72 79 2e 77 69 6b 69 20 wikitheory.wiki
0e90: 7c 20 77 69 6b 69 5d 2c 0a 5b 2e 2f 62 75 67 74 | wiki],.[./bugt
0ea0: 68 65 6f 72 79 2e 77 69 6b 69 20 7c 20 74 69 63 heory.wiki | tic
0eb0: 6b 65 74 69 6e 67 20 26 61 6d 70 3b 20 62 75 67 keting & bug
0ec0: 20 74 72 61 63 6b 69 6e 67 5d 2c 0a 5b 2e 2f 65 tracking],.[./e
0ed0: 6d 62 65 64 64 65 64 64 6f 63 2e 77 69 6b 69 20 mbeddeddoc.wiki
0ee0: 7c 20 65 6d 62 65 64 64 65 64 20 64 6f 63 75 6d | embedded docum
0ef0: 65 6e 74 61 74 69 6f 6e 5d 2c 20 0a 5b 2e 2f 65 entation], .[./e
0f00: 76 65 6e 74 2e 77 69 6b 69 20 7c 20 74 65 63 68 vent.wiki | tech
0f10: 6e 69 63 61 6c 20 6e 6f 74 65 73 5d 2c 20 61 20 nical notes], a
0f20: 5b 2e 2f 66 6f 72 75 6d 2e 77 69 6b 69 20 7c 20 [./forum.wiki |
0f30: 77 65 62 20 66 6f 72 75 6d 5d 2c 0a 61 6e 64 20 web forum],.and
0f40: 61 20 5b 2e 2f 63 68 61 74 2e 6d 64 20 7c 20 63 a [./chat.md | c
0f50: 68 61 74 20 73 65 72 76 69 63 65 5d 2c 0a 61 6c hat service],.al
0f60: 6c 20 77 69 74 68 69 6e 20 61 20 73 69 6e 67 6c l within a singl
0f70: 65 20 6e 69 63 65 6c 79 2d 64 65 73 69 67 6e 65 e nicely-designe
0f80: 64 20 5b 2e 2f 63 75 73 74 6f 6d 73 6b 69 6e 2e d [./customskin.
0f90: 6d 64 7c 73 6b 69 6e 6e 61 62 6c 65 5d 20 77 65 md|skinnable] we
0fa0: 62 0a 5b 2f 68 65 6c 70 3f 63 6d 64 3d 75 69 7c b.[/help?cmd=ui|
0fb0: 55 49 5d 2c 0a 70 72 6f 74 65 63 74 65 64 20 62 UI],.protected b
0fc0: 79 20 5b 2e 2f 63 61 70 73 2f 20 7c 20 61 20 66 y [./caps/ | a f
0fd0: 69 6e 65 2d 67 72 61 69 6e 65 64 20 72 6f 6c 65 ine-grained role
0fe0: 2d 62 61 73 65 64 0a 61 63 63 65 73 73 20 63 6f -based.access co
0ff0: 6e 74 72 6f 6c 20 73 79 73 74 65 6d 5d 2e 0a 54 ntrol system]..T
1000: 68 65 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 hese additional
1010: 63 61 70 61 62 69 6c 69 74 69 65 73 20 61 72 65 capabilities are
1020: 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 47 available for G
1030: 69 74 20 61 73 20 33 72 64 2d 70 61 72 74 79 0a it as 3rd-party.
1040: 61 64 64 2d 6f 6e 73 2c 20 62 75 74 20 77 69 74 add-ons, but wit
1050: 68 20 46 6f 73 73 69 6c 20 74 68 65 79 20 61 72 h Fossil they ar
1060: 65 20 69 6e 74 65 67 72 61 74 65 64 20 69 6e 74 e integrated int
1070: 6f 0a 74 68 65 20 64 65 73 69 67 6e 2c 20 74 6f o.the design, to
1080: 20 74 68 65 20 70 6f 69 6e 74 20 74 68 61 74 20 the point that
1090: 69 74 20 61 70 70 72 6f 78 69 6d 61 74 65 73 0a it approximates.
10a0: 22 5b 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 "[https://github
10b0: 2e 63 6f 6d 2f 20 7c 20 47 69 74 48 75 62 5d 2d .com/ | GitHub]-
10c0: 69 6e 2d 61 2d 62 6f 78 2e 22 0a 0a 45 76 65 6e in-a-box."..Even
10d0: 20 69 66 20 79 6f 75 20 6f 6e 6c 79 20 77 61 6e if you only wan
10e0: 74 20 73 74 72 61 69 67 68 74 20 76 65 72 73 69 t straight versi
10f0: 6f 6e 20 63 6f 6e 74 72 6f 6c 2c 20 46 6f 73 73 on control, Foss
1100: 69 6c 20 68 61 73 20 61 66 66 6f 72 64 61 6e 63 il has affordanc
1110: 65 73 0a 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 es.not available
1120: 20 69 6e 20 47 69 74 2e 0a 0a 46 6f 72 20 69 6e in Git...For in
1130: 73 74 61 6e 63 65 2c 20 46 6f 73 73 69 6c 20 63 stance, Fossil c
1140: 61 6e 20 64 6f 20 6f 70 65 72 61 74 69 6f 6e 73 an do operations
1150: 20 6f 76 65 72 20 61 6c 6c 20 6c 6f 63 61 6c 20 over all local
1160: 72 65 70 6f 20 63 6c 6f 6e 65 73 20 61 6e 64 0a repo clones and.
1170: 63 68 65 63 6b 2d 6f 75 74 20 64 69 72 65 63 74 check-out direct
1180: 6f 72 69 65 73 20 77 69 74 68 20 61 20 73 69 6e ories with a sin
1190: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 20 59 6f 75 gle command. You
11a0: 20 63 61 6e 20 73 61 79 20 22 3c 74 74 3e 66 6f can say "<tt>fo
11b0: 73 73 69 6c 0a 61 6c 6c 20 73 79 6e 63 3c 2f 74 ssil.all sync</t
11c0: 74 3e 22 20 6f 6e 20 61 20 6c 61 70 74 6f 70 20 t>" on a laptop
11d0: 70 72 69 6f 72 20 74 6f 20 74 61 6b 69 6e 67 20 prior to taking
11e0: 69 74 20 6f 66 66 20 74 68 65 20 6e 65 74 77 6f it off the netwo
11f0: 72 6b 20 68 6f 73 74 69 6e 67 0a 74 68 6f 73 65 rk hosting.those
1200: 20 72 65 70 6f 73 2c 20 61 73 20 62 65 66 6f 72 repos, as befor
1210: 65 20 67 6f 69 6e 67 20 6f 6e 20 61 20 74 72 69 e going on a tri
1220: 70 2e 20 20 49 74 20 64 6f 65 73 6e 27 74 20 6d p. It doesn't m
1230: 61 74 74 65 72 20 69 66 20 74 68 6f 73 65 0a 72 atter if those.r
1240: 65 70 6f 73 20 61 72 65 20 70 72 69 76 61 74 65 epos are private
1250: 20 61 6e 64 20 72 65 73 74 72 69 63 74 65 64 20 and restricted
1260: 74 6f 20 79 6f 75 72 20 63 6f 6d 70 61 6e 79 20 to your company
1270: 6e 65 74 77 6f 72 6b 20 6f 72 20 70 75 62 6c 69 network or publi
1280: 63 0a 49 6e 74 65 72 6e 65 74 2d 68 6f 73 74 65 c.Internet-hoste
1290: 64 20 72 65 70 6f 73 2c 20 79 6f 75 20 67 65 74 d repos, you get
12a0: 20 73 79 6e 63 65 64 20 75 70 20 77 69 74 68 20 synced up with
12b0: 65 76 65 72 79 74 68 69 6e 67 20 79 6f 75 20 6e everything you n
12c0: 65 65 64 20 77 68 69 6c 65 0a 6f 66 66 2d 6e 65 eed while.off-ne
12d0: 74 77 6f 72 6b 2e 0a 0a 59 6f 75 20 67 65 74 20 twork...You get
12e0: 74 68 65 20 73 61 6d 65 20 63 61 70 61 62 69 6c the same capabil
12f0: 69 74 79 20 77 69 74 68 20 73 65 76 65 72 61 6c ity with several
1300: 20 6f 74 68 65 72 20 46 6f 73 73 69 6c 0a 73 75 other Fossil.su
1310: 62 2d 63 6f 6d 6d 61 6e 64 73 20 61 73 20 77 65 b-commands as we
1320: 6c 6c 2c 20 73 75 63 68 20 61 73 20 22 3c 74 74 ll, such as "<tt
1330: 3e 66 6f 73 73 69 6c 20 61 6c 6c 20 63 68 61 6e >fossil all chan
1340: 67 65 73 3c 2f 74 74 3e 22 20 74 6f 20 67 65 74 ges</tt>" to get
1350: 20 61 20 6c 69 73 74 20 6f 66 20 66 69 6c 65 73 a list of files
1360: 0a 74 68 61 74 20 79 6f 75 20 66 6f 72 67 6f 74 .that you forgot
1370: 20 74 6f 20 63 6f 6d 6d 69 74 20 70 72 69 6f 72 to commit prior
1380: 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 79 to the end of y
1390: 6f 75 72 20 77 6f 72 6b 69 6e 67 20 64 61 79 2c our working day,
13a0: 20 61 63 72 6f 73 73 0a 61 6c 6c 20 72 65 70 6f across.all repo
13b0: 73 2e 0a 0a 57 68 65 6e 65 76 65 72 20 46 6f 73 s...Whenever Fos
13c0: 73 69 6c 20 69 73 20 74 6f 6c 64 20 74 6f 20 6d sil is told to m
13d0: 6f 64 69 66 79 20 74 68 65 20 6c 6f 63 61 6c 20 odify the local
13e0: 63 68 65 63 6b 6f 75 74 20 69 6e 20 73 6f 6d 65 checkout in some
13f0: 20 64 65 73 74 72 75 63 74 69 76 65 0a 77 61 79 destructive.way
1400: 20 28 5b 2f 68 65 6c 70 3f 63 6d 64 3d 72 6d 7c ([/help?cmd=rm|
1410: 66 6f 73 73 69 6c 20 72 6d 5d 2c 20 5b 2f 68 65 fossil rm], [/he
1420: 6c 70 3f 63 6d 64 3d 75 70 64 61 74 65 7c 66 6f lp?cmd=update|fo
1430: 73 73 69 6c 20 75 70 64 61 74 65 5d 2c 0a 5b 2f ssil update],.[/
1440: 68 65 6c 70 3f 63 6d 64 3d 72 65 76 65 72 74 7c help?cmd=revert|
1450: 66 6f 73 73 69 6c 20 72 65 76 65 72 74 5d 2c 20 fossil revert],
1460: 65 74 63 2e 29 20 46 6f 73 73 69 6c 20 72 65 6d etc.) Fossil rem
1470: 65 6d 62 65 72 73 20 74 68 65 20 70 72 69 6f 72 embers the prior
1480: 20 73 74 61 74 65 0a 61 6e 64 20 69 73 20 61 62 state.and is ab
1490: 6c 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 le to return the
14a0: 20 63 68 65 63 6b 2d 6f 75 74 20 64 69 72 65 63 check-out direc
14b0: 74 6f 72 79 20 74 6f 20 74 68 61 74 20 73 74 61 tory to that sta
14c0: 74 65 20 77 69 74 68 20 61 0a 3c 74 74 3e 66 6f te with a.<tt>fo
14d0: 73 73 69 6c 20 75 6e 64 6f 3c 2f 74 74 3e 20 63 ssil undo</tt> c
14e0: 6f 6d 6d 61 6e 64 2e 20 57 68 69 6c 65 20 79 6f ommand. While yo
14f0: 75 20 63 61 6e 6e 6f 74 20 75 6e 64 6f 20 61 20 u cannot undo a
1500: 63 6f 6d 6d 69 74 20 69 6e 20 46 6f 73 73 69 6c commit in Fossil
1510: 0a e2 80 94 20 5b 23 68 69 73 74 6f 72 79 20 7c .— [#history |
1520: 20 6f 6e 20 70 75 72 70 6f 73 65 21 5d 20 e2 80 on purpose!]
1530: 94 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 as long as the
1540: 20 63 68 61 6e 67 65 20 72 65 6d 61 69 6e 73 20 change remains
1550: 63 6f 6e 66 69 6e 65 64 20 74 6f 0a 74 68 65 20 confined to.the
1560: 6c 6f 63 61 6c 20 63 68 65 63 6b 2d 6f 75 74 20 local check-out
1570: 64 69 72 65 63 74 6f 72 79 20 6f 6e 6c 79 2c 20 directory only,
1580: 46 6f 73 73 69 6c 20 6d 61 6b 65 73 20 75 6e 64 Fossil makes und
1590: 6f 0a 5b 68 74 74 70 73 3a 2f 2f 67 69 74 2d 73 o.[https://git-s
15a0: 63 6d 2e 63 6f 6d 2f 62 6f 6f 6b 2f 65 6e 2f 76 cm.com/book/en/v
15b0: 32 2f 47 69 74 2d 42 61 73 69 63 73 2d 55 6e 64 2/Git-Basics-Und
15c0: 6f 69 6e 67 2d 54 68 69 6e 67 73 7c 65 61 73 69 oing-Things|easi
15d0: 65 72 20 74 68 61 6e 20 69 6e 0a 47 69 74 5d 2e er than in.Git].
15e0: 0a 0a 46 6f 72 20 64 65 76 65 6c 6f 70 65 72 73 ..For developers
15f0: 20 77 68 6f 20 63 68 6f 6f 73 65 20 74 6f 20 73 who choose to s
1600: 65 6c 66 2d 68 6f 73 74 20 70 72 6f 6a 65 63 74 elf-host project
1610: 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 s rather than re
1620: 6c 79 20 6f 6e 20 61 0a 33 72 64 2d 70 61 72 74 ly on a.3rd-part
1630: 79 20 73 65 72 76 69 63 65 20 73 75 63 68 20 61 y service such a
1640: 73 20 47 69 74 48 75 62 2c 20 46 6f 73 73 69 6c s GitHub, Fossil
1650: 20 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 is much easier
1660: 74 6f 20 73 65 74 20 75 70 3a 0a 74 68 65 20 73 to set up:.the s
1670: 74 61 6e 64 2d 61 6c 6f 6e 65 20 46 6f 73 73 69 tand-alone Fossi
1680: 6c 20 65 78 65 63 75 74 61 62 6c 65 20 74 6f 67 l executable tog
1690: 65 74 68 65 72 20 77 69 74 68 20 61 20 5b 2e 2f ether with a [./
16a0: 73 65 72 76 65 72 2f 61 6e 79 2f 63 67 69 2e 6d server/any/cgi.m
16b0: 64 7c 32 2d 6c 69 6e 65 20 43 47 49 20 73 63 72 d|2-line CGI scr
16c0: 69 70 74 5d 0a 73 75 66 66 69 63 65 20 74 6f 20 ipt].suffice to
16d0: 69 6e 73 74 61 6e 74 69 61 74 65 20 61 20 66 75 instantiate a fu
16e0: 6c 6c 2d 66 65 61 74 75 72 65 64 20 64 65 76 65 ll-featured deve
16f0: 6c 6f 70 65 72 20 77 65 62 73 69 74 65 2e 20 20 loper website.
1700: 54 6f 20 61 63 63 6f 6d 70 6c 69 73 68 0a 74 68 To accomplish.th
1710: 65 20 73 61 6d 65 20 75 73 69 6e 67 20 47 69 74 e same using Git
1720: 20 72 65 71 75 69 72 65 73 20 6c 6f 63 61 74 69 requires locati
1730: 6e 67 2c 20 69 6e 73 74 61 6c 6c 69 6e 67 2c 20 ng, installing,
1740: 63 6f 6e 66 69 67 75 72 69 6e 67 2c 20 69 6e 74 configuring, int
1750: 65 67 72 61 74 69 6e 67 2c 0a 61 6e 64 20 6d 61 egrating,.and ma
1760: 6e 61 67 69 6e 67 20 61 20 77 69 64 65 20 61 73 naging a wide as
1770: 73 6f 72 74 6d 65 6e 74 20 6f 66 20 73 65 70 61 sortment of sepa
1780: 72 61 74 65 20 74 6f 6f 6c 73 2e 20 20 53 74 61 rate tools. Sta
1790: 6e 64 69 6e 67 20 75 70 20 61 20 64 65 76 65 6c nding up a devel
17a0: 6f 70 65 72 0a 77 65 62 73 69 74 65 20 75 73 69 oper.website usi
17b0: 6e 67 20 46 6f 73 73 69 6c 20 63 61 6e 20 62 65 ng Fossil can be
17c0: 20 64 6f 6e 65 20 69 6e 20 6d 69 6e 75 74 65 73 done in minutes
17d0: 2c 20 77 68 65 72 65 61 73 20 64 6f 69 6e 67 20 , whereas doing
17e0: 74 68 65 20 73 61 6d 65 20 75 73 69 6e 67 0a 47 the same using.G
17f0: 69 74 20 72 65 71 75 69 72 65 73 20 68 6f 75 72 it requires hour
1800: 73 20 6f 72 20 64 61 79 73 2e 0a 0a 46 6f 73 73 s or days...Foss
1810: 69 6c 20 69 73 20 73 6d 61 6c 6c 2c 20 63 6f 6d il is small, com
1820: 70 6c 65 74 65 2c 20 61 6e 64 20 73 65 6c 66 2d plete, and self-
1830: 63 6f 6e 74 61 69 6e 65 64 2e 20 20 49 66 20 79 contained. If y
1840: 6f 75 20 63 6c 6f 6e 65 0a 5b 68 74 74 70 73 3a ou clone.[https:
1850: 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 67 69 74 //github.com/git
1860: 2f 67 69 74 7c 47 69 74 27 73 20 73 65 6c 66 2d /git|Git's self-
1870: 68 6f 73 74 69 6e 67 20 72 65 70 6f 73 69 74 6f hosting reposito
1880: 72 79 5d 2c 20 79 6f 75 20 67 65 74 20 6a 75 73 ry], you get jus
1890: 74 0a 47 69 74 27 73 20 73 6f 75 72 63 65 20 63 t.Git's source c
18a0: 6f 64 65 2e 20 20 49 66 20 79 6f 75 20 63 6c 6f ode. If you clo
18b0: 6e 65 20 46 6f 73 73 69 6c 27 73 20 73 65 6c 66 ne Fossil's self
18c0: 2d 68 6f 73 74 69 6e 67 20 72 65 70 6f 73 69 74 -hosting reposit
18d0: 6f 72 79 2c 20 79 6f 75 0a 67 65 74 20 74 68 65 ory, you.get the
18e0: 20 65 6e 74 69 72 65 20 46 6f 73 73 69 6c 20 77 entire Fossil w
18f0: 65 62 73 69 74 65 20 e2 80 94 20 73 6f 75 72 63 ebsite — sourc
1900: 65 20 63 6f 64 65 2c 20 64 6f 63 75 6d 65 6e 74 e code, document
1910: 61 74 69 6f 6e 2c 20 74 69 63 6b 65 74 0a 68 69 ation, ticket.hi
1920: 73 74 6f 72 79 2c 20 61 6e 64 20 73 6f 20 66 6f story, and so fo
1930: 72 74 68 2e c2 b2 20 54 68 61 74 20 6d 65 61 6e rth.² That mean
1940: 73 20 79 6f 75 20 67 65 74 20 61 20 63 6f 70 79 s you get a copy
1950: 20 6f 66 20 74 68 69 73 20 76 65 72 79 20 61 72 of this very ar
1960: 74 69 63 6c 65 0a 61 6e 64 20 61 6c 6c 20 6f 66 ticle.and all of
1970: 20 69 74 73 20 68 69 73 74 6f 72 69 63 61 6c 20 its historical
1980: 76 65 72 73 69 6f 6e 73 2c 20 70 6c 75 73 20 74 versions, plus t
1990: 68 65 20 73 61 6d 65 20 66 6f 72 20 61 6c 6c 20 he same for all
19a0: 6f 66 20 74 68 65 20 6f 74 68 65 72 0a 70 75 62 of the other.pub
19b0: 6c 69 63 20 63 6f 6e 74 65 6e 74 20 6f 6e 20 74 lic content on t
19c0: 68 69 73 20 73 69 74 65 2e 0a 0a 0a 3c 68 33 20 his site....<h3
19d0: 69 64 3d 22 73 65 6c 66 63 6f 6e 74 61 69 6e 65 id="selfcontaine
19e0: 64 22 20 6e 61 6d 65 3d 22 73 65 6c 66 63 6f 6e d" name="selfcon
19f0: 74 61 69 6e 65 64 22 3e 32 2e 32 20 53 65 6c 66 tained">2.2 Self
1a00: 20 43 6f 6e 74 61 69 6e 65 64 3c 2f 68 33 3e 0a Contained</h3>.
1a10: 0a 47 69 74 20 69 73 20 61 63 74 75 61 6c 6c 79 .Git is actually
1a20: 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 a collection of
1a30: 20 6d 61 6e 79 20 73 6d 61 6c 6c 20 74 6f 6f 6c many small tool
1a40: 73 2c 20 65 61 63 68 20 64 6f 69 6e 67 20 6f 6e s, each doing on
1a50: 65 20 73 6d 61 6c 6c 0a 70 61 72 74 20 6f 66 20 e small.part of
1a60: 74 68 65 20 6a 6f 62 2c 20 77 68 69 63 68 20 63 the job, which c
1a70: 61 6e 20 62 65 20 72 65 63 6f 6d 62 69 6e 65 64 an be recombined
1a80: 20 28 62 79 20 65 78 70 65 72 74 73 29 20 74 6f (by experts) to
1a90: 20 70 65 72 66 6f 72 6d 0a 70 6f 77 65 72 66 75 perform.powerfu
1aa0: 6c 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 47 69 l operations. Gi
1ab0: 74 20 68 61 73 20 61 20 6c 6f 74 20 6f 66 20 63 t has a lot of c
1ac0: 6f 6d 70 6c 65 78 69 74 79 20 61 6e 64 20 6d 61 omplexity and ma
1ad0: 6e 79 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2c ny dependencies,
1ae0: 0a 73 6f 20 74 68 61 74 20 6d 6f 73 74 20 70 65 .so that most pe
1af0: 6f 70 6c 65 20 65 6e 64 20 75 70 20 69 6e 73 74 ople end up inst
1b00: 61 6c 6c 69 6e 67 20 69 74 20 76 69 61 20 73 6f alling it via so
1b10: 6d 65 20 6b 69 6e 64 20 6f 66 20 70 61 63 6b 61 me kind of packa
1b20: 67 65 0a 6d 61 6e 61 67 65 72 2c 20 73 69 6d 70 ge.manager, simp
1b30: 6c 79 20 62 65 63 61 75 73 65 20 74 68 65 20 63 ly because the c
1b40: 72 65 61 74 69 6f 6e 20 6f 66 20 63 6f 6d 70 6c reation of compl
1b50: 69 63 61 74 65 64 20 62 69 6e 61 72 79 20 70 61 icated binary pa
1b60: 63 6b 61 67 65 73 20 69 73 0a 62 65 73 74 20 64 ckages is.best d
1b70: 65 6c 65 67 61 74 65 64 20 74 6f 20 70 65 6f 70 elegated to peop
1b80: 6c 65 20 73 6b 69 6c 6c 65 64 20 69 6e 20 74 68 le skilled in th
1b90: 65 69 72 20 63 72 65 61 74 69 6f 6e 2e 20 4e 6f eir creation. No
1ba0: 72 6d 61 6c 20 47 69 74 20 75 73 65 72 73 20 61 rmal Git users a
1bb0: 72 65 0a 6e 6f 74 20 65 78 70 65 63 74 65 64 20 re.not expected
1bc0: 74 6f 20 62 75 69 6c 64 20 47 69 74 20 66 72 6f to build Git fro
1bd0: 6d 20 73 6f 75 72 63 65 20 61 6e 64 20 69 6e 73 m source and ins
1be0: 74 61 6c 6c 20 69 74 20 74 68 65 6d 73 65 6c 76 tall it themselv
1bf0: 65 73 2e 0a 0a 46 6f 73 73 69 6c 20 69 73 20 61 es...Fossil is a
1c00: 20 73 69 6e 67 6c 65 20 73 65 6c 66 2d 63 6f 6e single self-con
1c10: 74 61 69 6e 65 64 20 73 74 61 6e 64 2d 61 6c 6f tained stand-alo
1c20: 6e 65 20 65 78 65 63 75 74 61 62 6c 65 20 77 68 ne executable wh
1c30: 69 63 68 0a 64 65 70 65 6e 64 73 20 6f 6e 6c 79 ich.depends only
1c40: 20 6f 6e 20 63 6f 6d 6d 6f 6e 20 70 6c 61 74 66 on common platf
1c50: 6f 72 6d 20 6c 69 62 72 61 72 69 65 73 20 69 6e orm libraries in
1c60: 20 69 74 73 20 64 65 66 61 75 6c 74 20 63 6f 6e its default con
1c70: 66 69 67 75 72 61 74 69 6f 6e 2e 0a 54 6f 20 69 figuration..To i
1c80: 6e 73 74 61 6c 6c 20 6f 6e 65 20 6f 66 20 5b 68 nstall one of [h
1c90: 74 74 70 73 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 ttps://fossil-sc
1ca0: 6d 2e 6f 72 67 2f 68 6f 6d 65 2f 75 76 2f 64 6f m.org/home/uv/do
1cb0: 77 6e 6c 6f 61 64 2e 68 74 6d 6c 20 7c 20 6f 75 wnload.html | ou
1cc0: 72 0a 70 72 65 63 6f 6d 70 69 6c 65 64 20 62 69 r.precompiled bi
1cd0: 6e 61 72 69 65 73 5d 2c 20 75 6e 70 61 63 6b 20 naries], unpack
1ce0: 74 68 65 20 65 78 65 63 75 74 61 62 6c 65 20 66 the executable f
1cf0: 72 6f 6d 20 74 68 65 20 61 72 63 68 69 76 65 20 rom the archive
1d00: 61 6e 64 20 70 75 74 20 69 74 0a 73 6f 6d 65 77 and put it.somew
1d10: 68 65 72 65 20 69 6e 20 79 6f 75 72 20 3c 74 74 here in your <tt
1d20: 3e 50 41 54 48 3c 2f 74 74 3e 2e 20 54 6f 20 75 >PATH</tt>. To u
1d30: 6e 69 6e 73 74 61 6c 6c 20 69 74 2c 20 64 65 6c ninstall it, del
1d40: 65 74 65 20 74 68 65 20 65 78 65 63 75 74 61 62 ete the executab
1d50: 6c 65 2e 0a 0a 54 68 69 73 20 70 6f 6c 69 63 79 le...This policy
1d60: 20 69 73 20 70 61 72 74 69 63 75 6c 61 72 6c 79 is particularly
1d70: 20 75 73 65 66 75 6c 20 77 68 65 6e 20 72 75 6e useful when run
1d80: 6e 69 6e 67 20 46 6f 73 73 69 6c 20 69 6e 73 69 ning Fossil insi
1d90: 64 65 20 61 0a 72 65 73 74 72 69 63 74 69 76 65 de a.restrictive
1da0: 20 63 6f 6e 74 61 69 6e 65 72 2c 20 61 6e 79 74 container, anyt
1db0: 68 69 6e 67 20 66 72 6f 6d 20 5b 2e 2f 63 68 72 hing from [./chr
1dc0: 6f 6f 74 2e 6d 64 20 7c 20 63 6c 61 73 73 69 63 oot.md | classic
1dd0: 20 63 68 72 6f 6f 74 0a 6a 61 69 6c 73 5d 20 74 chroot.jails] t
1de0: 6f 20 6d 6f 64 65 72 6e 20 5b 68 74 74 70 73 3a o modern [https:
1df0: 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f //en.wikipedia.o
1e00: 72 67 2f 77 69 6b 69 2f 4f 53 2d 6c 65 76 65 6c rg/wiki/OS-level
1e10: 5f 76 69 72 74 75 61 6c 69 7a 61 74 69 6f 6e 0a _virtualization.
1e20: 7c 20 4f 53 2d 6c 65 76 65 6c 20 76 69 72 74 75 | OS-level virtu
1e30: 61 6c 69 7a 61 74 69 6f 6e 20 6d 65 63 68 61 6e alization mechan
1e40: 69 73 6d 73 5d 20 73 75 63 68 20 61 73 0a 5b 68 isms] such as.[h
1e50: 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 ttps://en.wikipe
1e60: 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 44 6f 63 dia.org/wiki/Doc
1e70: 6b 65 72 5f 28 73 6f 66 74 77 61 72 65 29 20 7c ker_(software) |
1e80: 20 44 6f 63 6b 65 72 5d 2e 0a 4f 75 72 20 5b 2e Docker]..Our [.
1e90: 2f 63 6f 6e 74 61 69 6e 65 72 73 2e 6d 64 20 7c /containers.md |
1ea0: 20 73 74 6f 63 6b 20 63 6f 6e 74 61 69 6e 65 72 stock container
1eb0: 20 69 6d 61 67 65 5d 20 69 73 20 75 6e 64 65 72 image] is under
1ec0: 20 38 26 6e 62 73 70 3b 4d 42 20 77 68 65 6e 0a 8 MB when.
1ed0: 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 61 6e 64 uncompressed and
1ee0: 20 72 75 6e 6e 69 6e 67 2e 20 49 74 20 63 6f 6e running. It con
1ef0: 74 61 69 6e 73 20 6e 6f 74 68 69 6e 67 20 62 75 tains nothing bu
1f00: 74 20 61 20 73 69 6e 67 6c 65 0a 73 74 61 74 69 t a single.stati
1f10: 63 61 6c 6c 79 2d 6c 69 6e 6b 65 64 20 62 69 6e cally-linked bin
1f20: 61 72 79 2e 0a 0a 49 66 20 79 6f 75 20 62 75 69 ary...If you bui
1f30: 6c 64 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 ld a dynamically
1f40: 20 6c 69 6e 6b 65 64 20 62 69 6e 61 72 79 20 69 linked binary i
1f50: 6e 73 74 65 61 64 2c 20 46 6f 73 73 69 6c 27 73 nstead, Fossil's
1f60: 20 6f 6e 2d 64 69 73 6b 20 73 69 7a 65 0a 64 72 on-disk size.dr
1f70: 6f 70 73 20 74 6f 20 61 72 6f 75 6e 64 20 36 26 ops to around 6&
1f80: 6e 62 73 70 3b 4d 42 2c 20 61 6e 64 20 69 74 27 nbsp;MB, and it'
1f90: 73 20 64 65 70 65 6e 64 65 6e 74 20 6f 6e 6c 79 s dependent only
1fa0: 20 6f 6e 20 77 69 64 65 73 70 72 65 61 64 0a 70 on widespread.p
1fb0: 6c 61 74 66 6f 72 6d 20 6c 69 62 72 61 72 69 65 latform librarie
1fc0: 73 20 77 69 74 68 20 73 74 61 62 6c 65 20 41 42 s with stable AB
1fd0: 49 73 20 73 75 63 68 20 61 73 20 67 6c 69 62 63 Is such as glibc
1fe0: 2c 20 7a 6c 69 62 2c 20 61 6e 64 20 6f 70 65 6e , zlib, and open
1ff0: 73 73 6c 2e 0a 0a 46 75 6c 6c 20 73 74 61 74 69 ssl...Full stati
2000: 63 20 6c 69 6e 6b 69 6e 67 20 69 73 20 65 61 73 c linking is eas
2010: 69 65 72 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 ier on Windows,
2020: 73 6f 20 6f 75 72 20 70 72 65 63 6f 6d 70 69 6c so our precompil
2030: 65 64 20 57 69 6e 64 6f 77 73 0a 62 69 6e 61 72 ed Windows.binar
2040: 69 65 73 20 61 72 65 20 6a 75 73 74 20 61 20 5a ies are just a Z
2050: 49 50 20 61 72 63 68 69 76 65 0a 63 6f 6e 74 61 IP archive.conta
2060: 69 6e 69 6e 67 20 6f 6e 6c 79 20 22 3c 74 74 3e ining only "<tt>
2070: 66 6f 73 73 69 6c 2e 65 78 65 3c 2f 74 74 3e 22 fossil.exe</tt>"
2080: 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 20 22 . There is no "
2090: 3c 74 74 3e 73 65 74 75 70 2e 65 78 65 3c 2f 74 <tt>setup.exe</t
20a0: 74 3e 22 0a 74 6f 20 72 75 6e 2e 0a 0a 46 6f 73 t>".to run...Fos
20b0: 73 69 6c 20 69 73 20 65 61 73 79 20 74 6f 20 62 sil is easy to b
20c0: 75 69 6c 64 20 66 72 6f 6d 20 73 6f 75 72 63 65 uild from source
20d0: 73 2e 20 4a 75 73 74 20 72 75 6e 0a 22 3c 74 74 s. Just run."<tt
20e0: 3e 2e 2f 63 6f 6e 66 69 67 75 72 65 20 26 26 20 >./configure &&
20f0: 6d 61 6b 65 3c 2f 74 74 3e 22 20 6f 6e 20 50 4f make</tt>" on PO
2100: 53 49 58 20 73 79 73 74 65 6d 73 20 61 6e 64 0a SIX systems and.
2110: 22 3c 74 74 3e 6e 6d 61 6b 65 20 2f 66 20 4d 61 "<tt>nmake /f Ma
2120: 6b 65 66 69 6c 65 2e 6d 73 63 3c 2f 74 74 3e 22 kefile.msc</tt>"
2130: 20 6f 6e 20 57 69 6e 64 6f 77 73 2e 0a 0a 43 6f on Windows...Co
2140: 6e 74 72 61 73 74 20 61 20 62 61 73 69 63 20 69 ntrast a basic i
2150: 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 6f 66 20 47 nstallation of G
2160: 69 74 2c 20 77 68 69 63 68 20 74 61 6b 65 73 20 it, which takes
2170: 75 70 20 61 62 6f 75 74 0a 31 35 26 6e 62 73 70 up about.15 
2180: 3b 4d 69 42 20 6f 6e 20 44 65 62 69 61 6e 20 31 ;MiB on Debian 1
2190: 30 20 61 63 72 6f 73 73 20 32 33 30 20 66 69 6c 0 across 230 fil
21a0: 65 73 2c 20 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 es, not counting
21b0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 the contents of
21c0: 0a 3c 74 74 3e 2f 75 73 72 2f 73 68 61 72 65 2f .<tt>/usr/share/
21d0: 64 6f 63 3c 2f 74 74 3e 20 6f 72 20 3c 74 74 3e doc</tt> or <tt>
21e0: 2f 75 73 72 2f 73 68 61 72 65 2f 6c 6f 63 61 6c /usr/share/local
21f0: 65 3c 2f 74 74 3e 2e 20 49 66 20 79 6f 75 20 6e e</tt>. If you n
2200: 65 65 64 20 74 6f 0a 64 65 70 6c 6f 79 20 74 6f eed to.deploy to
2210: 20 61 6e 79 20 70 6c 61 74 66 6f 72 6d 20 77 68 any platform wh
2220: 65 72 65 20 79 6f 75 20 63 61 6e 6e 6f 74 20 63 ere you cannot c
2230: 6f 75 6e 74 20 6f 6e 20 66 61 63 69 6c 69 74 69 ount on faciliti
2240: 65 73 20 6c 69 6b 65 20 74 68 65 20 50 4f 53 49 es like the POSI
2250: 58 0a 73 68 65 6c 6c 2c 20 50 65 72 6c 20 69 6e X.shell, Perl in
2260: 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 54 terpreter, and T
2270: 63 6c 2f 54 6b 20 70 6c 61 74 66 6f 72 6d 20 6e cl/Tk platform n
2280: 65 65 64 65 64 20 74 6f 20 66 75 6c 6c 79 20 75 eeded to fully u
2290: 73 65 20 47 69 74 0a 61 73 20 70 61 72 74 20 6f se Git.as part o
22a0: 66 20 74 68 65 20 62 61 73 65 20 70 6c 61 74 66 f the base platf
22b0: 6f 72 6d 2c 20 74 68 65 20 66 75 6c 6c 20 66 6f orm, the full fo
22c0: 6f 74 70 72 69 6e 74 20 6f 66 20 61 20 47 69 74 otprint of a Git
22d0: 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 0a 65 78 installation.ex
22e0: 74 65 6e 64 73 20 74 6f 20 6d 6f 72 65 20 6c 69 tends to more li
22f0: 6b 65 20 34 35 26 6e 62 73 70 3b 4d 69 42 20 61 ke 45 MiB a
2300: 6e 64 20 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 nd thousands of
2310: 66 69 6c 65 73 2e 20 54 68 69 73 20 63 6f 6d 70 files. This comp
2320: 6c 69 63 61 74 65 73 0a 73 65 76 65 72 61 6c 20 licates.several
2330: 63 6f 6d 6d 6f 6e 20 73 63 65 6e 61 72 69 6f 73 common scenarios
2340: 3a 20 47 69 74 20 66 6f 72 20 57 69 6e 64 6f 77 : Git for Window
2350: 73 2c 20 63 68 72 6f 6f 74 65 64 20 47 69 74 20 s, chrooted Git
2360: 73 65 72 76 65 72 73 2c 0a 44 6f 63 6b 65 72 20 servers,.Docker
2370: 69 6d 61 67 65 73 2e 2e 2e 0a 0a 53 6f 6d 65 20 images.....Some
2380: 73 61 79 20 74 68 61 74 20 47 69 74 20 6d 6f 72 say that Git mor
2390: 65 20 63 6c 6f 73 65 6c 79 20 61 64 68 65 72 65 e closely adhere
23a0: 73 20 74 6f 20 74 68 65 20 55 6e 69 78 20 70 68 s to the Unix ph
23b0: 69 6c 6f 73 6f 70 68 79 2c 0a 73 75 6d 6d 61 72 ilosophy,.summar
23c0: 69 7a 65 64 20 61 73 20 22 6d 61 6e 79 20 73 6d ized as "many sm
23d0: 61 6c 6c 20 74 6f 6f 6c 73 2c 20 6c 6f 6f 73 65 all tools, loose
23e0: 6c 79 20 6a 6f 69 6e 65 64 2c 22 20 62 75 74 20 ly joined," but
23f0: 77 65 20 68 61 76 65 20 6d 61 6e 79 0a 65 78 61 we have many.exa
2400: 6d 70 6c 65 73 20 6f 66 20 6f 74 68 65 72 20 73 mples of other s
2410: 75 63 63 65 73 73 66 75 6c 20 55 6e 69 78 20 73 uccessful Unix s
2420: 6f 66 74 77 61 72 65 20 74 68 61 74 20 76 69 6f oftware that vio
2430: 6c 61 74 65 73 20 74 68 61 74 20 70 72 69 6e 63 lates that princ
2440: 69 70 6c 65 0a 74 6f 20 67 6f 6f 64 20 65 66 66 iple.to good eff
2450: 65 63 74 2c 20 66 72 6f 6d 20 41 70 61 63 68 65 ect, from Apache
2460: 20 74 6f 20 50 79 74 68 6f 6e 20 74 6f 20 5a 46 to Python to ZF
2470: 53 2e 20 57 65 20 63 61 6e 20 69 6e 66 65 72 20 S. We can infer
2480: 66 72 6f 6d 20 74 68 61 74 0a 74 68 61 74 20 74 from that.that t
2490: 68 69 73 20 69 73 20 6e 6f 74 20 61 6e 20 61 62 his is not an ab
24a0: 73 6f 6c 75 74 65 20 70 72 69 6e 63 69 70 6c 65 solute principle
24b0: 20 6f 66 20 67 6f 6f 64 20 73 6f 66 74 77 61 72 of good softwar
24c0: 65 20 64 65 73 69 67 6e 2e 0a 53 6f 6d 65 74 69 e design..Someti
24d0: 6d 65 73 20 22 6d 61 6e 79 20 66 65 61 74 75 72 mes "many featur
24e0: 65 73 2c 20 74 69 67 68 74 6c 79 2d 63 6f 75 70 es, tightly-coup
24f0: 6c 65 64 22 20 77 6f 72 6b 73 20 62 65 74 74 65 led" works bette
2500: 72 2e 20 57 68 61 74 20 61 63 74 75 61 6c 6c 79 r. What actually
2510: 0a 6d 61 74 74 65 72 73 20 69 73 20 65 66 66 65 .matters is effe
2520: 63 74 69 76 65 6e 65 73 73 20 61 6e 64 20 65 66 ctiveness and ef
2530: 66 69 63 69 65 6e 63 79 2e 20 57 65 20 62 65 6c ficiency. We bel
2540: 69 65 76 65 20 46 6f 73 73 69 6c 20 61 63 68 69 ieve Fossil achi
2550: 65 76 65 73 0a 74 68 69 73 2e 0a 0a 54 68 65 20 eves.this...The
2560: 61 62 6f 76 65 20 73 69 7a 65 20 63 6f 6d 70 61 above size compa
2570: 72 69 73 6f 6e 73 20 61 72 65 6e 27 74 20 61 70 risons aren't ap
2580: 70 6c 65 73 2d 74 6f 2d 61 70 70 6c 65 73 20 61 ples-to-apples a
2590: 6e 79 77 61 79 2e 20 57 65 27 76 65 0a 63 6f 6d nyway. We've.com
25a0: 70 61 72 65 64 20 74 68 65 20 73 69 7a 65 20 6f pared the size o
25b0: 66 20 46 6f 73 73 69 6c 20 77 69 74 68 20 61 6c f Fossil with al
25c0: 6c 20 6f 66 20 69 74 73 20 5b 23 66 65 61 74 75 l of its [#featu
25d0: 72 65 73 20 7c 20 6d 61 6e 79 20 62 75 69 6c 74 res | many built
25e0: 2d 69 6e 0a 66 65 61 74 75 72 65 73 5d 20 74 6f -in.features] to
25f0: 20 61 20 66 61 69 72 6c 79 20 6d 69 6e 69 6d 61 a fairly minima
2600: 6c 20 47 69 74 20 69 6e 73 74 61 6c 6c 61 74 69 l Git installati
2610: 6f 6e 2e 20 59 6f 75 20 6d 75 73 74 20 61 64 64 on. You must add
2620: 20 61 20 6c 6f 74 20 6f 66 0a 74 68 69 72 64 2d a lot of.third-
2630: 70 61 72 74 79 20 73 6f 66 74 77 61 72 65 20 74 party software t
2640: 6f 20 47 69 74 20 74 6f 20 67 69 76 65 20 69 74 o Git to give it
2650: 20 61 20 46 6f 73 73 69 6c 2d 65 71 75 69 76 61 a Fossil-equiva
2660: 6c 65 6e 74 20 66 65 61 74 75 72 65 20 73 65 74 lent feature set
2670: 2e 0a 43 6f 6e 73 69 64 65 72 20 5b 68 74 74 70 ..Consider [http
2680: 73 3a 2f 2f 61 62 6f 75 74 2e 67 69 74 6c 61 62 s://about.gitlab
2690: 2e 63 6f 6d 2f 7c 47 69 74 4c 61 62 5d 2c 20 61 .com/|GitLab], a
26a0: 20 74 68 69 72 64 2d 70 61 72 74 79 20 65 78 74 third-party ext
26b0: 65 6e 73 69 6f 6e 20 74 6f 0a 47 69 74 20 77 72 ension to.Git wr
26c0: 61 70 70 69 6e 67 20 69 74 20 69 6e 20 6d 61 6e apping it in man
26d0: 79 20 66 65 61 74 75 72 65 73 2c 20 6d 61 6b 69 y features, maki
26e0: 6e 67 20 69 74 20 72 6f 75 67 68 6c 79 20 46 6f ng it roughly Fo
26f0: 73 73 69 6c 2d 65 71 75 69 76 61 6c 65 6e 74 2c ssil-equivalent,
2700: 0a 74 68 6f 75 67 68 20 5b 68 74 74 70 73 3a 2f .though [https:/
2710: 2f 64 6f 63 73 2e 67 69 74 6c 61 62 2e 63 6f 6d /docs.gitlab.com
2720: 2f 65 65 2f 69 6e 73 74 61 6c 6c 2f 72 65 71 75 /ee/install/requ
2730: 69 72 65 6d 65 6e 74 73 2e 68 74 6d 6c 7c 6d 75 irements.html|mu
2740: 63 68 20 6d 6f 72 65 0a 72 65 73 6f 75 72 63 65 ch more.resource
2750: 20 68 75 6e 67 72 79 5d 20 61 6e 64 20 68 65 6e hungry] and hen
2760: 63 65 20 6d 6f 72 65 20 63 6f 73 74 6c 79 20 74 ce more costly t
2770: 6f 20 72 75 6e 20 74 68 61 6e 20 74 68 65 20 65 o run than the e
2780: 71 75 69 76 61 6c 65 6e 74 20 46 6f 73 73 69 6c quivalent Fossil
2790: 0a 73 65 74 75 70 2e 20 5b 68 74 74 70 73 3a 2f .setup. [https:/
27a0: 2f 68 75 62 2e 64 6f 63 6b 65 72 2e 63 6f 6d 2f /hub.docker.com/
27b0: 72 2f 67 69 74 6c 61 62 2f 67 69 74 6c 61 62 2d r/gitlab/gitlab-
27c0: 63 65 2f 20 7c 20 54 68 65 20 6f 66 66 69 63 69 ce/ | The offici
27d0: 61 6c 20 47 69 74 4c 61 62 0a 43 6f 6d 6d 75 6e al GitLab.Commun
27e0: 69 74 79 20 45 64 69 74 69 6f 6e 20 63 6f 6e 74 ity Edition cont
27f0: 61 69 6e 65 72 5d 20 63 75 72 72 65 6e 74 6c 79 ainer] currently
2800: 20 63 6c 6f 63 6b 73 20 69 6e 20 61 74 20 32 2e clocks in at 2.
2810: 36 36 c2 a0 47 69 42 21 0a 0a 47 69 74 4c 61 62 66 GiB!..GitLab
2820: 27 73 20 72 65 71 75 69 72 65 6d 65 6e 74 73 20 's requirements
2830: 61 72 65 20 65 61 73 79 20 74 6f 20 61 63 63 65 are easy to acce
2840: 70 74 20 77 68 65 6e 20 79 6f 75 27 72 65 20 64 pt when you're d
2850: 65 64 69 63 61 74 69 6e 67 0a 61 20 6c 6f 63 61 edicating.a loca
2860: 6c 20 72 61 63 6b 20 73 65 72 76 65 72 20 6f 72 l rack server or
2870: 20 62 6c 61 64 65 20 74 6f 20 69 74 2c 20 73 69 blade to it, si
2880: 6e 63 65 20 69 74 73 20 6d 69 6e 69 6d 75 6d 20 nce its minimum
2890: 72 65 71 75 69 72 65 6d 65 6e 74 73 20 61 72 65 requirements are
28a0: 0a 6d 6f 72 65 20 6f 72 20 6c 65 73 73 20 61 20 .more or less a
28b0: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 description of t
28c0: 68 65 20 73 6d 61 6c 6c 65 73 74 0a 74 68 69 6e he smallest.thin
28d0: 67 20 79 6f 75 20 63 6f 75 6c 64 20 63 61 6c 6c g you could call
28e0: 20 61 20 22 73 65 72 76 65 72 22 20 74 68 65 73 a "server" thes
28f0: 65 20 64 61 79 73 2c 20 62 75 74 20 77 68 65 6e e days, but when
2900: 20 79 6f 75 20 67 6f 20 74 6f 20 68 6f 73 74 20 you go to host
2910: 74 68 61 74 0a 69 6e 20 74 68 65 20 63 6c 6f 75 that.in the clou
2920: 64 2c 20 79 6f 75 20 63 61 6e 20 65 78 70 65 63 d, you can expec
2930: 74 20 74 6f 20 70 61 79 20 61 62 6f 75 74 20 38 t to pay about 8
2940: 20 74 69 6d 65 73 20 61 73 20 6d 75 63 68 20 74 times as much t
2950: 6f 20 63 6f 6d 66 6f 72 74 61 62 6c 79 20 68 6f o comfortably ho
2960: 73 74 0a 47 69 74 4c 61 62 20 61 73 20 66 6f 72 st.GitLab as for
2970: 20 46 6f 73 73 69 6c 2e c2 b3 20 54 68 69 73 20 Fossil.³ This
2980: 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6c 61 difference is la
2990: 72 67 65 6c 79 20 64 75 65 20 74 6f 20 62 61 73 rgely due to bas
29a0: 69 63 0a 74 65 63 68 6e 6f 6c 6f 67 79 20 63 68 ic.technology ch
29b0: 6f 69 63 65 73 3a 20 52 75 62 79 20 61 6e 64 20 oices: Ruby and
29c0: 50 6f 73 74 67 72 65 53 51 4c 20 76 73 20 43 20 PostgreSQL vs C
29d0: 61 6e 64 20 53 51 4c 69 74 65 2e 0a 0a 54 68 65 and SQLite...The
29e0: 20 46 6f 73 73 69 6c 20 70 72 6f 6a 65 63 74 20 Fossil project
29f0: 69 74 73 65 6c 66 20 69 73 20 5b 2e 2f 73 65 6c itself is [./sel
2a00: 66 68 6f 73 74 2e 77 69 6b 69 7c 68 6f 73 74 65 fhost.wiki|hoste
2a10: 64 20 6f 6e 20 61 20 73 6d 61 6c 6c 20 61 6e 64 d on a small and
2a20: 0a 69 6e 65 78 70 65 6e 73 69 76 65 20 56 50 53 .inexpensive VPS
2a30: 5d 2e 20 20 41 20 62 61 72 65 2d 62 6f 6e 65 73 ]. A bare-bones
2a40: 20 24 35 2f 6d 6f 6e 74 68 20 56 50 53 20 6f 72 $5/month VPS or
2a50: 20 61 0a 73 70 61 72 65 20 52 61 73 70 62 65 72 a.spare Raspber
2a60: 72 79 20 50 69 20 69 73 20 73 75 66 66 69 63 69 ry Pi is suffici
2a70: 65 6e 74 20 74 6f 20 72 75 6e 20 61 20 66 75 6c ent to run a ful
2a80: 6c 2d 75 70 20 70 72 6f 6a 65 63 74 0a 73 69 74 l-up project.sit
2a90: 65 2c 20 63 6f 6d 70 6c 65 74 65 20 77 69 74 68 e, complete with
2aa0: 20 74 69 63 6b 65 74 73 2c 20 77 69 6b 69 2c 20 tickets, wiki,
2ab0: 63 68 61 74 2c 20 61 6e 64 20 66 6f 72 75 6d 2c chat, and forum,
2ac0: 20 69 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 0a in addition to.
2ad0: 62 65 69 6e 67 20 61 20 63 6f 64 65 20 72 65 70 being a code rep
2ae0: 6f 73 69 74 6f 72 79 2e 0a 0a 3c 68 33 20 69 64 ository...<h3 id
2af0: 3d 22 64 75 72 61 62 6c 65 22 20 6e 61 6d 65 3d ="durable" name=
2b00: 22 64 61 74 61 62 61 73 65 22 3e 32 2e 33 20 51 "database">2.3 Q
2b10: 75 65 72 79 20 4c 61 6e 67 75 61 67 65 3c 2f 68 uery Language</h
2b20: 33 3e 0a 0a 54 68 65 20 62 61 73 65 6c 69 6e 65 3>..The baseline
2b30: 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 data structures
2b40: 20 66 6f 72 20 46 6f 73 73 69 6c 20 61 6e 64 20 for Fossil and
2b50: 47 69 74 20 61 72 65 20 74 68 65 20 73 61 6d 65 Git are the same
2b60: 2c 20 6d 6f 64 75 6c 6f 0a 66 6f 72 6d 61 74 74 , modulo.formatt
2b70: 69 6e 67 20 64 65 74 61 69 6c 73 2e 20 42 6f 74 ing details. Bot
2b80: 68 20 73 79 73 74 65 6d 73 20 6d 61 6e 61 67 65 h systems manage
2b90: 20 61 0a 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 a.[https://en.w
2ba0: 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b ikipedia.org/wik
2bb0: 69 2f 44 69 72 65 63 74 65 64 5f 61 63 79 63 6c i/Directed_acycl
2bc0: 69 63 5f 67 72 61 70 68 20 7c 20 64 69 72 65 63 ic_graph | direc
2bd0: 74 65 64 20 61 63 79 63 6c 69 63 0a 67 72 61 70 ted acyclic.grap
2be0: 68 5d 20 28 44 41 47 29 20 6f 66 20 5b 68 74 74 h] (DAG) of [htt
2bf0: 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 ps://en.wikipedi
2c00: 61 2e 6f 72 67 2f 77 69 6b 69 2f 4d 65 72 6b 6c a.org/wiki/Merkl
2c10: 65 5f 74 72 65 65 20 7c 20 4d 65 72 6b 6c 65 0a e_tree | Merkle.
2c20: 74 72 65 65 5d 20 73 74 72 75 63 74 75 72 65 64 tree] structured
2c30: 20 63 68 65 63 6b 2d 69 6e 20 6f 62 6a 65 63 74 check-in object
2c40: 73 2e 0a 43 68 65 63 6b 2d 69 6e 73 20 61 72 65 s..Check-ins are
2c50: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 identified by a
2c60: 20 63 72 79 70 74 6f 67 72 61 70 68 69 63 20 68 cryptographic h
2c70: 61 73 68 20 6f 66 20 74 68 65 20 63 68 65 63 6b ash of the check
2c80: 2d 69 6e 0a 63 6f 6e 74 65 6e 74 73 2c 20 61 6e -in.contents, an
2c90: 64 20 65 61 63 68 20 63 68 65 63 6b 2d 69 6e 20 d each check-in
2ca0: 72 65 66 65 72 73 20 74 6f 20 69 74 73 20 70 61 refers to its pa
2cb0: 72 65 6e 74 20 76 69 61 20 74 68 65 20 70 61 72 rent via the par
2cc0: 65 6e 74 27 73 20 68 61 73 68 2e 0a 0a 54 68 65 ent's hash...The
2cd0: 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 74 difference is t
2ce0: 68 61 74 20 47 69 74 20 73 74 6f 72 65 73 20 69 hat Git stores i
2cf0: 74 73 20 6f 62 6a 65 63 74 73 20 61 73 20 69 6e ts objects as in
2d00: 64 69 76 69 64 75 61 6c 20 66 69 6c 65 73 20 69 dividual files i
2d10: 6e 20 74 68 65 0a 3c 74 74 3e 2e 67 69 74 3c 2f n the.<tt>.git</
2d20: 74 74 3e 20 66 6f 6c 64 65 72 20 6f 72 20 63 6f tt> folder or co
2d30: 6d 70 72 65 73 73 65 64 20 69 6e 74 6f 20 62 65 mpressed into be
2d40: 73 70 6f 6b 65 20 6b 65 79 2f 76 61 6c 75 65 0a spoke key/value.
2d50: 5b 68 74 74 70 73 3a 2f 2f 67 69 74 2d 73 63 6d [https://git-scm
2d60: 2e 63 6f 6d 2f 62 6f 6f 6b 2f 65 6e 2f 76 32 2f .com/book/en/v2/
2d70: 47 69 74 2d 49 6e 74 65 72 6e 61 6c 73 2d 50 61 Git-Internals-Pa
2d80: 63 6b 66 69 6c 65 73 7c 70 61 63 6b 2d 66 69 6c ckfiles|pack-fil
2d90: 65 73 5d 2c 0a 77 68 65 72 65 61 73 20 46 6f 73 es],.whereas Fos
2da0: 73 69 6c 20 73 74 6f 72 65 73 20 69 74 73 20 6f sil stores its o
2db0: 62 6a 65 63 74 73 20 69 6e 20 61 20 5b 68 74 74 bjects in a [htt
2dc0: 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e ps://www.sqlite.
2dd0: 6f 72 67 2f 7c 53 51 4c 69 74 65 5d 0a 64 61 74 org/|SQLite].dat
2de0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 69 63 68 abase file which
2df0: 20 70 72 6f 76 69 64 65 73 20 41 43 49 44 20 74 provides ACID t
2e00: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20 ransactions and
2e10: 61 20 68 69 67 68 2d 6c 65 76 65 6c 20 71 75 65 a high-level que
2e20: 72 79 0a 6c 61 6e 67 75 61 67 65 2e 0a 54 68 69 ry.language..Thi
2e30: 73 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 s difference is
2e40: 6d 6f 72 65 20 74 68 61 6e 20 61 6e 20 69 6d 70 more than an imp
2e50: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 74 61 lementation deta
2e60: 69 6c 2e 20 49 74 20 68 61 73 20 69 6d 70 6f 72 il. It has impor
2e70: 74 61 6e 74 0a 70 72 61 63 74 69 63 61 6c 20 63 tant.practical c
2e80: 6f 6e 73 65 71 75 65 6e 63 65 73 2e 0a 0a 4f 6e onsequences...On
2e90: 65 20 6e 6f 74 61 62 6c 65 20 63 6f 6e 73 65 71 e notable conseq
2ea0: 75 65 6e 63 65 20 69 73 20 74 68 61 74 20 69 74 uence is that it
2eb0: 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f is difficult to
2ec0: 20 66 69 6e 64 20 74 68 65 20 64 65 73 63 65 6e find the descen
2ed0: 64 61 6e 74 73 0a 6f 66 20 63 68 65 63 6b 2d 69 dants.of check-i
2ee0: 6e 73 20 69 6e 20 47 69 74 2e 0a 4f 6e 65 20 63 ns in Git..One c
2ef0: 61 6e 20 65 61 73 69 6c 79 20 6c 6f 63 61 74 65 an easily locate
2f00: 20 74 68 65 20 61 6e 63 65 73 74 6f 72 73 20 6f the ancestors o
2f10: 66 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 47 f a particular G
2f20: 69 74 20 63 68 65 63 6b 2d 69 6e 0a 62 79 20 66 it check-in.by f
2f30: 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 70 6f 69 ollowing the poi
2f40: 6e 74 65 72 73 20 65 6d 62 65 64 64 65 64 20 69 nters embedded i
2f50: 6e 20 74 68 65 20 63 68 65 63 6b 2d 69 6e 20 6f n the check-in o
2f60: 62 6a 65 63 74 2c 20 62 75 74 20 69 74 20 69 73 bject, but it is
2f70: 0a 64 69 66 66 69 63 75 6c 74 20 74 6f 20 67 6f .difficult to go
2f80: 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 the other direc
2f90: 74 69 6f 6e 20 61 6e 64 20 6c 6f 63 61 74 65 20 tion and locate
2fa0: 74 68 65 20 64 65 73 63 65 6e 64 61 6e 74 73 20 the descendants
2fb0: 6f 66 20 61 0a 63 68 65 63 6b 2d 69 6e 2e 20 20 of a.check-in.
2fc0: 49 74 20 69 73 20 73 6f 20 64 69 66 66 69 63 75 It is so difficu
2fd0: 6c 74 2c 20 69 6e 20 66 61 63 74 2c 20 74 68 61 lt, in fact, tha
2fe0: 74 20 6e 65 69 74 68 65 72 20 6e 61 74 69 76 65 t neither native
2ff0: 20 47 69 74 20 6e 6f 72 0a 47 69 74 48 75 62 20 Git nor.GitHub
3000: 70 72 6f 76 69 64 65 20 74 68 69 73 20 63 61 70 provide this cap
3010: 61 62 69 6c 69 74 79 20 73 68 6f 72 74 20 6f 66 ability short of
3020: 20 63 72 61 77 6c 69 6e 67 20 74 68 65 0a 5b 68 crawling the.[h
3030: 74 74 70 73 3a 2f 2f 77 77 77 2e 67 69 74 2d 73 ttps://www.git-s
3040: 63 6d 2e 63 6f 6d 2f 64 6f 63 73 2f 67 69 74 2d cm.com/docs/git-
3050: 6c 6f 67 7c 63 6f 6d 6d 69 74 20 6c 6f 67 5d 2e log|commit log].
3060: 20 20 57 69 74 68 20 46 6f 73 73 69 6c 2c 0a 6f With Fossil,.o
3070: 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 n the other hand
3080: 2c 20 66 69 6e 64 69 6e 67 20 64 65 73 63 65 6e , finding descen
3090: 64 61 6e 74 73 20 69 73 20 61 20 73 69 6d 70 6c dants is a simpl
30a0: 65 20 53 51 4c 20 71 75 65 72 79 2e 0a 49 74 20 e SQL query..It
30b0: 69 73 20 63 6f 6d 6d 6f 6e 20 69 6e 20 46 6f 73 is common in Fos
30c0: 73 69 6c 20 74 6f 20 61 73 6b 20 74 6f 20 73 65 sil to ask to se
30d0: 65 0a 5b 2f 74 69 6d 65 6c 69 6e 65 3f 64 66 3d e.[/timeline?df=
30e0: 72 65 6c 65 61 73 65 26 79 3d 63 69 7c 61 6c 6c release&y=ci|all
30f0: 20 63 68 65 63 6b 2d 69 6e 73 20 73 69 6e 63 65 check-ins since
3100: 20 74 68 65 20 6c 61 73 74 20 72 65 6c 65 61 73 the last releas
3110: 65 5d 2e 0a 47 69 74 20 6c 65 74 73 20 79 6f 75 e]..Git lets you
3120: 20 73 65 65 20 22 77 68 61 74 20 63 61 6d 65 20 see "what came
3130: 62 65 66 6f 72 65 22 2e 20 20 46 6f 73 73 69 6c before". Fossil
3140: 20 6d 61 6b 65 73 20 69 74 20 6a 75 73 74 20 61 makes it just a
3150: 73 0a 65 61 73 79 20 74 6f 20 61 6c 73 6f 20 73 s.easy to also s
3160: 65 65 20 22 77 68 61 74 20 63 61 6d 65 20 61 66 ee "what came af
3170: 74 65 72 22 2e 0a 0a 4c 65 61 66 20 63 68 65 63 ter"...Leaf chec
3180: 6b 2d 69 6e 73 20 69 6e 20 47 69 74 20 74 68 61 k-ins in Git tha
3190: 74 20 6c 61 63 6b 20 61 20 22 72 65 66 22 20 62 t lack a "ref" b
31a0: 65 63 6f 6d 65 20 22 64 65 74 61 63 68 65 64 2c ecome "detached,
31b0: 22 20 6d 61 6b 69 6e 67 20 74 68 65 6d 0a 64 69 " making them.di
31c0: 66 66 69 63 75 6c 74 20 74 6f 20 6c 6f 63 61 74 fficult to locat
31d0: 65 20 61 6e 64 20 73 75 62 6a 65 63 74 20 74 6f e and subject to
31e0: 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 garbage collect
31f0: 69 6f 6e 2e 20 54 68 69 73 0a 5b 68 74 74 70 3a ion. This.[http:
3200: 2f 2f 67 69 74 66 61 71 2e 6f 72 67 2f 31 2f 30 //gitfaq.org/1/0
3210: 31 2f 77 68 61 74 2d 69 73 2d 61 2d 64 65 74 61 1/what-is-a-deta
3220: 63 68 65 64 2d 68 65 61 64 2f 7c 64 65 74 61 63 ched-head/|detac
3230: 68 65 64 20 68 65 61 64 0a 73 74 61 74 65 5d 20 hed head.state]
3240: 70 72 6f 62 6c 65 6d 20 68 61 73 20 63 61 75 73 problem has caus
3250: 65 64 20 67 72 69 65 66 20 66 6f 72 0a 5b 68 74 ed grief for.[ht
3260: 74 70 73 3a 2f 2f 77 77 77 2e 67 6f 6f 67 6c 65 tps://www.google
3270: 2e 63 6f 6d 2f 73 65 61 72 63 68 3f 71 3d 67 69 .com/search?q=gi
3280: 74 2b 64 65 74 61 63 68 65 64 2b 68 65 61 64 2b t+detached+head+
3290: 73 74 61 74 65 20 7c 20 6d 61 6e 79 0a 47 69 74 state | many.Git
32a0: 20 75 73 65 72 73 5d 2e 20 57 69 74 68 0a 46 6f users]. With.Fo
32b0: 73 73 69 6c 2c 20 64 65 74 61 63 68 65 64 20 68 ssil, detached h
32c0: 65 61 64 73 20 61 72 65 20 73 69 6d 70 6c 79 20 eads are simply
32d0: 69 6d 70 6f 73 73 69 62 6c 65 20 62 65 63 61 75 impossible becau
32e0: 73 65 20 77 65 20 63 61 6e 20 61 6c 77 61 79 73 se we can always
32f0: 20 66 69 6e 64 0a 6f 75 72 20 77 61 79 20 62 61 find.our way ba
3300: 63 6b 20 69 6e 74 6f 20 74 68 65 20 4d 65 72 6b ck into the Merk
3310: 6c 65 20 74 72 65 65 20 75 73 69 6e 67 20 6f 6e le tree using on
3320: 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 e or more of the
3330: 20 72 65 6c 61 74 69 6f 6e 73 0a 69 6e 20 74 68 relations.in th
3340: 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 2e 0a e SQL database..
3350: 0a 54 68 65 20 53 51 4c 20 71 75 65 72 79 20 63 .The SQL query c
3360: 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20 46 apabilities of F
3370: 6f 73 73 69 6c 20 6d 61 6b 65 20 69 74 20 65 61 ossil make it ea
3380: 73 69 65 72 20 74 6f 20 74 72 61 63 6b 20 74 68 sier to track th
3390: 65 0a 63 68 61 6e 67 65 73 20 66 6f 72 20 6f 6e e.changes for on
33a0: 65 20 70 61 72 74 69 63 75 6c 61 72 20 66 69 6c e particular fil
33b0: 65 20 77 69 74 68 69 6e 20 61 20 70 72 6f 6a 65 e within a proje
33c0: 63 74 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 ct. For example
33d0: 2c 0a 79 6f 75 20 63 61 6e 20 65 61 73 69 6c 79 ,.you can easily
33e0: 20 66 69 6e 64 0a 5b 2f 66 69 6e 66 6f 2f 77 77 find.[/finfo/ww
33f0: 77 2f 66 6f 73 73 69 6c 2d 76 2d 67 69 74 2e 77 w/fossil-v-git.w
3400: 69 6b 69 7c 74 68 65 20 63 6f 6d 70 6c 65 74 65 iki|the complete
3410: 20 65 64 69 74 20 68 69 73 74 6f 72 79 20 6f 66 edit history of
3420: 20 74 68 69 73 20 6f 6e 65 20 64 6f 63 75 6d 65 this one docume
3430: 6e 74 5d 2c 0a 6f 72 20 65 76 65 6e 20 0a 5b 2f nt],.or even .[/
3440: 66 69 6e 66 6f 2f 77 77 77 2f 66 6f 73 73 69 6c finfo/www/fossil
3450: 2d 76 2d 67 69 74 2e 77 69 6b 69 3f 75 62 67 7c -v-git.wiki?ubg|
3460: 74 68 65 20 73 61 6d 65 20 68 69 73 74 6f 72 79 the same history
3470: 20 63 6f 6c 6f 72 2d 63 6f 64 65 64 20 62 79 20 color-coded by
3480: 63 6f 6d 6d 69 74 74 65 72 5d 2c 0a 42 6f 74 68 committer],.Both
3490: 20 71 75 65 73 74 69 6f 6e 73 20 61 72 65 20 73 questions are s
34a0: 69 6d 70 6c 65 20 53 51 4c 20 71 75 65 72 79 20 imple SQL query
34b0: 69 6e 20 46 6f 73 73 69 6c 2c 20 77 69 74 68 20 in Fossil, with
34c0: 70 72 6f 63 65 64 75 72 61 6c 20 63 6f 64 65 0a procedural code.
34d0: 6f 6e 6c 79 20 62 65 69 6e 67 20 75 73 65 64 20 only being used
34e0: 74 6f 20 66 6f 72 6d 61 74 20 74 68 65 20 72 65 to format the re
34f0: 73 75 6c 74 20 66 6f 72 20 64 69 73 70 6c 61 79 sult for display
3500: 2e 0a 54 68 65 20 73 61 6d 65 20 72 65 73 75 6c ..The same resul
3510: 74 20 63 6f 75 6c 64 20 62 65 20 6f 62 74 61 69 t could be obtai
3520: 6e 65 64 20 66 72 6f 6d 20 47 69 74 2c 20 62 75 ned from Git, bu
3530: 74 20 62 65 63 61 75 73 65 20 74 68 65 20 64 61 t because the da
3540: 74 61 20 69 73 0a 69 6e 20 61 20 6b 65 79 2f 76 ta is.in a key/v
3550: 61 6c 75 65 20 73 74 6f 72 65 2c 20 6d 75 63 68 alue store, much
3560: 20 6d 6f 72 65 20 70 72 6f 63 65 64 75 72 61 6c more procedural
3570: 20 63 6f 64 65 20 68 61 73 20 74 6f 20 62 65 20 code has to be
3580: 77 72 69 74 74 65 6e 20 74 6f 0a 77 61 6c 6b 20 written to.walk
3590: 74 68 65 20 64 61 74 61 20 61 6e 64 20 63 6f 6d the data and com
35a0: 70 75 74 65 20 74 68 65 20 72 65 73 75 6c 74 2e pute the result.
35b0: 20 41 6e 64 20 73 69 6e 63 65 20 74 68 61 74 20 And since that
35c0: 69 73 20 61 20 6c 6f 74 20 6d 6f 72 65 0a 77 6f is a lot more.wo
35d0: 72 6b 2c 20 74 68 65 20 71 75 65 73 74 69 6f 6e rk, the question
35e0: 20 69 73 20 73 65 6c 64 6f 6d 20 61 73 6b 65 64 is seldom asked
35f0: 2e 0a 0a 54 68 65 20 65 61 73 65 20 6f 66 20 71 ...The ease of q
3600: 75 65 72 79 69 6e 67 20 46 6f 73 73 69 6c 20 64 uerying Fossil d
3610: 61 74 61 20 75 73 69 6e 67 20 53 51 4c 20 6d 65 ata using SQL me
3620: 61 6e 73 20 74 68 61 74 20 73 74 61 74 75 73 20 ans that status
3630: 6f 72 0a 68 69 73 74 6f 72 79 20 69 6e 66 6f 72 or.history infor
3640: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 mation about the
3650: 20 70 72 6f 6a 65 63 74 20 75 6e 64 65 72 20 6d project under m
3660: 61 6e 61 67 65 6d 65 6e 74 20 69 73 20 65 61 73 anagement is eas
3670: 69 65 72 0a 74 6f 20 6f 62 74 61 69 6e 2e 20 42 ier.to obtain. B
3680: 65 69 6e 67 20 65 61 73 69 65 72 20 6d 65 61 6e eing easier mean
3690: 73 20 74 68 61 74 20 69 74 20 69 73 20 6d 6f 72 s that it is mor
36a0: 65 20 6c 69 6b 65 6c 79 20 74 6f 20 68 61 70 70 e likely to happ
36b0: 65 6e 2e 0a 46 6f 73 73 69 6c 20 72 65 70 6f 72 en..Fossil repor
36c0: 74 73 20 74 65 6e 64 20 74 6f 20 62 65 20 6d 6f ts tend to be mo
36d0: 72 65 20 64 65 74 61 69 6c 65 64 20 61 6e 64 20 re detailed and
36e0: 75 73 65 66 75 6c 2e 0a 43 6f 6d 70 61 72 65 20 useful..Compare
36f0: 5b 2f 74 69 6d 65 6c 69 6e 65 3f 63 3d 36 64 66 [/timeline?c=6df
3700: 37 61 38 35 33 65 63 31 36 38 36 35 62 7c 74 68 7a853ec16865b|th
3710: 69 73 20 46 6f 73 73 69 6c 20 74 69 6d 65 6c 69 is Fossil timeli
3720: 6e 65 5d 20 0a 74 6f 0a 5b 68 74 74 70 73 3a 2f ne] .to.[https:/
3730: 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 64 72 68 73 /github.com/drhs
3740: 71 6c 69 74 65 2f 66 6f 73 73 69 6c 2d 6d 69 72 qlite/fossil-mir
3750: 72 6f 72 2f 63 6f 6d 6d 69 74 73 2f 6d 61 73 74 ror/commits/mast
3760: 65 72 3f 61 66 74 65 72 3d 66 37 32 30 63 31 30 er?after=f720c10
3770: 36 64 32 39 37 63 61 31 66 36 31 62 63 63 62 33 6d297ca1f61bccb3
3780: 30 63 35 63 31 39 31 62 38 38 61 36 32 36 64 30 0c5c191b88a626d0
3790: 31 2b 33 34 20 7c 0a 69 74 73 20 63 6c 6f 73 65 1+34 |.its close
37a0: 73 74 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e st equivalent in
37b0: 20 47 69 74 48 75 62 5d 2e 20 20 4a 75 64 67 65 GitHub]. Judge
37c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 3a 20 77 for yourself: w
37d0: 68 69 63 68 20 6f 66 20 74 68 6f 73 65 0a 72 65 hich of those.re
37e0: 70 6f 72 74 73 20 69 73 20 6d 6f 72 65 20 75 73 ports is more us
37f0: 65 66 75 6c 20 74 6f 20 61 20 64 65 76 65 6c 6f eful to a develo
3800: 70 65 72 20 74 72 79 69 6e 67 20 74 6f 20 75 6e per trying to un
3810: 64 65 72 73 74 61 6e 64 20 77 68 61 74 20 68 61 derstand what ha
3820: 70 70 65 6e 65 64 3f 0a 0a 54 68 65 20 62 6f 74 ppened?..The bot
3830: 74 6f 6d 20 6c 69 6e 65 20 69 73 20 74 68 61 74 tom line is that
3840: 20 65 76 65 6e 20 74 68 6f 75 67 68 20 46 6f 73 even though Fos
3850: 73 69 6c 20 61 6e 64 20 47 69 74 20 61 72 65 20 sil and Git are
3860: 62 75 69 6c 74 20 61 72 6f 75 6e 64 0a 74 68 65 built around.the
3870: 20 73 61 6d 65 20 6c 6f 77 2d 6c 65 76 65 6c 20 same low-level
3880: 64 61 74 61 20 73 74 72 75 63 74 75 72 65 2c 20 data structure,
3890: 74 68 65 20 75 73 65 20 6f 66 20 53 51 4c 0a 74 the use of SQL.t
38a0: 6f 20 71 75 65 72 79 20 74 68 69 73 20 64 61 74 o query this dat
38b0: 61 20 6d 61 6b 65 73 20 74 68 65 20 64 61 74 61 a makes the data
38c0: 20 6d 6f 72 65 20 61 63 63 65 73 73 69 62 6c 65 more accessible
38d0: 20 69 6e 20 46 6f 73 73 69 6c 2c 20 72 65 73 75 in Fossil, resu
38e0: 6c 74 69 6e 67 0a 69 6e 20 6d 6f 72 65 20 64 65 lting.in more de
38f0: 74 61 69 6c 65 64 20 69 6e 66 6f 72 6d 61 74 69 tailed informati
3900: 6f 6e 20 62 65 69 6e 67 20 61 76 61 69 6c 61 62 on being availab
3910: 6c 65 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 le to the user.
3920: 20 54 68 69 73 0a 69 6d 70 72 6f 76 65 73 20 73 This.improves s
3930: 69 74 75 61 74 69 6f 6e 61 6c 20 61 77 61 72 65 ituational aware
3940: 6e 65 73 73 20 61 6e 64 20 6d 61 6b 65 73 20 77 ness and makes w
3950: 6f 72 6b 69 6e 67 20 6f 6e 20 74 68 65 20 70 72 orking on the pr
3960: 6f 6a 65 63 74 0a 65 61 73 69 65 72 2e 0a 0a 3c oject.easier...<
3970: 68 33 20 69 64 3d 22 70 6f 72 74 61 62 6c 65 22 h3 id="portable"
3980: 3e 32 2e 34 20 50 6f 72 74 61 62 6c 65 3c 2f 68 >2.4 Portable</h
3990: 33 3e 0a 0a 46 6f 73 73 69 6c 20 69 73 20 6c 61 3>..Fossil is la
39a0: 72 67 65 6c 79 20 77 72 69 74 74 65 6e 20 69 6e rgely written in
39b0: 20 49 53 4f 20 43 2c 20 61 6c 6d 6f 73 74 20 70 ISO C, almost p
39c0: 75 72 65 6c 79 20 63 6f 6e 66 6f 72 6d 69 6e 67 urely conforming
39d0: 20 74 6f 20 74 68 65 0a 6f 72 69 67 69 6e 61 6c to the.original
39e0: 20 31 39 38 39 20 73 74 61 6e 64 61 72 64 2e 20 1989 standard.
39f0: 57 65 20 6d 61 6b 65 20 76 65 72 79 20 6c 69 74 We make very lit
3a00: 74 6c 65 20 75 73 65 20 6f 66 0a 5b 68 74 74 70 tle use of.[http
3a10: 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 s://en.wikipedia
3a20: 2e 6f 72 67 2f 77 69 6b 69 2f 43 39 39 7c 43 39 .org/wiki/C99|C9
3a30: 39 5d 2c 20 61 6e 64 20 77 65 20 64 6f 20 6e 6f 9], and we do no
3a40: 74 20 6b 6e 6f 77 69 6e 67 6c 79 20 6d 61 6b 65 t knowingly make
3a50: 0a 61 6e 79 20 75 73 65 20 6f 66 0a 5b 68 74 74 .any use of.[htt
3a60: 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 ps://en.wikipedi
3a70: 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 31 31 5f 28 a.org/wiki/C11_(
3a80: 43 5f 73 74 61 6e 64 61 72 64 5f 72 65 76 69 73 C_standard_revis
3a90: 69 6f 6e 29 7c 43 31 31 5d 2e 20 46 6f 73 73 69 ion)|C11]. Fossi
3aa0: 6c 0a 64 6f 65 73 20 63 61 6c 6c 20 50 4f 53 49 l.does call POSI
3ab0: 58 20 61 6e 64 20 57 69 6e 64 6f 77 73 20 41 50 X and Windows AP
3ac0: 49 73 20 77 68 65 72 65 20 6e 65 63 65 73 73 61 Is where necessa
3ad0: 72 79 2c 20 62 75 74 20 69 74 27 73 20 61 62 6f ry, but it's abo
3ae0: 75 74 0a 61 73 20 70 6f 72 74 61 62 6c 65 20 61 ut.as portable a
3af0: 73 20 79 6f 75 20 63 61 6e 20 61 73 6b 20 67 69 s you can ask gi
3b00: 76 65 6e 20 74 68 61 74 20 49 53 4f 20 43 20 64 ven that ISO C d
3b10: 6f 65 73 6e 27 74 20 64 65 66 69 6e 65 20 61 6c oesn't define al
3b20: 6c 20 6f 66 20 74 68 65 0a 66 61 63 69 6c 69 74 l of the.facilit
3b30: 69 65 73 20 46 6f 73 73 69 6c 20 6e 65 65 64 73 ies Fossil needs
3b40: 20 74 6f 20 64 6f 20 69 74 73 20 74 68 69 6e 67 to do its thing
3b50: 2e 20 28 4e 65 74 77 6f 72 6b 20 73 6f 63 6b 65 . (Network socke
3b60: 74 73 2c 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 ts, file locking
3b70: 2c 0a 65 74 63 2e 29 20 54 68 65 72 65 20 61 72 ,.etc.) There ar
3b80: 65 20 63 65 72 74 61 69 6e 6c 79 20 77 65 6c 6c e certainly well
3b90: 2d 6b 6e 6f 77 6e 20 70 6c 61 74 66 6f 72 6d 73 -known platforms
3ba0: 20 46 6f 73 73 69 6c 20 68 61 73 6e 27 74 20 62 Fossil hasn't b
3bb0: 65 65 6e 20 70 6f 72 74 65 64 0a 74 6f 20 79 65 een ported.to ye
3bc0: 74 2c 20 62 75 74 20 74 68 61 74 27 73 20 6d 6f t, but that's mo
3bd0: 73 74 20 6c 69 6b 65 6c 79 20 64 75 65 20 74 6f st likely due to
3be0: 20 6c 61 63 6b 20 6f 66 20 69 6e 74 65 72 65 73 lack of interes
3bf0: 74 20 72 61 74 68 65 72 20 74 68 61 6e 0a 69 6e t rather than.in
3c00: 68 65 72 65 6e 74 20 64 69 66 66 69 63 75 6c 74 herent difficult
3c10: 69 65 73 20 69 6e 20 64 6f 69 6e 67 20 74 68 65 ies in doing the
3c20: 20 70 6f 72 74 2e 20 57 65 20 62 65 6c 69 65 76 port. We believ
3c30: 65 20 74 68 65 20 6d 6f 73 74 20 73 74 72 69 6e e the most strin
3c40: 67 65 6e 74 0a 6c 69 6d 69 74 20 6f 6e 20 69 74 gent.limit on it
3c50: 73 20 70 6f 72 74 61 62 69 6c 69 74 79 20 69 73 s portability is
3c60: 20 74 68 61 74 20 69 74 20 61 73 73 75 6d 65 73 that it assumes
3c70: 20 61 74 20 6c 65 61 73 74 20 61 20 33 32 2d 62 at least a 32-b
3c80: 69 74 20 43 50 55 20 61 6e 64 0a 73 65 76 65 72 it CPU and.sever
3c90: 61 6c 20 6d 65 67 73 20 6f 66 20 66 6c 61 74 2d al megs of flat-
3ca0: 61 64 64 72 65 73 73 65 64 20 6d 65 6d 6f 72 79 addressed memory
3cb0: 2e e2 81 b4 20 46 6f 73 73 69 6c 20 69 73 6e 27 .⁴ Fossil isn'
3cc0: 74 20 71 75 69 74 65 20 61 73 0a 5b 68 74 74 70 t quite as.[http
3cd0: 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f s://www.sqlite.o
3ce0: 72 67 2f 63 75 73 74 6f 6d 62 75 69 6c 64 2e 68 rg/custombuild.h
3cf0: 74 6d 6c 7c 70 6f 72 74 61 62 6c 65 20 61 73 20 tml|portable as
3d00: 53 51 4c 69 74 65 5d 2c 20 62 75 74 20 69 74 27 SQLite], but it'
3d10: 73 0a 63 6c 6f 73 65 2e 0a 0a 4f 76 65 72 20 68 s.close...Over h
3d20: 61 6c 66 20 6f 66 20 74 68 65 20 43 20 63 6f 64 alf of the C cod
3d30: 65 20 69 6e 20 46 6f 73 73 69 6c 20 69 73 20 61 e in Fossil is a
3d40: 63 74 75 61 6c 6c 79 20 61 6e 20 65 6d 62 65 64 ctually an embed
3d50: 64 65 64 20 63 6f 70 79 20 6f 66 20 74 68 65 0a ded copy of the.
3d60: 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 20 current version
3d70: 6f 66 20 53 51 4c 69 74 65 2e 20 4d 75 63 68 20 of SQLite. Much
3d80: 6f 66 20 77 68 61 74 20 69 73 20 46 6f 73 73 69 of what is Fossi
3d90: 6c 2d 73 70 65 63 69 66 69 63 20 61 66 74 65 72 l-specific after
3da0: 20 79 6f 75 20 73 65 74 0a 53 51 4c 69 74 65 20 you set.SQLite
3db0: 69 74 73 65 6c 66 20 61 73 69 64 65 20 69 73 20 itself aside is
3dc0: 53 51 4c 20 63 6f 64 65 20 63 61 6c 6c 69 6e 67 SQL code calling
3dd0: 20 69 6e 74 6f 20 53 51 4c 69 74 65 2e 20 54 68 into SQLite. Th
3de0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 69 6e 65 e number of line
3df0: 73 0a 6f 66 20 53 51 4c 20 63 6f 64 65 20 69 6e s.of SQL code in
3e00: 20 46 6f 73 73 69 6c 20 69 73 6e 27 74 20 6c 61 Fossil isn't la
3e10: 72 67 65 20 62 79 20 70 65 72 63 65 6e 74 61 67 rge by percentag
3e20: 65 2c 20 62 75 74 20 73 69 6e 63 65 20 53 51 4c e, but since SQL
3e30: 20 69 73 20 73 75 63 68 0a 61 6e 20 65 78 70 72 is such.an expr
3e40: 65 73 73 69 76 65 2c 20 64 65 63 6c 61 72 61 74 essive, declarat
3e50: 69 76 65 20 6c 61 6e 67 75 61 67 65 2c 20 69 74 ive language, it
3e60: 20 68 61 73 20 61 6e 20 6f 75 74 73 69 7a 65 64 has an outsized
3e70: 20 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 74 6f contribution to
3e80: 0a 46 6f 73 73 69 6c 27 73 20 75 73 65 72 2d 76 .Fossil's user-v
3e90: 69 73 69 62 6c 65 20 66 75 6e 63 74 69 6f 6e 61 isible functiona
3ea0: 6c 69 74 79 2e 0a 0a 46 6f 73 73 69 6c 20 69 73 lity...Fossil is
3eb0: 6e 27 74 20 65 6e 74 69 72 65 6c 79 20 43 20 61 n't entirely C a
3ec0: 6e 64 20 53 51 4c 20 63 6f 64 65 2e 20 49 74 73 nd SQL code. Its
3ed0: 20 77 65 62 20 55 49 20 5b 2e 2f 6a 61 76 61 73 web UI [./javas
3ee0: 63 72 69 70 74 2e 6d 64 20 7c 0a 75 73 65 73 20 cript.md |.uses
3ef0: 4a 61 76 61 53 63 72 69 70 74 20 77 68 65 72 65 JavaScript where
3f00: 0a 6e 65 63 65 73 73 61 72 79 5d 2e 20 54 68 65 .necessary]. The
3f10: 20 73 65 72 76 65 72 2d 73 69 64 65 0a 55 49 20 server-side.UI
3f20: 73 63 72 69 70 74 69 6e 67 20 75 73 65 73 20 61 scripting uses a
3f30: 20 63 75 73 74 6f 6d 20 6d 69 6e 69 6d 61 6c 0a custom minimal.
3f40: 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 [https://en.wiki
3f50: 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 54 pedia.org/wiki/T
3f60: 63 6c 7c 54 63 6c 5d 20 64 69 61 6c 65 63 74 20 cl|Tcl] dialect
3f70: 63 61 6c 6c 65 64 0a 5b 68 74 74 70 73 3a 2f 2f called.[https://
3f80: 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 78 fossil-scm.org/x
3f90: 66 65 72 2f 64 6f 63 2f 74 72 75 6e 6b 2f 77 77 fer/doc/trunk/ww
3fa0: 77 2f 74 68 31 2e 6d 64 7c 54 48 31 5d 2c 20 77 w/th1.md|TH1], w
3fb0: 68 69 63 68 20 69 73 0a 65 6d 62 65 64 64 65 64 hich is.embedded
3fc0: 20 69 6e 74 6f 20 46 6f 73 73 69 6c 20 69 74 73 into Fossil its
3fd0: 65 6c 66 2e 20 46 6f 73 73 69 6c 27 73 20 62 75 elf. Fossil's bu
3fe0: 69 6c 64 20 73 79 73 74 65 6d 20 61 6e 64 20 74 ild system and t
3ff0: 65 73 74 20 73 75 69 74 65 20 61 72 65 0a 6c 61 est suite are.la
4000: 72 67 65 6c 79 20 62 61 73 65 64 20 6f 6e 20 54 rgely based on T
4010: 63 6c 2e e2 81 b5 20 41 6c 6c 20 6f 66 20 74 68 cl.⁵ All of th
4020: 69 73 20 69 73 20 71 75 69 74 65 20 70 6f 72 74 is is quite port
4030: 61 62 6c 65 2e 0a 0a 41 62 6f 75 74 20 68 61 6c able...About hal
4040: 66 20 6f 66 20 47 69 74 27 73 20 63 6f 64 65 20 f of Git's code
4050: 69 73 20 50 4f 53 49 58 20 43 2c 20 61 6e 64 20 is POSIX C, and
4060: 61 62 6f 75 74 20 61 20 74 68 69 72 64 20 69 73 about a third is
4070: 20 50 4f 53 49 58 20 73 68 65 6c 6c 0a 63 6f 64 POSIX shell.cod
4080: 65 2e 20 54 68 69 73 20 69 73 20 6c 61 72 67 65 e. This is large
4090: 6c 79 20 77 68 79 20 74 68 65 20 73 6f 2d 63 61 ly why the so-ca
40a0: 6c 6c 65 64 20 22 47 69 74 20 66 6f 72 20 57 69 lled "Git for Wi
40b0: 6e 64 6f 77 73 22 20 64 69 73 74 72 69 62 75 74 ndows" distribut
40c0: 69 6f 6e 73 0a 28 62 6f 74 68 20 5b 68 74 74 70 ions.(both [http
40d0: 73 3a 2f 2f 67 69 74 2d 73 63 6d 2e 63 6f 6d 2f s://git-scm.com/
40e0: 64 6f 77 6e 6c 6f 61 64 2f 77 69 6e 7c 66 69 72 download/win|fir
40f0: 73 74 2d 70 61 72 74 79 5d 20 61 6e 64 0a 5b 68 st-party] and.[h
4100: 74 74 70 73 3a 2f 2f 67 69 74 66 6f 72 77 69 6e ttps://gitforwin
4110: 64 6f 77 73 2e 6f 72 67 2f 7c 74 68 69 72 64 2d dows.org/|third-
4120: 70 61 72 74 79 5d 29 20 61 72 65 20 61 63 74 75 party]) are actu
4130: 61 6c 6c 79 20 61 6e 0a 5b 68 74 74 70 73 3a 2f ally an.[https:/
4140: 2f 77 77 77 2e 6d 73 79 73 32 2e 6f 72 67 2f 77 /www.msys2.org/w
4150: 69 6b 69 2f 48 6f 6d 65 2f 7c 4d 53 59 53 20 50 iki/Home/|MSYS P
4160: 4f 53 49 58 20 70 6f 72 74 61 62 69 6c 69 74 79 OSIX portability
4170: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 5d 20 62 75 environment] bu
4180: 6e 64 6c 65 64 0a 77 69 74 68 20 61 6c 6c 20 6f ndled.with all o
4190: 66 20 74 68 65 20 47 69 74 20 73 74 75 66 66 2c f the Git stuff,
41a0: 20 62 65 63 61 75 73 65 20 69 74 20 77 6f 75 6c because it woul
41b0: 64 20 62 65 20 74 6f 6f 20 70 61 69 6e 66 75 6c d be too painful
41c0: 20 74 6f 20 70 6f 72 74 20 47 69 74 0a 6e 61 74 to port Git.nat
41d0: 69 76 65 6c 79 20 74 6f 20 57 69 6e 64 6f 77 73 ively to Windows
41e0: 2e 20 47 69 74 20 69 73 20 61 20 66 6f 72 65 69 . Git is a forei
41f0: 67 6e 20 63 69 74 69 7a 65 6e 20 6f 6e 20 57 69 gn citizen on Wi
4200: 6e 64 6f 77 73 2c 20 73 70 65 61 6b 69 6e 67 20 ndows, speaking
4210: 74 6f 20 69 74 0a 6f 6e 6c 79 20 74 68 72 6f 75 to it.only throu
4220: 67 68 20 61 20 74 72 61 6e 73 6c 61 74 6f 72 2e gh a translator.
4230: e2 81 b6 0a 0a 57 68 69 6c 65 20 46 6f 73 73 69 ⁶..While Fossi
4240: 6c 20 64 6f 65 73 20 6c 65 61 6e 20 74 6f 77 61 l does lean towa
4250: 72 64 20 50 4f 53 49 58 20 6e 6f 72 6d 73 20 77 rd POSIX norms w
4260: 68 65 6e 20 67 69 76 65 6e 20 61 20 63 68 6f 69 hen given a choi
4270: 63 65 20 e2 80 94 20 4c 46 2d 6f 6e 6c 79 0a 6c ce — LF-only.l
4280: 69 6e 65 20 65 6e 64 69 6e 67 73 20 61 72 65 20 ine endings are
4290: 74 72 65 61 74 65 64 20 61 73 20 66 69 72 73 74 treated as first
42a0: 2d 63 6c 61 73 73 20 63 69 74 69 7a 65 6e 73 20 -class citizens
42b0: 6f 76 65 72 20 43 52 2b 4c 46 2c 20 66 6f 72 20 over CR+LF, for
42c0: 65 78 61 6d 70 6c 65 0a e2 80 94 20 74 68 65 20 example.— the
42d0: 57 69 6e 64 6f 77 73 20 62 75 69 6c 64 20 6f 66 Windows build of
42e0: 20 46 6f 73 73 69 6c 20 69 73 20 74 72 75 6c 79 Fossil is truly
42f0: 20 6e 61 74 69 76 65 2e 0a 0a 54 68 65 20 74 68 native...The th
4300: 69 72 64 2d 70 61 72 74 79 20 65 78 74 65 6e 73 ird-party extens
4310: 69 6f 6e 73 20 74 6f 20 47 69 74 20 74 65 6e 64 ions to Git tend
4320: 20 74 6f 20 66 6f 6c 6c 6f 77 20 74 68 69 73 20 to follow this
4330: 73 61 6d 65 20 70 61 74 74 65 72 6e 2e 0a 5b 68 same pattern..[h
4340: 74 74 70 73 3a 2f 2f 64 6f 63 73 2e 67 69 74 6c ttps://docs.gitl
4350: 61 62 2e 63 6f 6d 2f 65 65 2f 69 6e 73 74 61 6c ab.com/ee/instal
4360: 6c 2f 69 6e 73 74 61 6c 6c 5f 6d 65 74 68 6f 64 l/install_method
4370: 73 2e 68 74 6d 6c 23 6d 69 63 72 6f 73 6f 66 74 s.html#microsoft
4380: 2d 77 69 6e 64 6f 77 73 20 7c 20 0a 47 69 74 4c -windows | .GitL
4390: 61 62 20 69 73 6e 27 74 20 70 6f 72 74 61 62 6c ab isn't portabl
43a0: 65 20 74 6f 20 57 69 6e 64 6f 77 73 20 61 74 20 e to Windows at
43b0: 61 6c 6c 5d 2c 0a 66 6f 72 20 65 78 61 6d 70 6c all],.for exampl
43c0: 65 2e 20 46 6f 72 20 74 68 61 74 20 6d 61 74 74 e. For that matt
43d0: 65 72 2c 20 47 69 74 4c 61 62 20 69 73 6e 27 74 er, GitLab isn't
43e0: 20 65 76 65 6e 20 6f 66 66 69 63 69 61 6c 6c 79 even officially
43f0: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 0a 6d 61 supported on.ma
4400: 63 4f 53 2c 20 74 68 65 20 42 53 44 73 2c 20 6f cOS, the BSDs, o
4410: 72 20 75 6e 63 6f 6d 6d 6f 6e 20 4c 69 6e 75 78 r uncommon Linux
4420: 65 73 21 20 57 65 20 68 61 76 65 20 6d 61 6e 79 es! We have many
4430: 20 75 73 65 72 73 20 77 68 6f 20 72 65 67 75 6c users who regul
4440: 61 72 6c 79 0a 62 75 69 6c 64 20 61 6e 64 20 72 arly.build and r
4450: 75 6e 20 46 6f 73 73 69 6c 20 6f 6e 20 61 6c 6c un Fossil on all
4460: 20 6f 66 20 74 68 65 73 65 20 73 79 73 74 65 6d of these system
4470: 73 2e 0a 0a 0a 3c 68 33 20 69 64 3d 22 76 73 2d s....<h3 id="vs-
4480: 6c 69 6e 75 78 22 3e 32 2e 35 20 4c 69 6e 75 78 linux">2.5 Linux
4490: 20 76 73 2e 20 53 51 4c 69 74 65 3c 2f 68 33 3e vs. SQLite</h3>
44a0: 0a 0a 46 6f 73 73 69 6c 20 61 6e 64 20 47 69 74 ..Fossil and Git
44b0: 20 70 72 6f 6d 6f 74 65 20 64 69 66 66 65 72 65 promote differe
44c0: 6e 74 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 73 nt development s
44d0: 74 79 6c 65 73 20 62 65 63 61 75 73 65 20 65 61 tyles because ea
44e0: 63 68 20 6f 6e 65 20 77 61 73 0a 73 70 65 63 69 ch one was.speci
44f0: 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 fically designed
4500: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20 to support the
4510: 63 72 65 61 74 6f 72 27 73 20 6d 61 69 6e 20 73 creator's main s
4520: 6f 66 74 77 61 72 65 0a 64 65 76 65 6c 6f 70 6d oftware.developm
4530: 65 6e 74 20 70 72 6f 6a 65 63 74 3a 20 5b 68 74 ent project: [ht
4540: 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 tps://en.wikiped
4550: 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4c 69 6e 75 ia.org/wiki/Linu
4560: 73 5f 54 6f 72 76 61 6c 64 73 7c 4c 69 6e 75 73 s_Torvalds|Linus
4570: 0a 54 6f 72 76 61 6c 64 73 5d 20 64 65 73 69 67 .Torvalds] desig
4580: 6e 65 64 20 47 69 74 20 74 6f 20 73 75 70 70 6f ned Git to suppo
4590: 72 74 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f rt development o
45a0: 66 0a 5b 68 74 74 70 73 3a 2f 2f 77 77 77 2e 6b f.[https://www.k
45b0: 65 72 6e 65 6c 2e 6f 72 67 2f 7c 74 68 65 20 4c ernel.org/|the L
45c0: 69 6e 75 78 20 6b 65 72 6e 65 6c 5d 2c 20 61 6e inux kernel], an
45d0: 64 0a 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 d.[https://en.wi
45e0: 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 kipedia.org/wiki
45f0: 2f 44 2e 5f 52 69 63 68 61 72 64 5f 48 69 70 70 /D._Richard_Hipp
4600: 7c 44 2e 20 52 69 63 68 61 72 64 20 48 69 70 70 |D. Richard Hipp
4610: 5d 20 64 65 73 69 67 6e 65 64 0a 46 6f 73 73 69 ] designed.Fossi
4620: 6c 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 l to support the
4630: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 66 20 development of
4640: 5b 68 74 74 70 73 3a 2f 2f 73 71 6c 69 74 65 2e [https://sqlite.
4650: 6f 72 67 2f 7c 53 51 4c 69 74 65 5d 2e 0a 42 6f org/|SQLite]..Bo
4660: 74 68 20 70 72 6f 6a 65 63 74 73 20 6d 75 73 74 th projects must
4670: 20 72 61 6e 6b 20 68 69 67 68 20 6f 6e 20 61 6e rank high on an
4680: 79 20 6f 62 6a 65 63 74 69 76 65 20 6c 69 73 74 y objective list
4690: 20 6f 66 20 22 6d 6f 73 74 0a 69 6d 70 6f 72 74 of "most.import
46a0: 61 6e 74 20 46 4f 53 53 20 70 72 6f 6a 65 63 74 ant FOSS project
46b0: 73 2c 22 20 79 65 74 20 74 68 65 73 65 20 74 77 s," yet these tw
46c0: 6f 20 70 72 6f 6a 65 63 74 73 20 61 72 65 20 61 o projects are a
46d0: 6c 6d 6f 73 74 20 65 6e 74 69 72 65 6c 79 20 75 lmost entirely u
46e0: 6e 6c 69 6b 65 0a 6f 6e 65 20 61 6e 6f 74 68 65 nlike.one anothe
46f0: 72 2c 20 73 6f 20 69 74 20 69 73 20 6e 61 74 75 r, so it is natu
4700: 72 61 6c 20 74 68 61 74 20 74 68 65 20 44 56 43 ral that the DVC
4710: 53 65 73 20 63 72 65 61 74 65 64 20 74 6f 20 73 Ses created to s
4720: 75 70 70 6f 72 74 20 74 68 65 73 65 0a 70 72 6f upport these.pro
4730: 6a 65 63 74 73 20 61 6c 73 6f 20 64 69 66 66 65 jects also diffe
4740: 72 20 69 6e 20 6d 61 6e 79 20 77 61 79 73 2e 0a r in many ways..
4750: 0a 49 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e .In the followin
4760: 67 20 73 65 63 74 69 6f 6e 73 2c 20 77 65 20 77 g sections, we w
4770: 69 6c 6c 20 65 78 70 6c 61 69 6e 20 68 6f 77 20 ill explain how
4780: 66 6f 75 72 20 6b 65 79 20 64 69 66 66 65 72 65 four key differe
4790: 6e 63 65 73 0a 62 65 74 77 65 65 6e 20 74 68 65 nces.between the
47a0: 20 4c 69 6e 75 78 20 61 6e 64 20 53 51 4c 69 74 Linux and SQLit
47b0: 65 20 73 6f 66 74 77 61 72 65 20 64 65 76 65 6c e software devel
47c0: 6f 70 6d 65 6e 74 20 70 72 6f 6a 65 63 74 73 20 opment projects
47d0: 64 69 63 74 61 74 65 64 20 74 68 65 0a 64 65 73 dictated the.des
47e0: 69 67 6e 20 6f 66 20 65 61 63 68 20 44 56 43 53 ign of each DVCS
47f0: 27 73 20 6c 6f 77 2d 66 72 69 63 74 69 6f 6e 20 's low-friction
4800: 75 73 61 67 65 20 70 61 74 68 2e 0a 0a 57 68 65 usage path...Whe
4810: 6e 20 64 65 63 69 64 69 6e 67 20 62 65 74 77 65 n deciding betwe
4820: 65 6e 20 74 68 65 73 65 20 74 77 6f 20 44 56 43 en these two DVC
4830: 53 65 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 20 Ses, you should
4840: 61 73 6b 20 79 6f 75 72 73 65 6c 66 2c 20 22 49 ask yourself, "I
4850: 73 20 6d 79 0a 70 72 6f 6a 65 63 74 20 6d 6f 72 s my.project mor
4860: 65 20 6c 69 6b 65 20 4c 69 6e 75 78 20 6f 72 20 e like Linux or
4870: 6d 6f 72 65 20 6c 69 6b 65 20 53 51 4c 69 74 65 more like SQLite
4880: 3f 22 0a 0a 0a 3c 68 34 20 69 64 3d 22 64 65 76 ?"...<h4 id="dev
4890: 6f 72 67 22 3e 32 2e 35 2e 31 20 44 65 76 65 6c org">2.5.1 Devel
48a0: 6f 70 6d 65 6e 74 20 4f 72 67 61 6e 69 7a 61 74 opment Organizat
48b0: 69 6f 6e 3c 2f 68 34 3e 0a 0a 45 72 69 63 20 53 ion</h4>..Eric S
48c0: 2e 20 52 61 79 6d 6f 6e 64 27 73 20 73 65 6d 69 . Raymond's semi
48d0: 6e 61 6c 20 65 73 73 61 79 2d 74 75 72 6e 65 64 nal essay-turned
48e0: 2d 62 6f 6f 6b 0a 22 5b 68 74 74 70 73 3a 2f 2f -book."[https://
48f0: 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 en.wikipedia.org
4900: 2f 77 69 6b 69 2f 54 68 65 5f 43 61 74 68 65 64 /wiki/The_Cathed
4910: 72 61 6c 5f 61 6e 64 5f 74 68 65 5f 42 61 7a 61 ral_and_the_Baza
4920: 61 72 7c 54 68 65 0a 43 61 74 68 65 64 72 61 6c ar|The.Cathedral
4930: 20 61 6e 64 20 74 68 65 20 42 61 7a 61 61 72 5d and the Bazaar]
4940: 22 20 64 65 74 61 69 6c 73 20 74 68 65 20 74 77 " details the tw
4950: 6f 20 6d 61 6a 6f 72 20 64 65 76 65 6c 6f 70 6d o major developm
4960: 65 6e 74 0a 6f 72 67 61 6e 69 7a 61 74 69 6f 6e ent.organization
4970: 20 73 74 79 6c 65 73 20 66 6f 75 6e 64 20 69 6e styles found in
4980: 0a 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b .[https://en.wik
4990: 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f ipedia.org/wiki/
49a0: 46 72 65 65 5f 61 6e 64 5f 6f 70 65 6e 2d 73 6f Free_and_open-so
49b0: 75 72 63 65 5f 73 6f 66 74 77 61 72 65 7c 46 4f urce_software|FO
49c0: 53 53 5d 0a 70 72 6f 6a 65 63 74 73 2e 20 41 73 SS].projects. As
49d0: 20 69 74 20 68 61 70 70 65 6e 73 2c 20 4c 69 6e it happens, Lin
49e0: 75 78 20 61 6e 64 20 53 51 4c 69 74 65 20 66 61 ux and SQLite fa
49f0: 6c 6c 20 6f 6e 20 6f 70 70 6f 73 69 74 65 20 73 ll on opposite s
4a00: 69 64 65 73 20 6f 66 20 74 68 69 73 0a 64 69 63 ides of this.dic
4a10: 68 6f 74 6f 6d 79 2e 20 44 69 66 66 65 72 69 6e hotomy. Differin
4a20: 67 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 72 g development or
4a30: 67 61 6e 69 7a 61 74 69 6f 6e 20 73 74 79 6c 65 ganization style
4a40: 73 20 64 69 63 74 61 74 65 20 61 20 64 69 66 66 s dictate a diff
4a50: 65 72 65 6e 74 0a 64 65 73 69 67 6e 20 61 6e 64 erent.design and
4a60: 20 6c 6f 77 2d 66 72 69 63 74 69 6f 6e 20 75 73 low-friction us
4a70: 61 67 65 20 70 61 74 68 20 69 6e 20 74 68 65 20 age path in the
4a80: 74 6f 6f 6c 73 20 63 72 65 61 74 65 64 20 74 6f tools created to
4a90: 20 73 75 70 70 6f 72 74 20 65 61 63 68 0a 70 72 support each.pr
4aa0: 6f 6a 65 63 74 2e 0a 0a 47 69 74 20 70 72 6f 6d oject...Git prom
4ab0: 6f 74 65 73 20 74 68 65 20 4c 69 6e 75 78 20 6b otes the Linux k
4ac0: 65 72 6e 65 6c 27 73 20 62 61 7a 61 61 72 20 64 ernel's bazaar d
4ad0: 65 76 65 6c 6f 70 6d 65 6e 74 20 73 74 79 6c 65 evelopment style
4ae0: 2c 20 69 6e 20 77 68 69 63 68 20 61 0a 6c 6f 6f , in which a.loo
4af0: 73 65 6c 79 2d 61 73 73 6f 63 69 61 74 65 64 20 sely-associated
4b00: 6d 61 73 73 20 6f 66 20 64 65 76 65 6c 6f 70 65 mass of develope
4b10: 72 73 20 63 6f 6e 74 72 69 62 75 74 65 20 74 68 rs contribute th
4b20: 65 69 72 20 77 6f 72 6b 20 74 68 72 6f 75 67 68 eir work through
4b30: 0a 5b 68 74 74 70 73 3a 2f 2f 67 69 74 2d 73 63 .[https://git-sc
4b40: 6d 2e 63 6f 6d 2f 62 6f 6f 6b 2f 65 6e 2f 76 32 m.com/book/en/v2
4b50: 2f 44 69 73 74 72 69 62 75 74 65 64 2d 47 69 74 /Distributed-Git
4b60: 2d 44 69 73 74 72 69 62 75 74 65 64 2d 57 6f 72 -Distributed-Wor
4b70: 6b 66 6c 6f 77 73 23 5f 64 69 63 74 61 74 6f 72 kflows#_dictator
4b80: 5f 61 6e 64 5f 6c 69 65 75 74 65 6e 61 6e 74 73 _and_lieutenants
4b90: 5f 77 6f 72 6b 66 6c 6f 77 7c 61 0a 68 69 65 72 _workflow|a.hier
4ba0: 61 72 63 68 79 20 6f 66 20 6c 69 65 75 74 65 6e archy of lieuten
4bb0: 61 6e 74 73 5d 20 77 68 6f 20 6d 61 6e 61 67 65 ants] who manage
4bc0: 20 61 6e 64 20 63 6c 65 61 6e 20 75 70 20 74 68 and clean up th
4bd0: 65 73 65 20 63 6f 6e 74 72 69 62 75 74 69 6f 6e ese contribution
4be0: 73 0a 66 6f 72 20 63 6f 6e 73 69 64 65 72 61 74 s.for considerat
4bf0: 69 6f 6e 20 62 79 20 4c 69 6e 75 73 20 54 6f 72 ion by Linus Tor
4c00: 76 61 6c 64 73 2c 20 77 68 6f 20 68 61 73 20 74 valds, who has t
4c10: 68 65 20 70 6f 77 65 72 20 74 6f 20 63 68 65 72 he power to cher
4c20: 72 79 2d 70 69 63 6b 0a 69 6e 64 69 76 69 64 75 ry-pick.individu
4c30: 61 6c 20 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 al contributions
4c40: 20 69 6e 74 6f 20 68 69 73 20 76 65 72 73 69 6f into his versio
4c50: 6e 20 6f 66 20 74 68 65 20 4c 69 6e 75 78 20 6b n of the Linux k
4c60: 65 72 6e 65 6c 2e 20 47 69 74 0a 61 6c 6c 6f 77 ernel. Git.allow
4c70: 73 20 61 6e 20 61 6e 6f 6e 79 6d 6f 75 73 20 64 s an anonymous d
4c80: 65 76 65 6c 6f 70 65 72 20 74 6f 20 72 65 62 61 eveloper to reba
4c90: 73 65 20 61 6e 64 20 70 75 73 68 20 73 70 65 63 se and push spec
4ca0: 69 66 69 63 20 6c 6f 63 61 6c 6c 79 2d 6e 61 6d ific locally-nam
4cb0: 65 64 0a 70 72 69 76 61 74 65 20 62 72 61 6e 63 ed.private branc
4cc0: 68 65 73 2c 20 73 6f 20 74 68 61 74 20 61 20 47 hes, so that a G
4cd0: 69 74 20 72 65 70 6f 20 63 6c 6f 6e 65 20 6f 66 it repo clone of
4ce0: 74 65 6e 20 69 73 6e 27 74 20 72 65 61 6c 6c 79 ten isn't really
4cf0: 20 61 20 63 6c 6f 6e 65 20 61 74 0a 61 6c 6c 3a a clone at.all:
4d00: 20 69 74 20 6d 61 79 20 68 61 76 65 20 61 6e 20 it may have an
4d10: 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65 72 arbitrary number
4d20: 20 6f 66 20 64 69 66 66 65 72 65 6e 63 65 73 20 of differences
4d30: 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 0a relative to the.
4d40: 72 65 70 6f 73 69 74 6f 72 79 20 69 74 20 6f 72 repository it or
4d50: 69 67 69 6e 61 6c 6c 79 20 63 6c 6f 6e 65 64 20 iginally cloned
4d60: 66 72 6f 6d 2e 20 47 69 74 20 65 6e 63 6f 75 72 from. Git encour
4d70: 61 67 65 73 20 73 69 6c 6f 65 64 20 64 65 76 65 ages siloed deve
4d80: 6c 6f 70 6d 65 6e 74 2e 0a 53 65 6c 65 63 74 20 lopment..Select
4d90: 77 6f 72 6b 20 69 6e 20 61 20 64 65 76 65 6c 6f work in a develo
4da0: 70 65 72 27 73 20 6c 6f 63 61 6c 20 72 65 70 6f per's local repo
4db0: 73 69 74 6f 72 79 20 6d 61 79 20 72 65 6d 61 69 sitory may remai
4dc0: 6e 20 70 72 69 76 61 74 65 0a 69 6e 64 65 66 69 n private.indefi
4dd0: 6e 69 74 65 6c 79 2e 0a 0a 41 6c 6c 20 6f 66 20 nitely...All of
4de0: 74 68 69 73 20 69 73 20 65 78 61 63 74 6c 79 20 this is exactly
4df0: 77 68 61 74 20 6f 6e 65 20 77 61 6e 74 73 20 77 what one wants w
4e00: 68 65 6e 20 64 6f 69 6e 67 20 62 61 7a 61 61 72 hen doing bazaar
4e10: 2d 73 74 79 6c 65 0a 64 65 76 65 6c 6f 70 6d 65 -style.developme
4e20: 6e 74 2e 0a 0a 46 6f 73 73 69 6c 27 73 20 6e 6f nt...Fossil's no
4e30: 72 6d 61 6c 20 6d 6f 64 65 20 6f 66 20 6f 70 65 rmal mode of ope
4e40: 72 61 74 69 6f 6e 20 64 69 66 66 65 72 73 20 6f ration differs o
4e50: 6e 20 65 76 65 72 79 20 6f 6e 65 20 6f 66 20 74 n every one of t
4e60: 68 65 73 65 20 70 6f 69 6e 74 73 2c 0a 77 69 74 hese points,.wit
4e70: 68 20 74 68 65 20 73 70 65 63 69 66 69 63 20 64 h the specific d
4e80: 65 73 69 67 6e 65 64 2d 69 6e 20 67 6f 61 6c 20 esigned-in goal
4e90: 6f 66 20 70 72 6f 6d 6f 74 69 6e 67 20 53 51 4c of promoting SQL
4ea0: 69 74 65 27 73 20 63 61 74 68 65 64 72 61 6c 0a ite's cathedral.
4eb0: 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6d 6f 64 65 development mode
4ec0: 6c 3a 0a 0a 20 20 2a 20 20 3c 62 3e 50 65 72 73 l:.. * <b>Pers
4ed0: 6f 6e 61 6c 20 65 6e 67 61 67 65 6d 65 6e 74 3a onal engagement:
4ee0: 3c 2f 62 3e 20 53 51 4c 69 74 65 27 73 20 64 65 </b> SQLite's de
4ef0: 76 65 6c 6f 70 65 72 73 20 6b 6e 6f 77 20 65 61 velopers know ea
4f00: 63 68 0a 20 20 20 20 20 6f 74 68 65 72 20 62 79 ch. other by
4f10: 20 6e 61 6d 65 20 61 6e 64 20 77 6f 72 6b 20 74 name and work t
4f20: 6f 67 65 74 68 65 72 20 64 61 69 6c 79 20 6f 6e ogether daily on
4f30: 20 74 68 65 20 70 72 6f 6a 65 63 74 2e 0a 20 0a the project.. .
4f40: 20 20 2a 20 20 3c 62 3e 54 72 75 73 74 20 6f 76 * <b>Trust ov
4f50: 65 72 20 68 69 65 72 61 72 63 68 79 3a 3c 2f 62 er hierarchy:</b
4f60: 3e 20 53 51 4c 69 74 65 27 73 20 64 65 76 65 6c > SQLite's devel
4f70: 6f 70 65 72 73 20 63 68 65 63 6b 0a 20 20 20 20 opers check.
4f80: 20 63 68 61 6e 67 65 73 20 69 6e 74 6f 20 74 68 changes into th
4f90: 65 69 72 20 6c 6f 63 61 6c 20 72 65 70 6f 73 69 eir local reposi
4fa0: 74 6f 72 79 2c 20 61 6e 64 20 74 68 65 73 65 20 tory, and these
4fb0: 61 72 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 are immediately
4fc0: 61 6e 64 0a 20 20 20 20 20 61 75 74 6f 6d 61 74 and. automat
4fd0: 69 63 61 6c 6c 79 20 73 79 6e 63 68 72 6f 6e 69 ically synchroni
4fe0: 7a 65 64 20 75 70 20 74 6f 20 74 68 65 20 63 65 zed up to the ce
4ff0: 6e 74 72 61 6c 20 72 65 70 6f 73 69 74 6f 72 79 ntral repository
5000: 3b 20 74 68 65 72 65 20 69 73 20 6e 6f 0a 20 20 ; there is no.
5010: 20 20 20 22 5b 68 74 74 70 73 3a 2f 2f 67 69 74 "[https://git
5020: 2d 73 63 6d 2e 63 6f 6d 2f 62 6f 6f 6b 2f 65 6e -scm.com/book/en
5030: 2f 76 32 2f 44 69 73 74 72 69 62 75 74 65 64 2d /v2/Distributed-
5040: 47 69 74 2d 44 69 73 74 72 69 62 75 74 65 64 2d Git-Distributed-
5050: 57 6f 72 6b 66 6c 6f 77 73 23 5f 64 69 63 74 61 Workflows#_dicta
5060: 74 6f 72 5f 61 6e 64 5f 6c 69 65 75 74 65 6e 61 tor_and_lieutena
5070: 6e 74 73 5f 77 6f 72 6b 66 6c 6f 77 7c 64 69 63 nts_workflow|dic
5080: 74 61 74 6f 72 0a 20 20 20 20 20 61 6e 64 20 6c tator. and l
5090: 69 65 75 74 65 6e 61 6e 74 73 5d 22 20 68 69 65 ieutenants]" hie
50a0: 72 61 72 63 68 79 20 61 73 20 77 69 74 68 20 4c rarchy as with L
50b0: 69 6e 75 78 20 6b 65 72 6e 65 6c 20 63 6f 6e 74 inux kernel cont
50c0: 72 69 62 75 74 69 6f 6e 73 2e 20 20 44 2e 0a 20 ributions. D..
50d0: 20 20 20 20 52 69 63 68 61 72 64 20 48 69 70 70 Richard Hipp
50e0: 20 72 61 72 65 6c 79 20 6f 76 65 72 72 69 64 65 rarely override
50f0: 73 20 64 65 63 69 73 69 6f 6e 73 20 6d 61 64 65 s decisions made
5100: 20 62 79 20 74 68 6f 73 65 20 68 65 20 68 61 73 by those he has
5110: 20 74 72 75 73 74 65 64 0a 20 20 20 20 20 77 69 trusted. wi
5120: 74 68 20 63 6f 6d 6d 69 74 20 61 63 63 65 73 73 th commit access
5130: 20 6f 6e 20 68 69 73 20 72 65 70 6f 73 69 74 6f on his reposito
5140: 72 69 65 73 2e 20 46 6f 73 73 69 6c 20 61 6c 6c ries. Fossil all
5150: 6f 77 73 20 79 6f 75 20 74 6f 20 67 69 76 65 0a ows you to give.
5160: 20 20 20 20 20 5b 2e 2f 63 61 70 73 2f 61 64 6d [./caps/adm
5170: 69 6e 2d 76 2d 73 65 74 75 70 2e 6d 64 7c 73 6f in-v-setup.md|so
5180: 6d 65 20 75 73 65 72 73 5d 20 6d 6f 72 65 20 70 me users] more p
5190: 6f 77 65 72 20 6f 76 65 72 20 77 68 61 74 0a 20 ower over what.
51a0: 20 20 20 20 74 68 65 79 20 63 61 6e 20 64 6f 20 they can do
51b0: 77 69 74 68 20 74 68 65 20 72 65 70 6f 73 69 74 with the reposit
51c0: 6f 72 79 2c 20 62 75 74 20 46 6f 73 73 69 6c 20 ory, but Fossil
51d0: 5b 2e 2f 63 61 70 73 2f 69 6e 64 65 78 2e 6d 64 [./caps/index.md
51e0: 23 75 63 61 70 20 7c 0a 20 20 20 20 20 6f 6e 6c #ucap |. onl
51f0: 79 20 6c 6f 6f 73 65 6c 79 20 73 75 70 70 6f 72 y loosely suppor
5200: 74 73 5d 20 74 68 65 20 65 6e 66 6f 72 63 65 6d ts] the enforcem
5210: 65 6e 74 20 6f 66 20 61 20 64 65 76 65 6c 6f 70 ent of a develop
5220: 6d 65 6e 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f ment organizatio
5230: 6e 27 73 0a 20 20 20 20 20 73 6f 63 69 61 6c 20 n's. social
5240: 61 6e 64 20 70 6f 77 65 72 20 68 69 65 72 61 72 and power hierar
5250: 63 68 69 65 73 2e 20 46 6f 73 73 69 6c 20 69 73 chies. Fossil is
5260: 20 61 20 67 72 65 61 74 20 66 69 74 20 66 6f 72 a great fit for
5270: 0a 20 20 20 20 20 5b 68 74 74 70 73 3a 2f 2f 65 . [https://e
5280: 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f n.wikipedia.org/
5290: 77 69 6b 69 2f 46 6c 61 74 5f 6f 72 67 61 6e 69 wiki/Flat_organi
52a0: 7a 61 74 69 6f 6e 7c 66 6c 61 74 0a 20 20 20 20 zation|flat.
52b0: 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 73 5d 2e organizations].
52c0: 0a 20 0a 20 20 2a 20 20 3c 62 3e 4e 6f 20 65 61 . . * <b>No ea
52d0: 73 79 20 64 72 69 76 65 2d 62 79 20 63 6f 6e 74 sy drive-by cont
52e0: 72 69 62 75 74 69 6f 6e 73 3a 3c 2f 62 3e 20 47 ributions:</b> G
52f0: 69 74 0a 20 20 20 20 20 5b 68 74 74 70 73 3a 2f it. [https:/
5300: 2f 77 77 77 2e 67 69 74 2d 73 63 6d 2e 63 6f 6d /www.git-scm.com
5310: 2f 64 6f 63 73 2f 67 69 74 2d 72 65 71 75 65 73 /docs/git-reques
5320: 74 2d 70 75 6c 6c 7c 70 75 6c 6c 20 72 65 71 75 t-pull|pull requ
5330: 65 73 74 73 5d 20 6f 66 66 65 72 0a 20 20 20 20 ests] offer.
5340: 20 61 20 6c 6f 77 2d 66 72 69 63 74 69 6f 6e 20 a low-friction
5350: 70 61 74 68 20 74 6f 20 61 63 63 65 70 74 69 6e path to acceptin
5360: 67 0a 20 20 20 20 20 5b 68 74 74 70 73 3a 2f 2f g. [https://
5370: 77 77 77 2e 6a 6f 6e 6f 62 61 63 6f 6e 2e 63 6f www.jonobacon.co
5380: 6d 2f 32 30 31 32 2f 30 37 2f 32 35 2f 62 75 69 m/2012/07/25/bui
5390: 6c 64 69 6e 67 2d 73 74 72 6f 6e 67 2d 63 6f 6d lding-strong-com
53a0: 6d 75 6e 69 74 79 2d 73 74 72 75 63 74 75 72 61 munity-structura
53b0: 6c 2d 69 6e 74 65 67 72 69 74 79 2f 7c 64 72 69 l-integrity/|dri
53c0: 76 65 2d 62 79 0a 20 20 20 20 20 63 6f 6e 74 72 ve-by. contr
53d0: 69 62 75 74 69 6f 6e 73 5d 2e 20 46 6f 73 73 69 ibutions]. Fossi
53e0: 6c 27 73 20 63 6c 6f 73 65 73 74 20 65 71 75 69 l's closest equi
53f0: 76 61 6c 65 6e 74 73 20 61 72 65 20 69 74 73 20 valents are its
5400: 75 6e 69 71 75 65 0a 20 20 20 20 20 5b 2f 68 65 unique. [/he
5410: 6c 70 3f 63 6d 64 3d 62 75 6e 64 6c 65 7c 62 75 lp?cmd=bundle|bu
5420: 6e 64 6c 65 5d 20 61 6e 64 20 5b 2f 68 65 6c 70 ndle] and [/help
5430: 3f 63 6d 64 3d 70 61 74 63 68 7c 70 61 74 63 68 ?cmd=patch|patch
5440: 5d 20 66 65 61 74 75 72 65 73 2c 20 77 68 69 63 ] features, whic
5450: 68 20 72 65 71 75 69 72 65 20 68 69 67 68 65 72 h require higher
5460: 20 65 6e 67 61 67 65 6d 65 6e 74 0a 20 20 20 20 engagement.
5470: 20 74 68 61 6e 20 66 69 72 69 6e 67 20 6f 66 66 than firing off
5480: 20 61 20 50 52 2e e2 81 b7 20 54 68 69 73 20 64 a PR.⁷ This d
5490: 69 66 66 65 72 65 6e 63 65 20 63 6f 6d 65 73 20 ifference comes
54a0: 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 74 68 directly from th
54b0: 65 0a 20 20 20 20 20 69 6e 69 74 69 61 6c 20 64 e. initial d
54c0: 65 73 69 67 6e 65 64 20 70 75 72 70 6f 73 65 20 esigned purpose
54d0: 66 6f 72 20 65 61 63 68 20 74 6f 6f 6c 3a 20 74 for each tool: t
54e0: 68 65 20 53 51 4c 69 74 65 20 70 72 6f 6a 65 63 he SQLite projec
54f0: 74 20 64 6f 65 73 6e 27 74 0a 20 20 20 20 20 61 t doesn't. a
5500: 63 63 65 70 74 20 6f 75 74 73 69 64 65 20 63 6f ccept outside co
5510: 6e 74 72 69 62 75 74 69 6f 6e 73 20 66 72 6f 6d ntributions from
5520: 20 70 72 65 76 69 6f 75 73 6c 79 2d 75 6e 6b 6e previously-unkn
5530: 6f 77 6e 20 64 65 76 65 6c 6f 70 65 72 73 2c 20 own developers,
5540: 62 75 74 0a 20 20 20 20 20 74 68 65 20 4c 69 6e but. the Lin
5550: 75 78 20 6b 65 72 6e 65 6c 20 64 6f 65 73 2e 0a ux kernel does..
5560: 20 0a 20 20 2a 20 20 3c 62 3e 4e 6f 20 72 65 62 . * <b>No reb
5570: 61 73 69 6e 67 3a 3c 2f 62 3e 20 57 68 65 6e 20 asing:</b> When
5580: 79 6f 75 72 20 6c 6f 63 61 6c 20 72 65 70 6f 20 your local repo
5590: 63 6c 6f 6e 65 20 73 79 6e 63 73 20 63 68 61 6e clone syncs chan
55a0: 67 65 73 0a 20 20 20 20 20 75 70 20 74 6f 20 69 ges. up to i
55b0: 74 73 20 70 61 72 65 6e 74 2c 20 74 68 6f 73 65 ts parent, those
55c0: 20 63 68 61 6e 67 65 73 20 61 72 65 20 73 65 6e changes are sen
55d0: 74 20 65 78 61 63 74 6c 79 20 61 73 20 74 68 65 t exactly as the
55e0: 79 20 77 65 72 65 0a 20 20 20 20 20 63 6f 6d 6d y were. comm
55f0: 69 74 74 65 64 20 6c 6f 63 61 6c 6c 79 2e 20 5b itted locally. [
5600: 23 68 69 73 74 6f 72 79 7c 54 68 65 72 65 20 69 #history|There i
5610: 73 20 6e 6f 20 72 65 62 61 73 69 6e 67 20 6d 65 s no rebasing me
5620: 63 68 61 6e 69 73 6d 20 69 6e 0a 20 20 20 20 20 chanism in.
5630: 46 6f 73 73 69 6c 2c 20 6f 6e 20 70 75 72 70 6f Fossil, on purpo
5640: 73 65 2e 5d 0a 20 0a 20 20 2a 20 20 3c 62 3e 53 se.]. . * <b>S
5650: 79 6e 63 20 6f 76 65 72 20 70 75 73 68 3a 3c 2f ync over push:</
5660: 62 3e 20 45 78 70 6c 69 63 69 74 20 70 75 73 68 b> Explicit push
5670: 65 73 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 20 es are uncommon
5680: 69 6e 0a 20 20 20 20 20 46 6f 73 73 69 6c 2d 62 in. Fossil-b
5690: 61 73 65 64 20 70 72 6f 6a 65 63 74 73 3a 20 74 ased projects: t
56a0: 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 74 6f he default is to
56b0: 20 72 65 6c 79 20 6f 6e 0a 20 20 20 20 20 5b 2f rely on. [/
56c0: 68 65 6c 70 3f 63 6d 64 3d 61 75 74 6f 73 79 6e help?cmd=autosyn
56d0: 63 7c 61 75 74 6f 73 79 6e 63 20 6d 6f 64 65 5d c|autosync mode]
56e0: 20 69 6e 73 74 65 61 64 2c 20 69 6e 20 77 68 69 instead, in whi
56f0: 63 68 20 65 61 63 68 20 63 6f 6d 6d 69 74 0a 20 ch each commit.
5700: 20 20 20 20 73 79 6e 63 73 20 69 6d 6d 65 64 69 syncs immedi
5710: 61 74 65 6c 79 20 74 6f 20 69 74 73 20 70 61 72 ately to its par
5720: 65 6e 74 20 72 65 70 6f 73 69 74 6f 72 79 2e 20 ent repository.
5730: 54 68 69 73 20 69 73 20 61 20 6d 6f 64 65 20 73 This is a mode s
5740: 6f 20 79 6f 75 0a 20 20 20 20 20 63 61 6e 20 74 o you. can t
5750: 75 72 6e 20 69 74 20 6f 66 66 20 74 65 6d 70 6f urn it off tempo
5760: 72 61 72 69 6c 79 20 77 68 65 6e 20 6e 65 65 64 rarily when need
5770: 65 64 2c 20 73 75 63 68 20 61 73 20 77 68 65 6e ed, such as when
5780: 20 77 6f 72 6b 69 6e 67 0a 20 20 20 20 20 6f 66 working. of
5790: 66 6c 69 6e 65 2e 20 46 6f 73 73 69 6c 20 69 73 fline. Fossil is
57a0: 20 73 74 69 6c 6c 20 61 20 74 72 75 6c 79 20 64 still a truly d
57b0: 69 73 74 72 69 62 75 74 65 64 20 76 65 72 73 69 istributed versi
57c0: 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65 on control syste
57d0: 6d 3b 0a 20 20 20 20 20 69 74 27 73 20 6a 75 73 m;. it's jus
57e0: 74 20 74 68 61 74 20 69 74 73 20 73 74 61 72 74 t that its start
57f0: 69 6e 67 20 64 65 66 61 75 6c 74 20 69 73 20 74 ing default is t
5800: 6f 20 61 73 73 75 6d 65 20 79 6f 75 27 72 65 20 o assume you're
5810: 72 61 72 65 6c 79 20 6f 75 74 0a 20 20 20 20 20 rarely out.
5820: 6f 66 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e of communication
5830: 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 with the parent
5840: 20 72 65 70 6f 2e 0a 20 20 20 20 20 3c 62 72 3e repo.. <br>
5850: 3c 62 72 3e 0a 20 20 20 20 20 54 68 69 73 20 69 <br>. This i
5860: 73 20 6e 6f 74 20 6d 65 72 65 6c 79 20 61 20 72 s not merely a r
5870: 65 66 6c 65 63 74 69 6f 6e 20 6f 66 20 6d 6f 64 eflection of mod
5880: 65 72 6e 20 61 6c 77 61 79 73 2d 63 6f 6e 6e 65 ern always-conne
5890: 63 74 65 64 20 63 6f 6d 70 75 74 69 6e 67 0a 20 cted computing.
58a0: 20 20 20 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 73 environments
58b0: 2e 20 49 74 20 69 73 20 61 20 63 6f 6e 73 63 69 . It is a consci
58c0: 6f 75 73 20 64 65 63 69 73 69 6f 6e 20 69 6e 20 ous decision in
58d0: 64 69 72 65 63 74 20 73 75 70 70 6f 72 74 20 6f direct support o
58e0: 66 0a 20 20 20 20 20 53 51 4c 69 74 65 27 73 20 f. SQLite's
58f0: 63 61 74 68 65 64 72 61 6c 20 64 65 76 65 6c 6f cathedral develo
5900: 70 6d 65 6e 74 20 6d 6f 64 65 6c 3a 20 77 65 20 pment model: we
5910: 64 6f 6e 27 74 20 77 61 6e 74 20 64 65 76 65 6c don't want devel
5920: 6f 70 65 72 73 20 67 6f 69 6e 67 0a 20 20 20 20 opers going.
5930: 20 64 61 72 6b 2c 20 74 68 65 6e 20 73 68 6f 77 dark, then show
5940: 69 6e 67 20 75 70 20 77 65 65 6b 73 20 6c 61 74 ing up weeks lat
5950: 65 72 20 77 69 74 68 20 61 20 6d 61 73 73 69 76 er with a massiv
5960: 65 20 62 6f 6c 75 73 20 6f 66 20 63 68 61 6e 67 e bolus of chang
5970: 65 73 0a 20 20 20 20 20 66 6f 72 20 75 73 20 74 es. for us t
5980: 6f 20 69 6e 74 65 67 72 61 74 65 20 61 6c 6c 20 o integrate all
5990: 61 74 20 6f 6e 63 65 2e 0a 20 20 20 20 20 5b 68 at once.. [h
59a0: 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 ttps://en.wikipe
59b0: 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 69 6d dia.org/wiki/Jim
59c0: 5f 4d 63 43 61 72 74 68 79 5f 28 61 75 74 68 6f _McCarthy_(autho
59d0: 72 29 7c 4a 69 6d 20 4d 63 43 61 72 74 68 79 5d r)|Jim McCarthy]
59e0: 0a 20 20 20 20 20 70 75 74 20 69 74 20 77 65 6c . put it wel
59f0: 6c 20 69 6e 20 68 69 73 20 62 6f 6f 6b 20 6f 6e l in his book on
5a00: 20 73 6f 66 74 77 61 72 65 20 70 72 6f 6a 65 63 software projec
5a10: 74 20 6d 61 6e 61 67 65 6d 65 6e 74 2c 0a 20 20 t management,.
5a20: 20 20 20 3c 69 3e 5b 68 74 74 70 73 3a 2f 2f 77 <i>[https://w
5a30: 77 77 2e 61 6d 61 7a 6f 6e 2e 63 6f 6d 2f 64 70 ww.amazon.com/dp
5a40: 2f 30 37 33 35 36 32 33 31 39 38 2f 7c 44 79 6e /0735623198/|Dyn
5a50: 61 6d 69 63 73 20 6f 66 20 53 6f 66 74 77 61 72 amics of Softwar
5a60: 65 0a 20 20 20 20 20 44 65 76 65 6c 6f 70 6d 65 e. Developme
5a70: 6e 74 5d 3c 2f 69 3e 3a 20 22 5b 68 74 74 70 73 nt]</i>: "[https
5a80: 3a 2f 2f 77 77 77 2e 79 6f 75 74 75 62 65 2e 63 ://www.youtube.c
5a90: 6f 6d 2f 77 61 74 63 68 3f 76 3d 6f 59 36 42 43 om/watch?v=oY6BC
5aa0: 48 71 45 62 79 63 7c 42 65 77 61 72 65 0a 20 20 HqEbyc|Beware.
5ab0: 20 20 20 6f 66 20 61 20 67 75 79 20 69 6e 20 61 of a guy in a
5ac0: 20 72 6f 6f 6d 5d 2e 22 0a 20 0a 20 20 2a 20 20 room].". . *
5ad0: 3c 62 3e 42 72 61 6e 63 68 20 6e 61 6d 65 73 20 <b>Branch names
5ae0: 73 79 6e 63 3a 3c 2f 62 3e 20 55 6e 6c 69 6b 65 sync:</b> Unlike
5af0: 20 69 6e 20 47 69 74 2c 20 62 72 61 6e 63 68 20 in Git, branch
5b00: 6e 61 6d 65 73 20 69 6e 0a 20 20 20 20 20 46 6f names in. Fo
5b10: 73 73 69 6c 20 61 72 65 20 6e 6f 74 20 70 75 72 ssil are not pur
5b20: 65 6c 79 20 6c 6f 63 61 6c 20 6c 61 62 65 6c 73 ely local labels
5b30: 2e 20 54 68 65 79 20 73 79 6e 63 20 61 6c 6f 6e . They sync alon
5b40: 67 20 77 69 74 68 20 65 76 65 72 79 74 68 69 6e g with everythin
5b50: 67 0a 20 20 20 20 20 65 6c 73 65 2c 20 73 6f 20 g. else, so
5b60: 65 76 65 72 79 6f 6e 65 20 73 65 65 73 20 74 68 everyone sees th
5b70: 65 20 73 61 6d 65 20 73 65 74 20 6f 66 20 62 72 e same set of br
5b80: 61 6e 63 68 20 6e 61 6d 65 73 2e 20 46 6f 73 73 anch names. Foss
5b90: 69 6c 27 73 20 64 65 73 69 67 6e 0a 20 20 20 20 il's design.
5ba0: 20 63 68 6f 69 63 65 20 68 65 72 65 20 69 73 20 choice here is
5bb0: 61 20 64 69 72 65 63 74 20 72 65 66 6c 65 63 74 a direct reflect
5bc0: 69 6f 6e 20 6f 66 20 74 68 65 20 4c 69 6e 75 78 ion of the Linux
5bd0: 20 76 73 2e 20 53 51 4c 69 74 65 20 70 72 6f 6a vs. SQLite proj
5be0: 65 63 74 0a 20 20 20 20 20 6f 75 74 6c 6f 6f 6b ect. outlook
5bf0: 3a 20 53 51 4c 69 74 65 27 73 20 64 65 76 65 6c : SQLite's devel
5c00: 6f 70 65 72 73 20 63 6f 6c 6c 61 62 6f 72 61 74 opers collaborat
5c10: 65 20 63 6c 6f 73 65 6c 79 20 6f 6e 20 61 20 73 e closely on a s
5c20: 69 6e 67 6c 65 0a 20 20 20 20 20 63 6f 68 65 72 ingle. coher
5c30: 65 6e 74 20 70 72 6f 6a 65 63 74 2c 20 77 68 65 ent project, whe
5c40: 72 65 61 73 20 4c 69 6e 75 78 27 73 20 64 65 76 reas Linux's dev
5c50: 65 6c 6f 70 65 72 73 20 67 6f 20 6f 66 66 20 6f elopers go off o
5c60: 6e 20 74 61 6e 67 65 6e 74 73 20 61 6e 64 0a 20 n tangents and.
5c70: 20 20 20 20 6f 63 63 61 73 69 6f 6e 61 6c 6c 79 occasionally
5c80: 20 73 65 6e 64 20 73 65 6c 65 63 74 65 64 20 63 send selected c
5c90: 68 61 6e 67 65 20 73 65 74 73 20 74 6f 20 65 61 hange sets to ea
5ca0: 63 68 20 6f 74 68 65 72 2e 0a 20 0a 20 20 2a 20 ch other.. . *
5cb0: 20 3c 62 3e 50 72 69 76 61 74 65 20 62 72 61 6e <b>Private bran
5cc0: 63 68 65 73 20 61 72 65 20 72 61 72 65 3a 3c 2f ches are rare:</
5cd0: 62 3e 0a 20 20 20 20 20 5b 2f 64 6f 63 2f 74 72 b>. [/doc/tr
5ce0: 75 6e 6b 2f 77 77 77 2f 70 72 69 76 61 74 65 2e unk/www/private.
5cf0: 77 69 6b 69 7c 50 72 69 76 61 74 65 20 62 72 61 wiki|Private bra
5d00: 6e 63 68 65 73 20 65 78 69 73 74 20 69 6e 20 46 nches exist in F
5d10: 6f 73 73 69 6c 5d 2c 20 62 75 74 0a 20 20 20 20 ossil], but.
5d20: 20 74 68 65 79 27 72 65 20 6e 6f 72 6d 61 6c 6c they're normall
5d30: 79 20 75 73 65 64 20 74 6f 20 68 61 6e 64 6c 65 y used to handle
5d40: 20 72 61 72 65 20 65 78 63 65 70 74 69 6f 6e 20 rare exception
5d50: 63 61 73 65 73 2c 20 77 68 65 72 65 61 73 20 69 cases, whereas i
5d60: 6e 0a 20 20 20 20 20 6d 61 6e 79 20 47 69 74 20 n. many Git
5d70: 70 72 6f 6a 65 63 74 73 2c 20 74 68 65 79 27 72 projects, they'r
5d80: 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 e part of the st
5d90: 72 61 69 67 68 74 2d 6c 69 6e 65 20 64 65 76 65 raight-line deve
5da0: 6c 6f 70 6d 65 6e 74 0a 20 20 20 20 20 70 72 6f lopment. pro
5db0: 63 65 73 73 2e 0a 20 0a 20 20 2a 20 20 3c 62 3e cess.. . * <b>
5dc0: 49 64 65 6e 74 69 63 61 6c 20 63 6c 6f 6e 65 73 Identical clones
5dd0: 3a 3c 2f 62 3e 20 46 6f 73 73 69 6c 27 73 20 61 :</b> Fossil's a
5de0: 75 74 6f 73 79 6e 63 20 73 79 73 74 65 6d 20 74 utosync system t
5df0: 72 69 65 73 20 74 6f 0a 20 20 20 20 20 6b 65 65 ries to. kee
5e00: 70 20 65 61 63 68 20 6c 6f 63 61 6c 20 63 6c 6f p each local clo
5e10: 6e 65 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 ne identical to
5e20: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 20 69 the repository i
5e30: 74 20 63 6c 6f 6e 65 64 0a 20 20 20 20 20 66 72 t cloned. fr
5e40: 6f 6d 2e 0a 0a 57 68 65 72 65 20 47 69 74 20 65 om...Where Git e
5e50: 6e 63 6f 75 72 61 67 65 73 20 73 69 6c 6f 65 64 ncourages siloed
5e60: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 46 6f development, Fo
5e70: 73 73 69 6c 20 66 69 67 68 74 73 20 61 67 61 69 ssil fights agai
5e80: 6e 73 74 20 69 74 2e 0a 46 6f 73 73 69 6c 20 70 nst it..Fossil p
5e90: 6c 61 63 65 73 20 61 20 6c 6f 74 20 6f 66 20 65 laces a lot of e
5ea0: 6d 70 68 61 73 69 73 20 6f 6e 20 73 79 6e 63 68 mphasis on synch
5eb0: 72 6f 6e 69 7a 69 6e 67 20 65 76 65 72 79 6f 6e ronizing everyon
5ec0: 65 27 73 20 77 6f 72 6b 20 61 6e 64 20 6f 6e 0a e's work and on.
5ed0: 72 65 70 6f 72 74 69 6e 67 20 6f 6e 20 74 68 65 reporting on the
5ee0: 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 70 72 state of the pr
5ef0: 6f 6a 65 63 74 20 61 6e 64 20 74 68 65 20 77 6f oject and the wo
5f00: 72 6b 20 6f 66 20 69 74 73 20 64 65 76 65 6c 6f rk of its develo
5f10: 70 65 72 73 2c 20 73 6f 0a 74 68 61 74 20 65 76 pers, so.that ev
5f20: 65 72 79 6f 6e 65 20 e2 80 94 20 65 73 70 65 63 eryone — espec
5f30: 69 61 6c 6c 79 20 74 68 65 20 70 72 6f 6a 65 63 ially the projec
5f40: 74 20 6c 65 61 64 65 72 20 e2 80 94 20 63 61 6e t leader — can
5f50: 20 6d 61 69 6e 74 61 69 6e 20 61 20 62 65 74 74 maintain a bett
5f60: 65 72 0a 6d 65 6e 74 61 6c 20 70 69 63 74 75 72 er.mental pictur
5f70: 65 20 6f 66 20 77 68 61 74 20 69 73 20 68 61 70 e of what is hap
5f80: 70 65 6e 69 6e 67 2c 20 6c 65 61 64 69 6e 67 20 pening, leading
5f90: 74 6f 20 62 65 74 74 65 72 20 73 69 74 75 61 74 to better situat
5fa0: 69 6f 6e 61 6c 0a 61 77 61 72 65 6e 65 73 73 2e ional.awareness.
5fb0: 0a 0a 42 79 20 63 6f 6e 74 72 61 73 74 2c 20 22 ..By contrast, "
5fc0: e2 80 a6 5b 68 74 74 70 73 3a 2f 2f 64 6f 63 73 …[https://docs
5fd0: 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 65 6e 2f 67 .github.com/en/g
5fe0: 65 74 2d 73 74 61 72 74 65 64 2f 71 75 69 63 6b et-started/quick
5ff0: 73 74 61 72 74 2f 63 6f 6e 74 72 69 62 75 74 69 start/contributi
6000: 6e 67 2d 74 6f 2d 70 72 6f 6a 65 63 74 73 7c 66 ng-to-projects|f
6010: 6f 72 6b 69 6e 67 20 69 73 0a 61 74 20 74 68 65 orking is.at the
6020: 20 63 6f 72 65 20 6f 66 20 73 6f 63 69 61 6c 20 core of social
6030: 63 6f 64 69 6e 67 20 61 74 20 47 69 74 48 75 62 coding at GitHub
6040: 5d 22 2e 20 20 41 73 20 6f 66 20 4a 61 6e 75 61 ]". As of Janua
6050: 72 79 20 32 30 32 32 2c 0a 5b 68 74 74 70 73 3a ry 2022,.[https:
6060: 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 73 65 61 //github.com/sea
6070: 72 63 68 3f 71 3d 69 73 3a 70 75 62 6c 69 63 7c rch?q=is:public|
6080: 47 69 74 68 75 62 20 68 6f 73 74 73 20 34 37 20 Github hosts 47
6090: 6d 69 6c 6c 69 6f 6e 20 64 69 73 74 69 6e 63 74 million distinct
60a0: 0a 73 6f 66 74 77 61 72 65 20 70 72 6f 6a 65 63 .software projec
60b0: 74 73 5d 2c 20 6d 6f 73 74 20 6f 66 20 77 68 69 ts], most of whi
60c0: 63 68 20 77 65 72 65 20 63 72 65 61 74 65 64 20 ch were created
60d0: 62 79 20 66 6f 72 6b 69 6e 67 20 61 0a 70 72 65 by forking a.pre
60e0: 76 69 6f 75 73 6c 79 2d 65 78 69 73 74 69 6e 67 viously-existing
60f0: 20 70 72 6f 6a 65 63 74 2e 20 53 69 6e 63 65 20 project. Since
6100: 74 68 69 73 20 69 73 0a 5b 68 74 74 70 73 3a 2f this is.[https:/
6110: 2f 65 76 61 6e 73 64 61 74 61 2e 63 6f 6d 2f 72 /evansdata.com/r
6120: 65 70 6f 72 74 73 2f 76 69 65 77 52 65 6c 65 61 eports/viewRelea
6130: 73 65 2e 70 68 70 3f 72 65 70 6f 72 74 49 44 3d se.php?reportID=
6140: 39 20 7c 20 72 6f 75 67 68 6c 79 0a 74 77 69 63 9 | roughly.twic
6150: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 e the number of
6160: 64 65 76 65 6c 6f 70 65 72 73 20 69 6e 20 74 68 developers in th
6170: 65 20 77 6f 72 6c 64 5d 2c 20 69 74 20 62 65 67 e world], it beg
6180: 67 61 72 73 20 62 65 6c 69 65 66 20 74 68 61 74 gars belief that
6190: 0a 6d 6f 73 74 20 6f 66 20 74 68 65 73 65 20 66 .most of these f
61a0: 6f 72 6b 73 20 61 72 65 20 73 74 69 6c 6c 20 75 orks are still u
61b0: 6e 64 65 72 20 61 63 74 69 76 65 20 64 65 76 65 nder active deve
61c0: 6c 6f 70 6d 65 6e 74 2e 20 20 54 68 65 20 76 61 lopment. The va
61d0: 73 74 20 62 75 6c 6b 0a 6f 66 20 74 68 65 73 65 st bulk.of these
61e0: 20 6d 75 73 74 20 62 65 20 61 62 61 6e 64 6f 6e must be abandon
61f0: 65 64 20 6f 6e 65 2d 6f 66 66 20 65 66 66 6f 72 ed one-off effor
6200: 74 73 2e 20 54 68 69 73 20 69 73 20 70 61 72 74 ts. This is part
6210: 20 6f 66 20 74 68 65 20 6e 61 74 75 72 65 0a 6f of the nature.o
6220: 66 20 62 61 7a 61 61 72 20 73 74 79 6c 65 20 64 f bazaar style d
6230: 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a 0a 59 6f 75 evelopment...You
6240: 20 63 61 6e 20 74 68 69 6e 6b 20 61 62 6f 75 74 can think about
6250: 20 74 68 69 73 20 64 69 66 66 65 72 65 6e 63 65 this difference
6260: 20 69 6e 20 74 65 72 6d 73 20 6f 66 0a 5b 68 74 in terms of.[ht
6270: 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 tps://en.wikiped
6280: 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 46 65 65 64 ia.org/wiki/Feed
6290: 62 61 63 6b 20 7c 20 66 65 65 64 62 61 63 6b 20 back | feedback
62a0: 6c 6f 6f 70 20 73 69 7a 65 5d 2c 20 77 68 69 63 loop size], whic
62b0: 68 20 77 65 0a 6b 6e 6f 77 20 66 72 6f 6d 20 74 h we.know from t
62c0: 68 65 20 6d 61 74 68 65 6d 61 74 69 63 73 20 6f he mathematics o
62d0: 66 0a 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 f.[https://en.wi
62e0: 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 kipedia.org/wiki
62f0: 2f 43 6f 6e 74 72 6f 6c 5f 74 68 65 6f 72 79 20 /Control_theory
6300: 7c 20 63 6f 6e 74 72 6f 6c 20 74 68 65 6f 72 79 | control theory
6310: 5d 20 74 6f 0a 64 69 72 65 63 74 6c 79 20 61 66 ] to.directly af
6320: 66 65 63 74 20 74 68 65 20 73 70 65 65 64 20 61 fect the speed a
6330: 74 20 77 68 69 63 68 20 61 6e 79 20 73 79 73 74 t which any syst
6340: 65 6d 20 63 61 6e 20 73 61 66 65 6c 79 20 6d 61 em can safely ma
6350: 6b 65 20 63 68 61 6e 67 65 73 2e 0a 54 68 65 20 ke changes..The
6360: 6c 61 72 67 65 72 20 74 68 65 20 66 65 65 64 62 larger the feedb
6370: 61 63 6b 20 6c 6f 6f 70 2c 20 74 68 65 20 73 6c ack loop, the sl
6380: 6f 77 65 72 20 74 68 65 20 77 68 6f 6c 65 20 73 ower the whole s
6390: 79 73 74 65 6d 20 6d 75 73 74 20 72 75 6e 20 69 ystem must run i
63a0: 6e 0a 6f 72 64 65 72 20 74 6f 20 61 76 6f 69 64 n.order to avoid
63b0: 20 6c 6f 73 73 20 6f 66 20 63 6f 6e 74 72 6f 6c loss of control
63c0: 2e 20 54 68 65 20 73 61 6d 65 20 63 6f 6e 63 65 . The same conce
63d0: 70 74 20 73 68 6f 77 73 20 75 70 20 69 6e 20 6f pt shows up in o
63e0: 74 68 65 72 0a 63 6f 6e 74 65 78 74 73 2c 20 73 ther.contexts, s
63f0: 75 63 68 20 61 73 20 69 6e 20 74 68 65 20 5b 68 uch as in the [h
6400: 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 ttps://en.wikipe
6410: 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4f 4f 44 dia.org/wiki/OOD
6420: 41 5f 6c 6f 6f 70 20 7c 20 4f 4f 44 41 0a 6c 6f A_loop | OODA.lo
6430: 6f 70 5d 20 63 6f 6e 63 65 70 74 2e 0a 43 6f 6d op] concept..Com
6440: 6d 69 74 74 69 6e 67 20 79 6f 75 72 20 63 68 61 mitting your cha
6450: 6e 67 65 73 20 74 6f 20 70 72 69 76 61 74 65 20 nges to private
6460: 62 72 61 6e 63 68 65 73 20 69 6e 20 6f 72 64 65 branches in orde
6470: 72 20 74 6f 20 64 65 6c 61 79 20 61 20 70 75 62 r to delay a pub
6480: 6c 69 63 0a 70 75 73 68 20 74 6f 20 74 68 65 20 lic.push to the
6490: 70 61 72 65 6e 74 20 72 65 70 6f 20 69 6e 63 72 parent repo incr
64a0: 65 61 73 65 73 20 74 68 65 20 73 69 7a 65 20 6f eases the size o
64b0: 66 20 79 6f 75 72 20 63 6f 6c 6c 61 62 6f 72 61 f your collabora
64c0: 74 6f 72 73 27 0a 63 6f 6e 74 72 6f 6c 20 6c 6f tors'.control lo
64d0: 6f 70 73 2c 20 65 69 74 68 65 72 20 63 61 75 73 ops, either caus
64e0: 69 6e 67 20 74 68 65 6d 20 74 6f 20 73 6c 6f 77 ing them to slow
64f0: 20 74 68 65 69 72 20 77 6f 72 6b 20 69 6e 20 6f their work in o
6500: 72 64 65 72 20 74 6f 20 73 61 66 65 6c 79 0a 72 rder to safely.r
6510: 65 61 63 74 20 74 6f 20 79 6f 75 72 20 77 6f 72 eact to your wor
6520: 6b 2c 20 6f 72 20 74 6f 20 6f 76 65 72 2d 63 6f k, or to over-co
6530: 72 72 65 63 74 20 69 6e 20 72 65 73 70 6f 6e 73 rrect in respons
6540: 65 20 74 6f 20 65 61 63 68 20 63 68 61 6e 67 65 e to each change
6550: 2e 0a 0a 45 61 63 68 20 44 56 43 53 20 63 61 6e ...Each DVCS can
6560: 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 be used in the
6570: 6f 70 70 6f 73 69 74 65 20 73 74 79 6c 65 2c 20 opposite style,
6580: 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 77 6f 72 but doing so wor
6590: 6b 73 20 61 67 61 69 6e 73 74 0a 74 68 65 69 72 ks against.their
65a0: 20 6c 6f 77 2d 66 72 69 63 74 69 6f 6e 20 70 61 low-friction pa
65b0: 74 68 73 2e 0a 0a 0a 3c 68 34 20 69 64 3d 22 73 ths....<h4 id="s
65c0: 63 61 6c 65 22 3e 32 2e 35 2e 32 20 53 63 61 6c cale">2.5.2 Scal
65d0: 65 3c 2f 68 34 3e 0a 0a 54 68 65 20 4c 69 6e 75 e</h4>..The Linu
65e0: 78 20 6b 65 72 6e 65 6c 20 68 61 73 20 61 20 66 x kernel has a f
65f0: 61 72 20 62 69 67 67 65 72 20 64 65 76 65 6c 6f ar bigger develo
6600: 70 65 72 20 63 6f 6d 6d 75 6e 69 74 79 20 74 68 per community th
6610: 61 6e 20 74 68 61 74 20 6f 66 0a 53 51 4c 69 74 an that of.SQLit
6620: 65 3a 20 74 68 65 72 65 20 61 72 65 20 74 68 6f e: there are tho
6630: 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f 75 73 usands and thous
6640: 61 6e 64 73 20 6f 66 20 63 6f 6e 74 72 69 62 75 ands of contribu
6650: 74 6f 72 73 20 74 6f 20 4c 69 6e 75 78 2c 20 6d tors to Linux, m
6660: 6f 73 74 0a 6f 66 20 77 68 6f 6d 20 64 6f 20 6e ost.of whom do n
6670: 6f 74 20 6b 6e 6f 77 20 65 61 63 68 20 6f 74 68 ot know each oth
6680: 65 72 27 73 20 6e 61 6d 65 73 2e 20 54 68 65 73 er's names. Thes
6690: 65 20 74 68 6f 75 73 61 6e 64 73 20 61 72 65 20 e thousands are
66a0: 72 65 73 70 6f 6e 73 69 62 6c 65 0a 66 6f 72 20 responsible.for
66b0: 70 72 6f 64 75 63 69 6e 67 20 72 6f 75 67 68 6c producing roughl
66c0: 79 20 38 39 c3 97 20 6d 6f 72 65 20 63 6f 64 65 y 89× more code
66d0: 20 74 68 61 6e 20 69 73 20 69 6e 20 53 51 4c 69 than is in SQLi
66e0: 74 65 2e 20 28 31 30 2e 37 0a 5b 68 74 74 70 73 te. (10.7.[https
66f0: 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e ://en.wikipedia.
6700: 6f 72 67 2f 77 69 6b 69 2f 53 6f 75 72 63 65 5f org/wiki/Source_
6710: 6c 69 6e 65 73 5f 6f 66 5f 63 6f 64 65 7c 4d 4c lines_of_code|ML
6720: 4f 43 5d 20 76 73 2e 20 30 2e 31 32 20 4d 4c 4f OC] vs. 0.12 MLO
6730: 43 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 5b C.according to [
6740: 68 74 74 70 73 3a 2f 2f 64 77 68 65 65 6c 65 72 https://dwheeler
6750: 2e 63 6f 6d 2f 73 6c 6f 63 63 6f 75 6e 74 2f 7c .com/sloccount/|
6760: 53 4c 4f 43 43 6f 75 6e 74 5d 2e 29 20 54 68 65 SLOCCount].) The
6770: 20 4c 69 6e 75 78 0a 6b 65 72 6e 65 6c 20 61 6e Linux.kernel an
6780: 64 20 69 74 73 20 64 65 76 65 6c 6f 70 6d 65 6e d its developmen
6790: 74 20 70 72 6f 63 65 73 73 20 77 65 72 65 20 61 t process were a
67a0: 6c 72 65 61 64 79 20 75 6e 63 6f 6d 6d 6f 6e 6c lready uncommonl
67b0: 79 20 6c 61 72 67 65 20 62 61 63 6b 20 69 6e 0a y large back in.
67c0: 32 30 30 35 20 77 68 65 6e 20 47 69 74 20 77 61 2005 when Git wa
67d0: 73 20 64 65 73 69 67 6e 65 64 2c 20 73 70 65 63 s designed, spec
67e0: 69 66 69 63 61 6c 6c 79 20 74 6f 20 73 75 70 70 ifically to supp
67f0: 6f 72 74 20 74 68 65 20 63 6f 6e 73 65 71 75 65 ort the conseque
6800: 6e 63 65 73 20 6f 66 0a 68 61 76 69 6e 67 20 73 nces of.having s
6810: 75 63 68 20 61 20 6c 61 72 67 65 20 73 65 74 20 uch a large set
6820: 6f 66 20 64 65 76 65 6c 6f 70 65 72 73 20 77 6f of developers wo
6830: 72 6b 69 6e 67 20 6f 6e 20 73 75 63 68 20 61 20 rking on such a
6840: 6c 61 72 67 65 20 63 6f 64 65 20 62 61 73 65 2e large code base.
6850: 0a 0a 39 35 25 20 6f 66 20 74 68 65 20 63 6f 64 ..95% of the cod
6860: 65 20 69 6e 20 53 51 4c 69 74 65 20 63 6f 6d 65 e in SQLite come
6870: 73 20 66 72 6f 6d 20 6a 75 73 74 20 66 6f 75 72 s from just four
6880: 20 70 72 6f 67 72 61 6d 6d 65 72 73 2c 20 61 6e programmers, an
6890: 64 20 36 34 25 20 6f 66 0a 69 74 20 69 73 20 66 d 64% of.it is f
68a0: 72 6f 6d 20 74 68 65 20 6c 65 61 64 20 64 65 76 rom the lead dev
68b0: 65 6c 6f 70 65 72 20 61 6c 6f 6e 65 2e 20 54 68 eloper alone. Th
68c0: 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f 70 e SQLite develop
68d0: 65 72 73 20 6b 6e 6f 77 20 65 61 63 68 0a 6f 74 ers know each.ot
68e0: 68 65 72 20 77 65 6c 6c 20 61 6e 64 20 69 6e 74 her well and int
68f0: 65 72 61 63 74 20 64 61 69 6c 79 2e 20 46 6f 73 eract daily. Fos
6900: 73 69 6c 20 77 61 73 20 64 65 73 69 67 6e 65 64 sil was designed
6910: 20 66 6f 72 20 74 68 69 73 20 64 65 76 65 6c 6f for this develo
6920: 70 6d 65 6e 74 0a 6d 6f 64 65 6c 2e 0a 0a 57 68 pment.model...Wh
6930: 65 6e 20 63 68 6f 6f 73 69 6e 67 20 79 6f 75 72 en choosing your
6940: 20 44 56 43 53 2c 20 77 65 20 74 68 69 6e 6b 20 DVCS, we think
6950: 79 6f 75 20 73 68 6f 75 6c 64 20 61 73 6b 20 79 you should ask y
6960: 6f 75 72 73 65 6c 66 20 77 68 65 74 68 65 72 20 ourself whether
6970: 74 68 65 0a 73 63 61 6c 65 20 6f 66 20 79 6f 75 the.scale of you
6980: 72 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 66 69 r software confi
6990: 67 75 72 61 74 69 6f 6e 20 6d 61 6e 61 67 65 6d guration managem
69a0: 65 6e 74 20 70 72 6f 62 6c 65 6d 73 20 69 73 20 ent problems is
69b0: 63 6c 6f 73 65 72 20 74 6f 0a 74 68 6f 73 65 20 closer to.those
69c0: 4c 69 6e 75 73 20 54 6f 72 76 61 6c 64 73 20 64 Linus Torvalds d
69d0: 65 73 69 67 6e 65 64 20 47 69 74 20 74 6f 20 63 esigned Git to c
69e0: 6f 70 65 20 77 69 74 68 20 6f 72 20 77 68 65 74 ope with or whet
69f0: 68 65 72 20 79 6f 75 72 20 77 6f 72 6b 27 73 0a her your work's.
6a00: 73 63 61 6c 65 20 69 73 20 63 6c 6f 73 65 72 20 scale is closer
6a10: 74 6f 20 74 68 61 74 20 6f 66 20 53 51 4c 69 74 to that of SQLit
6a20: 65 2c 20 66 6f 72 20 77 68 69 63 68 20 44 2e 20 e, for which D.
6a30: 52 69 63 68 61 72 64 20 48 69 70 70 20 64 65 73 Richard Hipp des
6a40: 69 67 6e 65 64 0a 46 6f 73 73 69 6c 2e 20 41 6e igned.Fossil. An
6a50: 20 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b [https://en.wik
6a60: 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f ipedia.org/wiki/
6a70: 49 6d 70 61 63 74 5f 77 72 65 6e 63 68 7c 61 75 Impact_wrench|au
6a80: 74 6f 6d 6f 74 69 76 65 20 61 69 72 0a 69 6d 70 tomotive air.imp
6a90: 61 63 74 20 77 72 65 6e 63 68 5d 20 72 75 6e 6e act wrench] runn
6aa0: 69 6e 67 20 61 74 20 38 30 30 30 20 52 50 4d 20 ing at 8000 RPM
6ab0: 64 72 69 76 69 6e 67 20 61 6e 20 4d 38 20 73 6f driving an M8 so
6ac0: 63 6b 65 74 2d 63 61 70 20 62 6f 6c 74 20 61 74 cket-cap bolt at
6ad0: 20 31 36 0a 63 6d 2f 73 20 69 73 20 6e 6f 74 20 16.cm/s is not
6ae0: 74 68 65 20 62 65 73 74 20 77 61 79 20 74 6f 20 the best way to
6af0: 68 61 6e 67 20 61 20 70 69 63 74 75 72 65 20 6f hang a picture o
6b00: 6e 20 74 68 65 20 6c 69 76 69 6e 67 20 72 6f 6f n the living roo
6b10: 6d 20 77 61 6c 6c 2e 0a 0a 46 6f 73 73 69 6c 20 m wall...Fossil
6b20: 77 6f 72 6b 73 20 77 65 6c 6c 20 66 6f 72 20 70 works well for p
6b30: 72 6f 6a 65 63 74 73 20 73 65 76 65 72 61 6c 20 rojects several
6b40: 74 69 6d 65 73 20 74 68 65 20 73 69 7a 65 20 6f times the size o
6b50: 66 20 53 51 4c 69 74 65 2c 0a 5b 68 74 74 70 73 f SQLite,.[https
6b60: 3a 2f 2f 63 6f 72 65 2e 74 63 6c 2d 6c 61 6e 67 ://core.tcl-lang
6b70: 2e 6f 72 67 2f 74 63 6c 2f 20 7c 20 73 75 63 68 .org/tcl/ | such
6b80: 20 61 73 20 54 63 6c 5d 2c 20 77 69 74 68 20 61 as Tcl], with a
6b90: 20 72 65 70 6f 73 69 74 6f 72 79 20 6f 76 65 72 repository over
6ba0: 0a 74 77 69 63 65 20 74 68 65 20 73 69 7a 65 20 .twice the size
6bb0: 61 6e 64 20 77 69 74 68 20 6d 61 6e 79 20 6d 6f and with many mo
6bc0: 72 65 20 63 6f 72 65 20 63 6f 6d 6d 69 74 74 65 re core committe
6bd0: 72 73 2e 0a 0a 0a 3c 68 34 20 69 64 3d 22 62 72 rs....<h4 id="br
6be0: 61 6e 63 68 65 73 22 3e 32 2e 35 2e 33 20 49 6e anches">2.5.3 In
6bf0: 64 69 76 69 64 75 61 6c 20 42 72 61 6e 63 68 65 dividual Branche
6c00: 73 20 76 73 2e 20 54 68 65 20 45 6e 74 69 72 65 s vs. The Entire
6c10: 20 43 68 61 6e 67 65 20 48 69 73 74 6f 72 79 3c Change History<
6c20: 2f 68 34 3e 0a 0a 42 6f 74 68 20 46 6f 73 73 69 /h4>..Both Fossi
6c30: 6c 20 61 6e 64 20 47 69 74 20 73 74 6f 72 65 20 l and Git store
6c40: 68 69 73 74 6f 72 79 20 61 73 20 61 20 64 69 72 history as a dir
6c50: 65 63 74 65 64 20 61 63 79 63 6c 69 63 20 67 72 ected acyclic gr
6c60: 61 70 68 20 28 44 41 47 29 0a 6f 66 20 63 68 61 aph (DAG).of cha
6c70: 6e 67 65 73 2c 20 62 75 74 20 47 69 74 20 74 65 nges, but Git te
6c80: 6e 64 73 20 74 6f 20 66 6f 63 75 73 20 6d 6f 72 nds to focus mor
6c90: 65 20 6f 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 e on individual
6ca0: 62 72 61 6e 63 68 65 73 20 6f 66 0a 74 68 65 20 branches of.the
6cb0: 44 41 47 2c 20 77 68 65 72 65 61 73 20 46 6f 73 DAG, whereas Fos
6cc0: 73 69 6c 20 70 75 74 73 20 6d 6f 72 65 20 65 6d sil puts more em
6cd0: 70 68 61 73 69 73 20 6f 6e 20 74 68 65 20 65 6e phasis on the en
6ce0: 74 69 72 65 20 44 41 47 2e 0a 0a 46 6f 72 20 65 tire DAG...For e
6cf0: 78 61 6d 70 6c 65 2c 20 74 68 65 20 64 65 66 61 xample, the defa
6d00: 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 6e 20 ult behavior in
6d10: 47 69 74 20 69 73 20 74 6f 20 6f 6e 6c 79 20 73 Git is to only s
6d20: 79 6e 63 68 72 6f 6e 69 7a 65 0a 61 20 73 69 6e ynchronize.a sin
6d30: 67 6c 65 20 62 72 61 6e 63 68 2c 20 77 68 65 72 gle branch, wher
6d40: 65 61 73 20 77 69 74 68 20 46 6f 73 73 69 6c 20 eas with Fossil
6d50: 74 68 65 20 6f 6e 6c 79 20 73 79 6e 63 20 6f 70 the only sync op
6d60: 74 69 6f 6e 20 69 73 20 74 6f 0a 73 79 6e 63 20 tion is to.sync
6d70: 74 68 65 20 65 6e 74 69 72 65 20 44 41 47 2e 20 the entire DAG.
6d80: 20 47 69 74 20 63 6f 6d 6d 61 6e 64 73 2c 0a 47 Git commands,.G
6d90: 69 74 48 75 62 2c 20 61 6e 64 20 47 69 74 4c 61 itHub, and GitLa
6da0: 62 20 74 65 6e 64 20 74 6f 20 73 68 6f 77 20 6f b tend to show o
6db0: 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 62 72 61 nly a single bra
6dc0: 6e 63 68 20 61 74 0a 61 20 74 69 6d 65 2c 20 77 nch at.a time, w
6dd0: 68 65 72 65 61 73 20 46 6f 73 73 69 6c 20 75 73 hereas Fossil us
6de0: 75 61 6c 6c 79 20 73 68 6f 77 73 20 61 6c 6c 20 ually shows all
6df0: 70 61 72 61 6c 6c 65 6c 20 62 72 61 6e 63 68 65 parallel branche
6e00: 73 20 61 74 0a 6f 6e 63 65 2e 20 20 47 69 74 20 s at.once. Git
6e10: 68 61 73 20 63 6f 6d 6d 61 6e 64 73 20 6c 69 6b has commands lik
6e20: 65 20 22 72 65 62 61 73 65 22 20 74 68 61 74 20 e "rebase" that
6e30: 68 65 6c 70 20 6b 65 65 70 20 61 6c 6c 20 72 65 help keep all re
6e40: 6c 65 76 61 6e 74 0a 63 68 61 6e 67 65 73 20 6f levant.changes o
6e50: 6e 20 61 20 73 69 6e 67 6c 65 20 62 72 61 6e 63 n a single branc
6e60: 68 2c 20 77 68 65 72 65 61 73 20 46 6f 73 73 69 h, whereas Fossi
6e70: 6c 20 65 6e 63 6f 75 72 61 67 65 73 20 61 20 73 l encourages a s
6e80: 74 79 6c 65 20 6f 66 0a 6d 61 6e 79 20 63 6f 6e tyle of.many con
6e90: 63 75 72 72 65 6e 74 20 62 72 61 6e 63 68 65 73 current branches
6ea0: 20 63 6f 6e 73 74 61 6e 74 6c 79 20 73 70 72 69 constantly spri
6eb0: 6e 67 69 6e 67 20 69 6e 74 6f 20 65 78 69 73 74 nging into exist
6ec0: 65 6e 63 65 2c 0a 75 6e 64 65 72 67 6f 69 6e 67 ence,.undergoing
6ed0: 20 61 63 74 69 76 65 20 64 65 76 65 6c 6f 70 6d active developm
6ee0: 65 6e 74 20 69 6e 20 70 61 72 61 6c 6c 65 6c 20 ent in parallel
6ef0: 66 6f 72 20 61 20 66 65 77 20 64 61 79 73 20 6f for a few days o
6f00: 72 20 77 65 65 6b 73 2c 20 74 68 65 6e 0a 6d 65 r weeks, then.me
6f10: 72 67 69 6e 67 20 62 61 63 6b 20 69 6e 74 6f 20 rging back into
6f20: 74 68 65 20 6d 61 69 6e 20 6c 69 6e 65 20 61 6e the main line an
6f30: 64 20 64 69 73 61 70 70 65 61 72 69 6e 67 2e 0a d disappearing..
6f40: 0a 54 68 69 73 20 64 69 66 66 65 72 65 6e 63 65 .This difference
6f50: 20 69 6e 20 65 6d 70 68 61 73 69 73 20 61 72 69 in emphasis ari
6f60: 73 65 73 20 66 72 6f 6d 20 74 68 65 20 64 69 66 ses from the dif
6f70: 66 65 72 65 6e 74 20 70 75 72 70 6f 73 65 73 20 ferent purposes
6f80: 6f 66 0a 74 68 65 20 74 77 6f 20 73 79 73 74 65 of.the two syste
6f90: 6d 73 2e 20 20 47 69 74 20 66 6f 63 75 73 65 73 ms. Git focuses
6fa0: 20 6f 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 62 on individual b
6fb0: 72 61 6e 63 68 65 73 2c 20 62 65 63 61 75 73 65 ranches, because
6fc0: 20 74 68 61 74 0a 69 73 20 65 78 61 63 74 6c 79 that.is exactly
6fd0: 20 77 68 61 74 20 79 6f 75 20 77 61 6e 74 20 66 what you want f
6fe0: 6f 72 20 61 20 68 69 67 68 6c 79 2d 64 69 73 74 or a highly-dist
6ff0: 72 69 62 75 74 65 64 20 62 61 7a 61 61 72 2d 73 ributed bazaar-s
7000: 74 79 6c 65 20 70 72 6f 6a 65 63 74 0a 73 75 63 tyle project.suc
7010: 68 20 61 73 20 4c 69 6e 75 78 2e 20 20 4c 69 6e h as Linux. Lin
7020: 75 73 20 54 6f 72 76 61 6c 64 73 20 64 6f 65 73 us Torvalds does
7030: 20 6e 6f 74 20 77 61 6e 74 20 74 6f 20 73 65 65 not want to see
7040: 20 65 76 65 72 79 20 63 68 65 63 6b 2d 69 6e 0a every check-in.
7050: 62 79 20 65 76 65 72 79 20 63 6f 6e 74 72 69 62 by every contrib
7060: 75 74 6f 72 20 74 6f 20 4c 69 6e 75 78 3a 20 73 utor to Linux: s
7070: 75 63 68 20 65 78 74 72 65 6d 65 20 76 69 73 69 uch extreme visi
7080: 62 69 6c 69 74 79 20 64 6f 65 73 20 6e 6f 74 20 bility does not
7090: 73 63 61 6c 65 0a 77 65 6c 6c 2e 20 20 43 6f 6e scale.well. Con
70a0: 74 72 61 73 74 20 46 6f 73 73 69 6c 2c 20 77 68 trast Fossil, wh
70b0: 69 63 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 ich was written
70c0: 66 6f 72 20 74 68 65 20 63 61 74 68 65 64 72 61 for the cathedra
70d0: 6c 2d 73 74 79 6c 65 20 53 51 4c 69 74 65 20 70 l-style SQLite p
70e0: 72 6f 6a 65 63 74 0a 61 6e 64 20 69 74 73 20 68 roject.and its h
70f0: 61 6e 64 66 75 6c 20 6f 66 20 61 63 74 69 76 65 andful of active
7100: 20 63 6f 6d 6d 69 74 74 65 72 73 2e 20 20 53 65 committers. Se
7110: 65 69 6e 67 20 61 6c 6c 0a 63 68 61 6e 67 65 73 eing all.changes
7120: 20 6f 6e 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 on all branches
7130: 20 61 6c 6c 20 61 74 20 6f 6e 63 65 20 68 65 6c all at once hel
7140: 70 73 20 6b 65 65 70 20 74 68 65 20 77 68 6f 6c ps keep the whol
7150: 65 20 74 65 61 6d 0a 75 70 2d 74 6f 2d 64 61 74 e team.up-to-dat
7160: 65 20 77 69 74 68 20 77 68 61 74 20 65 76 65 72 e with what ever
7170: 79 62 6f 64 79 20 65 6c 73 65 20 69 73 20 64 6f ybody else is do
7180: 69 6e 67 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 ing, resulting i
7190: 6e 20 61 20 6d 6f 72 65 20 0a 74 69 67 68 74 6c n a more .tightl
71a0: 79 20 66 6f 63 75 73 65 64 20 61 6e 64 20 63 6f y focused and co
71b0: 68 65 73 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 hesive implement
71c0: 61 74 69 6f 6e 2e 0a 0a 50 61 72 74 73 20 6f 66 ation...Parts of
71d0: 20 74 68 69 73 20 73 65 63 74 69 6f 6e 20 61 72 this section ar
71e0: 65 20 5b 68 74 74 70 73 3a 2f 2f 66 6f 73 73 69 e [https://fossi
71f0: 6c 2d 73 63 6d 2e 6f 72 67 2f 66 6f 72 75 6d 2f l-scm.org/forum/
7200: 66 6f 72 75 6d 70 6f 73 74 2f 35 39 36 31 65 39 forumpost/5961e9
7210: 36 39 66 61 7c 64 69 73 70 75 74 65 64 5d 0a 62 69fa|disputed].b
7220: 79 20 5b 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 y [https://githu
7230: 62 2e 63 6f 6d 2f 6f 6c 6f 72 69 6e 33 37 7c 4a b.com/olorin37|J
7240: 61 6b 75 62 20 41 2e 20 47 2e 5d 2e 0a 0a 0a 3c akub A. G.]....<
7250: 68 33 20 69 64 3d 22 63 68 65 63 6b 6f 75 74 73 h3 id="checkouts
7260: 22 3e 32 2e 36 20 4f 6e 65 20 76 73 2e 20 4d 61 ">2.6 One vs. Ma
7270: 6e 79 20 43 68 65 63 6b 2d 6f 75 74 73 20 70 65 ny Check-outs pe
7280: 72 20 52 65 70 6f 73 69 74 6f 72 79 3c 2f 68 33 r Repository</h3
7290: 3e 0a 0a 42 65 63 61 75 73 65 20 47 69 74 20 63 >..Because Git c
72a0: 6f 6d 6d 69 6e 67 6c 65 73 20 74 68 65 20 72 65 ommingles the re
72b0: 70 6f 73 69 74 6f 72 79 20 64 61 74 61 20 77 69 pository data wi
72c0: 74 68 20 74 68 65 20 69 6e 69 74 69 61 6c 20 63 th the initial c
72d0: 68 65 63 6b 6f 75 74 20 6f 66 0a 74 68 61 74 20 heckout of.that
72e0: 72 65 70 6f 73 69 74 6f 72 79 2c 20 74 68 65 20 repository, the
72f0: 64 65 66 61 75 6c 74 20 6d 6f 64 65 20 6f 66 20 default mode of
7300: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 47 69 74 operation in Git
7310: 20 69 73 20 74 6f 20 73 74 69 63 6b 20 74 6f 20 is to stick to
7320: 74 68 61 74 0a 73 69 6e 67 6c 65 20 77 6f 72 6b that.single work
7330: 2f 72 65 70 6f 20 74 72 65 65 2c 20 65 76 65 6e /repo tree, even
7340: 20 77 68 65 6e 20 74 68 61 74 27 73 20 61 20 73 when that's a s
7350: 68 6f 72 74 73 69 67 68 74 65 64 20 77 61 79 20 hortsighted way
7360: 6f 66 20 77 6f 72 6b 69 6e 67 2e 0a 0a 46 6f 73 of working...Fos
7370: 73 69 6c 20 64 6f 65 73 6e 27 74 20 77 6f 72 6b sil doesn't work
7380: 20 74 68 61 74 20 77 61 79 2e 20 41 20 46 6f 73 that way. A Fos
7390: 73 69 6c 20 72 65 70 6f 73 69 74 6f 72 79 20 69 sil repository i
73a0: 73 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61 s an SQLite data
73b0: 62 61 73 65 0a 66 69 6c 65 20 77 68 69 63 68 20 base.file which
73c0: 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 73 74 6f 72 is normally stor
73d0: 65 64 20 6f 75 74 73 69 64 65 20 74 68 65 20 77 ed outside the w
73e0: 6f 72 6b 69 6e 67 20 63 68 65 63 6b 6f 75 74 20 orking checkout
73f0: 64 69 72 65 63 74 6f 72 79 2e 20 59 6f 75 20 63 directory. You c
7400: 61 6e 0a 5b 2f 68 65 6c 70 3f 63 6d 64 3d 6f 70 an.[/help?cmd=op
7410: 65 6e 20 7c 20 6f 70 65 6e 5d 20 61 20 46 6f 73 en | open] a Fos
7420: 73 69 6c 20 72 65 70 6f 73 69 74 6f 72 79 20 61 sil repository a
7430: 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d ny number of tim
7440: 65 73 20 69 6e 74 6f 0a 61 6e 79 20 6e 75 6d 62 es into.any numb
7450: 65 72 20 6f 66 20 77 6f 72 6b 69 6e 67 20 64 69 er of working di
7460: 72 65 63 74 6f 72 69 65 73 2e 20 41 20 63 6f 6d rectories. A com
7470: 6d 6f 6e 20 75 73 61 67 65 20 70 61 74 74 65 72 mon usage patter
7480: 6e 20 69 73 20 74 6f 20 68 61 76 65 20 6f 6e 65 n is to have one
7490: 0a 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f .working directo
74a0: 72 79 20 70 65 72 20 61 63 74 69 76 65 20 77 6f ry per active wo
74b0: 72 6b 69 6e 67 20 62 72 61 6e 63 68 2c 20 73 6f rking branch, so
74c0: 20 74 68 61 74 20 73 77 69 74 63 68 69 6e 67 20 that switching
74d0: 62 72 61 6e 63 68 65 73 0a 69 73 20 64 6f 6e 65 branches.is done
74e0: 20 77 69 74 68 20 61 20 3c 74 74 3e 63 64 3c 2f with a <tt>cd</
74f0: 74 74 3e 20 63 6f 6d 6d 61 6e 64 20 72 61 74 68 tt> command rath
7500: 65 72 20 74 68 61 6e 20 62 79 20 63 68 65 63 6b er than by check
7510: 69 6e 67 20 6f 75 74 20 74 68 65 0a 62 72 61 6e ing out the.bran
7520: 63 68 65 73 20 73 75 63 63 65 73 73 69 76 65 6c ches successivel
7530: 79 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 77 6f y in a single wo
7540: 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2e rking directory.
7550: 0a 0a 46 6f 73 73 69 6c 20 64 6f 65 73 20 61 6c ..Fossil does al
7560: 6c 6f 77 20 79 6f 75 20 74 6f 20 73 77 69 74 63 low you to switc
7570: 68 20 62 72 61 6e 63 68 65 73 20 77 69 74 68 69 h branches withi
7580: 6e 20 61 20 77 6f 72 6b 69 6e 67 20 63 68 65 63 n a working chec
7590: 6b 6f 75 74 0a 64 69 72 65 63 74 6f 72 79 2c 20 kout.directory,
75a0: 61 6e 64 20 74 68 69 73 20 69 73 20 61 6c 73 6f and this is also
75b0: 20 6f 66 74 65 6e 20 64 6f 6e 65 2e 20 49 74 20 often done. It
75c0: 69 73 20 73 69 6d 70 6c 79 20 74 68 61 74 20 74 is simply that t
75d0: 68 65 72 65 20 69 73 20 6e 6f 0a 69 6e 68 65 72 here is no.inher
75e0: 65 6e 74 20 70 65 6e 61 6c 74 79 20 74 6f 20 65 ent penalty to e
75f0: 69 74 68 65 72 20 63 68 6f 69 63 65 20 69 6e 20 ither choice in
7600: 46 6f 73 73 69 6c 20 61 73 20 74 68 65 72 65 20 Fossil as there
7610: 69 73 20 69 6e 20 47 69 74 2e 20 54 68 65 0a 73 is in Git. The.s
7620: 74 61 6e 64 61 72 64 20 61 64 76 69 63 65 20 69 tandard advice i
7630: 73 20 74 6f 20 75 73 65 20 61 20 73 77 69 74 63 s to use a switc
7640: 68 2d 69 6e 2d 70 6c 61 63 65 20 77 6f 72 6b 66 h-in-place workf
7650: 6c 6f 77 20 69 6e 20 46 6f 73 73 69 6c 20 77 68 low in Fossil wh
7660: 65 6e 0a 74 68 65 20 64 69 73 74 75 72 62 61 6e en.the disturban
7670: 63 65 20 66 72 6f 6d 20 73 77 69 74 63 68 69 6e ce from switchin
7680: 67 20 62 72 61 6e 63 68 65 73 20 69 73 20 73 6d g branches is sm
7690: 61 6c 6c 2c 20 61 6e 64 20 74 6f 20 75 73 65 20 all, and to use
76a0: 6d 75 6c 74 69 70 6c 65 0a 63 68 65 63 6b 6f 75 multiple.checkou
76b0: 74 73 20 77 68 65 6e 20 79 6f 75 20 68 61 76 65 ts when you have
76c0: 20 6c 6f 6e 67 2d 6c 69 76 65 64 20 77 6f 72 6b long-lived work
76d0: 69 6e 67 20 62 72 61 6e 63 68 65 73 20 74 68 61 ing branches tha
76e0: 74 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 0a t are different.
76f0: 65 6e 6f 75 67 68 20 74 68 61 74 20 73 77 69 74 enough that swit
7700: 63 68 69 6e 67 20 69 6e 20 70 6c 61 63 65 20 69 ching in place i
7710: 73 20 64 69 73 72 75 70 74 69 76 65 2e 0a 0a 57 s disruptive...W
7720: 68 69 6c 65 20 79 6f 75 20 63 61 6e 20 5b 2e 2f hile you can [./
7730: 67 69 74 75 73 65 72 73 2e 6d 64 23 77 6f 72 6b gitusers.md#work
7740: 74 72 65 65 20 7c 20 75 73 65 20 47 69 74 20 69 tree | use Git i
7750: 6e 20 74 68 65 20 46 6f 73 73 69 6c 20 73 74 79 n the Fossil sty
7760: 6c 65 5d 2c 0a 47 69 74 27 73 20 64 65 66 61 75 le],.Git's defau
7770: 6c 74 20 74 69 65 20 62 65 74 77 65 65 6e 20 77 lt tie between w
7780: 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72 79 orking directory
7790: 20 61 6e 64 0a 72 65 70 6f 73 69 74 6f 72 79 20 and.repository
77a0: 6d 65 61 6e 73 20 74 68 65 20 73 74 61 6e 64 61 means the standa
77b0: 72 64 20 6d 65 74 68 6f 64 20 66 6f 72 20 77 6f rd method for wo
77c0: 72 6b 69 6e 67 20 77 69 74 68 20 61 20 47 69 74 rking with a Git
77d0: 20 72 65 70 6f 20 69 73 20 74 6f 0a 68 61 76 65 repo is to.have
77e0: 20 6f 6e 65 20 77 6f 72 6b 69 6e 67 20 64 69 72 one working dir
77f0: 65 63 74 6f 72 79 20 6f 6e 6c 79 2e 20 4d 6f 73 ectory only. Mos
7800: 74 20 47 69 74 20 74 75 74 6f 72 69 61 6c 73 20 t Git tutorials
7810: 74 65 61 63 68 20 74 68 69 73 20 73 74 79 6c 65 teach this style
7820: 2c 20 73 6f 0a 69 74 20 69 73 20 68 6f 77 20 6d , so.it is how m
7830: 6f 73 74 20 70 65 6f 70 6c 65 20 6c 65 61 72 6e ost people learn
7840: 20 74 6f 20 75 73 65 20 47 69 74 2e 20 42 65 63 to use Git. Bec
7850: 61 75 73 65 20 72 65 6c 61 74 69 76 65 6c 79 20 ause relatively
7860: 66 65 77 20 70 65 6f 70 6c 65 0a 75 73 65 20 47 few people.use G
7870: 69 74 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 it with multiple
7880: 20 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f working directo
7890: 72 69 65 73 20 70 65 72 20 72 65 70 6f 73 69 74 ries per reposit
78a0: 6f 72 79 2c 20 74 68 65 72 65 20 61 72 65 0a 5b ory, there are.[
78b0: 68 74 74 70 73 3a 2f 2f 64 75 63 6b 64 75 63 6b https://duckduck
78c0: 67 6f 2e 63 6f 6d 2f 3f 71 3d 67 69 74 2b 77 6f go.com/?q=git+wo
78d0: 72 6b 74 72 65 65 2b 70 72 6f 62 6c 65 6d 20 7c rktree+problem |
78e0: 20 73 65 76 65 72 61 6c 20 6b 6e 6f 77 6e 0a 70 several known.p
78f0: 72 6f 62 6c 65 6d 73 5d 20 77 69 74 68 20 74 68 roblems] with th
7900: 61 74 20 77 61 79 20 6f 66 20 77 6f 72 6b 69 6e at way of workin
7910: 67 2c 20 70 72 6f 62 6c 65 6d 73 20 77 68 69 63 g, problems whic
7920: 68 20 64 6f 6e 27 74 20 68 61 70 70 65 6e 20 69 h don't happen i
7930: 6e 20 46 6f 73 73 69 6c 20 62 65 63 61 75 73 65 n Fossil because
7940: 20 6f 66 0a 74 68 65 20 63 6c 65 61 72 20 5b 2e of.the clear [.
7950: 2f 63 6b 6f 75 74 2d 77 6f 72 6b 66 6c 6f 77 73 /ckout-workflows
7960: 2e 6d 64 20 7c 20 73 65 70 61 72 61 74 69 6f 6e .md | separation
7970: 5d 20 62 65 74 77 65 65 6e 20 61 20 46 6f 73 73 ] between a Foss
7980: 69 6c 20 72 65 70 6f 73 69 74 6f 72 79 20 61 6e il repository an
7990: 64 0a 65 61 63 68 20 77 6f 72 6b 69 6e 67 20 64 d.each working d
79a0: 69 72 65 63 74 6f 72 79 2e 0a 0a 54 68 69 73 20 irectory...This
79b0: 64 69 73 74 69 6e 63 74 69 6f 6e 20 6d 61 74 74 distinction matt
79c0: 65 72 73 20 62 65 63 61 75 73 65 20 73 77 69 74 ers because swit
79d0: 63 68 69 6e 67 20 62 72 61 6e 63 68 65 73 20 69 ching branches i
79e0: 6e 73 69 64 65 20 61 20 73 69 6e 67 6c 65 20 77 nside a single w
79f0: 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72 79 orking directory
7a00: 20 6c 6f 73 65 73 20 6c 6f 63 61 6c 20 63 6f 6e loses local con
7a10: 74 65 78 74 0a 6f 6e 20 65 61 63 68 20 73 77 69 text.on each swi
7a20: 74 63 68 2e 0a 0a 46 6f 72 20 69 6e 73 74 61 6e tch...For instan
7a30: 63 65 2c 20 69 6e 20 61 6e 79 20 73 6f 66 74 77 ce, in any softw
7a40: 61 72 65 20 70 72 6f 6a 65 63 74 20 77 68 65 72 are project wher
7a50: 65 20 74 68 65 20 72 75 6e 6e 61 62 6c 65 20 70 e the runnable p
7a60: 72 6f 67 72 61 6d 20 6d 75 73 74 20 62 65 0a 62 rogram must be.b
7a70: 75 69 6c 74 20 66 72 6f 6d 20 73 6f 75 72 63 65 uilt from source
7a80: 20 66 69 6c 65 73 2c 20 79 6f 75 20 69 6e 76 61 files, you inva
7a90: 6c 69 64 61 74 65 20 62 75 69 6c 64 20 6f 62 6a lidate build obj
7aa0: 65 63 74 73 20 6f 6e 20 65 61 63 68 20 73 77 69 ects on each swi
7ab0: 74 63 68 2c 0a 61 72 74 69 66 69 63 69 61 6c 6c tch,.artificiall
7ac0: 79 20 69 6e 63 72 65 61 73 69 6e 67 20 74 68 65 y increasing the
7ad0: 20 74 69 6d 65 20 72 65 71 75 69 72 65 64 20 74 time required t
7ae0: 6f 20 73 77 69 74 63 68 20 76 65 72 73 69 6f 6e o switch version
7af0: 73 2e 20 4d 6f 73 74 20 6f 62 76 69 6f 75 73 6c s. Most obviousl
7b00: 79 2c 20 74 68 69 73 0a 61 66 66 65 63 74 73 20 y, this.affects
7b10: 73 6f 66 74 77 61 72 65 20 77 72 69 74 74 65 6e software written
7b20: 20 69 6e 20 73 74 61 74 69 63 61 6c 6c 79 2d 63 in statically-c
7b30: 6f 6d 70 69 6c 65 64 20 70 72 6f 67 72 61 6d 6d ompiled programm
7b40: 69 6e 67 20 6c 61 6e 67 75 61 67 65 73 0a 73 75 ing languages.su
7b50: 63 68 20 61 73 20 43 2c 20 4a 61 76 61 2c 20 61 ch as C, Java, a
7b60: 6e 64 20 48 61 73 6b 65 6c 6c 2c 20 62 75 74 20 nd Haskell, but
7b70: 69 74 20 63 61 6e 20 65 76 65 6e 20 61 66 66 65 it can even affe
7b80: 63 74 20 70 72 6f 67 72 61 6d 73 20 77 72 69 74 ct programs writ
7b90: 74 65 6e 20 69 6e 0a 64 79 6e 61 6d 69 63 20 6c ten in.dynamic l
7ba0: 61 6e 67 75 61 67 65 73 20 6c 69 6b 65 20 4a 61 anguages like Ja
7bb0: 76 61 53 63 72 69 70 74 2e 20 41 20 74 79 70 69 vaScript. A typi
7bc0: 63 61 6c 0a 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e cal.[https://en.
7bd0: 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 wikipedia.org/wi
7be0: 6b 69 2f 53 69 6e 67 6c 65 2d 70 61 67 65 5f 61 ki/Single-page_a
7bf0: 70 70 6c 69 63 61 74 69 6f 6e 20 7c 20 53 50 41 pplication | SPA
7c00: 5d 20 62 75 69 6c 64 0a 70 72 6f 63 65 73 73 20 ] build.process
7c10: 69 6e 76 6f 6c 76 65 73 20 73 65 76 65 72 61 6c involves several
7c20: 20 70 61 73 73 65 73 3a 20 5b 68 74 74 70 3a 2f passes: [http:/
7c30: 2f 62 72 6f 77 73 65 72 69 66 79 2e 6f 72 67 2f /browserify.org/
7c40: 20 7c 20 42 72 6f 77 73 65 72 69 66 79 5d 20 74 | Browserify] t
7c50: 6f 20 63 6f 6e 76 65 72 74 0a 5b 68 74 74 70 73 o convert.[https
7c60: 3a 2f 2f 6e 6f 64 65 6a 73 2e 6f 72 67 2f 20 7c ://nodejs.org/ |
7c70: 20 4e 6f 64 65 5d 20 70 61 63 6b 61 67 65 73 20 Node] packages
7c80: 73 6f 20 74 68 65 79 27 6c 6c 20 72 75 6e 20 69 so they'll run i
7c90: 6e 20 61 20 77 65 62 20 62 72 6f 77 73 65 72 2c n a web browser,
7ca0: 0a 5b 68 74 74 70 73 3a 2f 2f 73 61 73 73 2d 6c .[https://sass-l
7cb0: 61 6e 67 2e 63 6f 6d 20 7c 20 53 41 53 53 5d 20 ang.com | SASS]
7cc0: 74 6f 20 43 53 53 20 74 72 61 6e 73 6c 61 74 69 to CSS translati
7cd0: 6f 6e 2c 0a 74 72 61 6e 73 70 69 6c 61 74 69 6f on,.transpilatio
7ce0: 6e 20 6f 66 20 5b 68 74 74 70 73 3a 2f 2f 77 77 n of [https://ww
7cf0: 77 2e 74 79 70 65 73 63 72 69 70 74 6c 61 6e 67 w.typescriptlang
7d00: 2e 6f 72 67 20 7c 20 54 79 70 65 73 63 72 69 70 .org | Typescrip
7d10: 74 5d 20 74 6f 20 4a 61 76 61 53 63 72 69 70 74 t] to JavaScript
7d20: 2c 0a 5b 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 ,.[https://githu
7d30: 62 2e 63 6f 6d 2f 6d 69 73 68 6f 6f 2f 55 67 6c b.com/mishoo/Ugl
7d40: 69 66 79 4a 53 20 7c 20 75 67 6c 69 66 69 63 61 ifyJS | uglifica
7d50: 74 69 6f 6e 5d 2c 20 65 74 63 2e 0a 4f 6e 63 65 tion], etc..Once
7d60: 20 61 6c 6c 20 74 68 61 74 20 70 72 6f 63 65 73 all that proces
7d70: 73 69 6e 67 20 77 6f 72 6b 20 69 73 20 64 6f 6e sing work is don
7d80: 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20 69 6e e for a given in
7d90: 70 75 74 0a 66 69 6c 65 20 69 6e 20 61 20 67 69 put.file in a gi
7da0: 76 65 6e 20 77 6f 72 6b 69 6e 67 20 64 69 72 65 ven working dire
7db0: 63 74 6f 72 79 2c 20 77 68 79 20 72 65 2d 64 6f ctory, why re-do
7dc0: 20 74 68 61 74 20 77 6f 72 6b 20 6a 75 73 74 20 that work just
7dd0: 74 6f 20 73 77 69 74 63 68 0a 76 65 72 73 69 6f to switch.versio
7de0: 6e 73 3f 20 49 66 20 6d 6f 73 74 20 6f 66 20 74 ns? If most of t
7df0: 68 65 20 66 69 6c 65 73 20 74 68 61 74 20 64 69 he files that di
7e00: 66 66 65 72 20 62 65 74 77 65 65 6e 20 76 65 72 ffer between ver
7e10: 73 69 6f 6e 73 20 64 6f 6e 27 74 20 63 68 61 6e sions don't chan
7e20: 67 65 0a 76 65 72 79 20 6f 66 74 65 6e 2c 20 79 ge.very often, y
7e30: 6f 75 20 63 61 6e 20 73 61 76 65 20 73 75 62 73 ou can save subs
7e40: 74 61 6e 74 69 61 6c 20 74 69 6d 65 20 62 79 20 tantial time by
7e50: 73 77 69 74 63 68 69 6e 67 20 62 72 61 6e 63 68 switching branch
7e60: 65 73 20 77 69 74 68 0a 3c 74 74 3e 63 64 3c 2f es with.<tt>cd</
7e70: 74 74 3e 20 72 61 74 68 65 72 20 74 68 61 6e 20 tt> rather than
7e80: 73 77 61 70 70 69 6e 67 20 76 65 72 73 69 6f 6e swapping version
7e90: 73 20 69 6e 2d 70 6c 61 63 65 20 77 69 74 68 69 s in-place withi
7ea0: 6e 20 61 20 77 6f 72 6b 69 6e 67 0a 63 68 65 63 n a working.chec
7eb0: 6b 6f 75 74 20 64 69 72 65 63 74 6f 72 79 2e 0a kout directory..
7ec0: 0a 46 6f 72 20 61 6e 6f 74 68 65 72 20 65 78 61 .For another exa
7ed0: 6d 70 6c 65 2c 20 79 6f 75 20 6d 69 67 68 74 20 mple, you might
7ee0: 68 61 76 65 20 61 6e 20 61 63 74 69 76 65 20 6c have an active l
7ef0: 6f 6e 67 2d 72 75 6e 6e 69 6e 67 20 74 65 73 74 ong-running test
7f00: 20 67 72 69 6e 64 69 6e 67 0a 61 77 61 79 20 69 grinding.away i
7f10: 6e 20 61 20 77 6f 72 6b 69 6e 67 20 64 69 72 65 n a working dire
7f20: 63 74 6f 72 79 2c 20 74 68 65 6e 20 67 65 74 20 ctory, then get
7f30: 61 20 63 61 6c 6c 20 66 72 6f 6d 20 61 20 63 75 a call from a cu
7f40: 73 74 6f 6d 65 72 20 72 65 71 75 69 72 69 6e 67 stomer requiring
7f50: 0a 74 68 61 74 20 79 6f 75 20 73 77 69 74 63 68 .that you switch
7f60: 20 74 6f 20 61 20 73 74 61 62 6c 65 20 62 72 61 to a stable bra
7f70: 6e 63 68 20 74 6f 20 61 6e 73 77 65 72 20 71 75 nch to answer qu
7f80: 65 73 74 69 6f 6e 73 20 69 6e 20 74 65 72 6d 73 estions in terms
7f90: 20 6f 66 20 74 68 65 0a 76 65 72 73 69 6f 6e 20 of the.version
7fa0: 74 68 61 74 20 63 75 73 74 6f 6d 65 72 20 69 73 that customer is
7fb0: 20 72 75 6e 6e 69 6e 67 2e 20 59 6f 75 20 64 6f running. You do
7fc0: 6e 27 74 20 77 61 6e 74 20 74 6f 20 73 74 6f 70 n't want to stop
7fd0: 20 74 68 65 20 74 65 73 74 20 69 6e 0a 6f 72 64 the test in.ord
7fe0: 65 72 20 74 6f 20 73 77 69 74 63 68 20 79 6f 75 er to switch you
7ff0: 72 20 6c 6f 6e 65 20 77 6f 72 6b 69 6e 67 20 64 r lone working d
8000: 69 72 65 63 74 6f 72 79 20 74 6f 20 74 68 65 20 irectory to the
8010: 73 74 61 62 6c 65 20 62 72 61 6e 63 68 2e 0a 0a stable branch...
8020: 44 69 73 6b 20 73 70 61 63 65 20 69 73 20 63 68 Disk space is ch
8030: 65 61 70 2e 20 48 61 76 69 6e 67 20 73 65 76 65 eap. Having seve
8040: 72 61 6c 20 77 6f 72 6b 69 6e 67 20 64 69 72 65 ral working dire
8050: 63 74 6f 72 69 65 73 20 e2 80 94 20 65 61 63 68 ctories — each
8060: 20 77 69 74 68 20 69 74 73 0a 6f 77 6e 20 6c 6f with its.own lo
8070: 63 61 6c 20 73 74 61 74 65 20 e2 80 94 20 6d 61 cal state — ma
8080: 6b 65 73 20 73 77 69 74 63 68 69 6e 67 20 76 65 kes switching ve
8090: 72 73 69 6f 6e 73 20 63 68 65 61 70 20 61 6e 64 rsions cheap and
80a0: 20 66 61 73 74 2e 0a 0a 50 6c 75 73 2c 0a 3c 74 fast...Plus,.<t
80b0: 74 3e 63 64 3c 2f 74 74 3e 20 69 73 20 66 61 73 t>cd</tt> is fas
80c0: 74 65 72 20 74 6f 20 74 79 70 65 20 74 68 61 6e ter to type than
80d0: 20 3c 74 74 3e 67 69 74 20 63 68 65 63 6b 6f 75 <tt>git checkou
80e0: 74 3c 2f 74 74 3e 20 6f 72 20 3c 74 74 3e 66 6f t</tt> or <tt>fo
80f0: 73 73 69 6c 0a 75 70 64 61 74 65 3c 2f 74 74 3e ssil.update</tt>
8100: 2e 0a 0a 50 61 72 74 73 20 6f 66 20 74 68 69 73 ...Parts of this
8110: 20 73 65 63 74 69 6f 6e 20 61 72 65 20 5b 68 74 section are [ht
8120: 74 70 73 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d tps://fossil-scm
8130: 2e 6f 72 67 2f 66 6f 72 75 6d 2f 66 6f 72 75 6d .org/forum/forum
8140: 70 6f 73 74 2f 35 39 36 31 65 39 36 39 66 61 7c post/5961e969fa|
8150: 64 69 73 70 75 74 65 64 5d 0a 62 79 20 5b 68 74 disputed].by [ht
8160: 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d tps://github.com
8170: 2f 6f 6c 6f 72 69 6e 33 37 7c 4a 61 6b 75 62 20 /olorin37|Jakub
8180: 41 2e 20 47 2e 5d 2e 0a 0a 3c 68 33 20 69 64 3d A. G.]...<h3 id=
8190: 22 68 69 73 74 6f 72 79 22 3e 32 2e 37 20 57 68 "history">2.7 Wh
81a0: 61 74 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 at you should ha
81b0: 76 65 20 64 6f 6e 65 20 76 73 2e 20 57 68 61 74 ve done vs. What
81c0: 20 79 6f 75 20 61 63 74 75 61 6c 6c 79 20 64 69 you actually di
81d0: 64 3c 2f 68 33 3e 0a 0a 47 69 74 20 70 75 74 73 d</h3>..Git puts
81e0: 20 61 20 6c 6f 74 20 6f 66 20 65 6d 70 68 61 73 a lot of emphas
81f0: 69 73 20 6f 6e 20 6d 61 69 6e 74 61 69 6e 69 6e is on maintainin
8200: 67 0a 61 20 22 63 6c 65 61 6e 22 20 63 68 65 63 g.a "clean" chec
8210: 6b 2d 69 6e 20 68 69 73 74 6f 72 79 2e 20 20 45 k-in history. E
8220: 78 74 72 61 6e 65 6f 75 73 20 61 6e 64 20 65 78 xtraneous and ex
8230: 70 65 72 69 6d 65 6e 74 61 6c 20 62 72 61 6e 63 perimental branc
8240: 68 65 73 20 62 79 0a 69 6e 64 69 76 69 64 75 61 hes by.individua
8250: 6c 20 64 65 76 65 6c 6f 70 65 72 73 20 6f 66 74 l developers oft
8260: 65 6e 20 6e 65 76 65 72 20 6d 61 6b 65 20 69 74 en never make it
8270: 20 69 6e 74 6f 20 74 68 65 20 6d 61 69 6e 20 72 into the main r
8280: 65 70 6f 73 69 74 6f 72 79 2e 0a 42 72 61 6e 63 epository..Branc
8290: 68 65 73 20 6d 61 79 20 62 65 20 72 65 62 61 73 hes may be rebas
82a0: 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 ed before being
82b0: 70 75 73 68 65 64 20 74 6f 20 6d 61 6b 65 0a 69 pushed to make.i
82c0: 74 20 61 70 70 65 61 72 20 61 73 20 69 66 20 64 t appear as if d
82d0: 65 76 65 6c 6f 70 6d 65 6e 74 20 68 61 64 20 62 evelopment had b
82e0: 65 65 6e 20 6c 69 6e 65 61 72 2c 20 6f 72 20 22 een linear, or "
82f0: 73 71 75 61 73 68 65 64 22 20 74 6f 20 6d 61 6b squashed" to mak
8300: 65 20 69 74 0a 61 70 70 65 61 72 20 74 68 61 74 e it.appear that
8310: 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6d 6d 69 74 multiple commit
8320: 73 20 77 65 72 65 20 6d 61 64 65 20 61 73 20 61 s were made as a
8330: 20 73 69 6e 67 6c 65 20 63 6f 6d 6d 69 74 2e 0a single commit..
8340: 54 68 65 72 65 20 61 72 65 20 5b 68 74 74 70 73 There are [https
8350: 3a 2f 2f 67 69 74 2d 73 63 6d 2e 63 6f 6d 2f 62 ://git-scm.com/b
8360: 6f 6f 6b 2f 65 6e 2f 76 32 2f 47 69 74 2d 54 6f ook/en/v2/Git-To
8370: 6f 6c 73 2d 52 65 77 72 69 74 69 6e 67 2d 48 69 ols-Rewriting-Hi
8380: 73 74 6f 72 79 20 7c 0a 6f 74 68 65 72 20 68 69 story |.other hi
8390: 73 74 6f 72 79 20 72 65 77 72 69 74 69 6e 67 20 story rewriting
83a0: 6d 65 63 68 61 6e 69 73 6d 73 20 69 6e 20 47 69 mechanisms in Gi
83b0: 74 5d 20 61 73 20 77 65 6c 6c 2e 20 47 69 74 20 t] as well. Git
83c0: 73 74 72 69 76 65 73 20 74 6f 20 72 65 63 6f 72 strives to recor
83d0: 64 20 77 68 61 74 0a 74 68 65 20 64 65 76 65 6c d what.the devel
83e0: 6f 70 6d 65 6e 74 20 6f 66 20 61 20 70 72 6f 6a opment of a proj
83f0: 65 63 74 20 73 68 6f 75 6c 64 20 68 61 76 65 20 ect should have
8400: 6c 6f 6f 6b 65 64 20 6c 69 6b 65 20 68 61 64 20 looked like had
8410: 74 68 65 72 65 20 62 65 65 6e 20 6e 6f 0a 6d 69 there been no.mi
8420: 73 74 61 6b 65 73 2e 0a 0a 46 6f 73 73 69 6c 2c stakes...Fossil,
8430: 20 69 6e 20 63 6f 6e 74 72 61 73 74 2c 20 70 75 in contrast, pu
8440: 74 73 20 6d 6f 72 65 20 65 6d 70 68 61 73 69 73 ts more emphasis
8450: 20 6f 6e 20 72 65 63 6f 72 64 69 6e 67 20 65 78 on recording ex
8460: 61 63 74 6c 79 20 77 68 61 74 20 68 61 70 70 65 actly what happe
8470: 6e 65 64 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 61 ned,.including a
8480: 6c 6c 20 6f 66 20 74 68 65 20 6d 65 73 73 79 20 ll of the messy
8490: 65 72 72 6f 72 73 2c 20 64 65 61 64 2d 65 6e 64 errors, dead-end
84a0: 73 2c 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 s, experimental
84b0: 62 72 61 6e 63 68 65 73 2c 20 61 6e 64 0a 73 6f branches, and.so
84c0: 20 66 6f 72 74 68 2e 20 20 4f 6e 65 20 6d 69 67 forth. One mig
84d0: 68 74 20 61 72 67 75 65 20 74 68 61 74 20 74 68 ht argue that th
84e0: 69 73 0a 6d 61 6b 65 73 20 74 68 65 20 68 69 73 is.makes the his
84f0: 74 6f 72 79 20 6f 66 20 61 20 46 6f 73 73 69 6c tory of a Fossil
8500: 20 70 72 6f 6a 65 63 74 20 22 6d 65 73 73 79 2c project "messy,
8510: 22 20 62 75 74 20 61 6e 6f 74 68 65 72 20 70 6f " but another po
8520: 69 6e 74 20 6f 66 20 76 69 65 77 0a 69 73 20 74 int of view.is t
8530: 68 61 74 20 74 68 69 73 20 6d 61 6b 65 73 20 74 hat this makes t
8540: 68 65 20 68 69 73 74 6f 72 79 20 22 61 63 63 75 he history "accu
8550: 72 61 74 65 2e 22 20 20 49 6e 20 61 63 74 75 61 rate." In actua
8560: 6c 20 70 72 61 63 74 69 63 65 2c 20 74 68 65 0a l practice, the.
8570: 73 75 70 65 72 69 6f 72 20 72 65 70 6f 72 74 69 superior reporti
8580: 6e 67 20 74 6f 6f 6c 73 20 61 76 61 69 6c 61 62 ng tools availab
8590: 6c 65 20 69 6e 20 46 6f 73 73 69 6c 20 6d 65 61 le in Fossil mea
85a0: 6e 20 74 68 61 74 20 74 68 69 73 20 69 6e 63 69 n that this inci
85b0: 64 65 6e 74 61 6c 20 6d 65 73 73 0a 69 73 20 6e dental mess.is n
85c0: 6f 74 20 61 20 66 61 63 74 6f 72 2e 0a 0a 4c 69 ot a factor...Li
85d0: 6b 65 20 47 69 74 2c 20 46 6f 73 73 69 6c 20 68 ke Git, Fossil h
85e0: 61 73 20 61 6e 20 5b 2f 68 65 6c 70 3f 63 6d 64 as an [/help?cmd
85f0: 3d 61 6d 65 6e 64 7c 61 6d 65 6e 64 20 63 6f 6d =amend|amend com
8600: 6d 61 6e 64 5d 20 66 6f 72 20 6d 6f 64 69 66 79 mand] for modify
8610: 69 6e 67 0a 70 72 69 6f 72 20 63 6f 6d 6d 69 74 ing.prior commit
8620: 73 2c 20 62 75 74 20 75 6e 6c 69 6b 65 20 69 6e s, but unlike in
8630: 20 47 69 74 2c 20 74 68 69 73 20 77 6f 72 6b 73 Git, this works
8640: 20 6e 6f 74 20 62 79 20 72 65 70 6c 61 63 69 6e not by replacin
8650: 67 20 64 61 74 61 20 69 6e 0a 74 68 65 20 72 65 g data in.the re
8660: 70 6f 73 69 74 6f 72 79 2c 20 62 75 74 20 62 79 pository, but by
8670: 20 61 64 64 69 6e 67 20 61 20 63 6f 72 72 65 63 adding a correc
8680: 74 69 6f 6e 20 72 65 63 6f 72 64 20 74 6f 20 74 tion record to t
8690: 68 65 20 72 65 70 6f 73 69 74 6f 72 79 20 74 68 he repository th
86a0: 61 74 0a 61 66 66 65 63 74 73 20 68 6f 77 20 6c at.affects how l
86b0: 61 74 65 72 20 46 6f 73 73 69 6c 20 6f 70 65 72 ater Fossil oper
86c0: 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 74 ations present t
86d0: 68 65 20 63 6f 72 72 65 63 74 65 64 20 64 61 74 he corrected dat
86e0: 61 2e 20 54 68 65 20 6f 6c 64 0a 69 6e 66 6f 72 a. The old.infor
86f0: 6d 61 74 69 6f 6e 20 69 73 20 73 74 69 6c 6c 20 mation is still
8700: 74 68 65 72 65 20 69 6e 20 74 68 65 20 72 65 70 there in the rep
8710: 6f 73 69 74 6f 72 79 2c 20 69 74 20 69 73 20 6a ository, it is j
8720: 75 73 74 20 6f 76 65 72 72 69 64 64 65 6e 20 66 ust overridden f
8730: 72 6f 6d 0a 74 68 65 20 61 6d 65 6e 64 6d 65 6e rom.the amendmen
8740: 74 20 70 6f 69 6e 74 20 66 6f 72 77 61 72 64 2e t point forward.
8750: 0a 0a 46 6f 73 73 69 6c 20 6c 61 63 6b 73 20 61 ..Fossil lacks a
8760: 6c 6d 6f 73 74 20 65 76 65 72 79 20 6f 74 68 65 lmost every othe
8770: 72 20 68 69 73 74 6f 72 79 20 72 65 77 72 69 74 r history rewrit
8780: 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20 6c 69 ing mechanism li
8790: 73 74 65 64 20 6f 6e 0a 74 68 65 20 47 69 74 20 sted on.the Git
87a0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 70 61 documentation pa
87b0: 67 65 20 6c 69 6e 6b 65 64 20 61 62 6f 76 65 2e ge linked above.
87c0: 20 5b 2e 2f 72 65 62 61 73 65 68 61 72 6d 2e 6d [./rebaseharm.m
87d0: 64 20 7c 20 54 68 65 72 65 20 69 73 20 6e 6f 0a d | There is no.
87e0: 72 65 62 61 73 65 5d 20 69 6e 20 46 6f 73 73 69 rebase] in Fossi
87f0: 6c 2c 20 6f 6e 20 70 75 72 70 6f 73 65 2c 20 74 l, on purpose, t
8800: 68 75 73 20 6e 6f 20 77 61 79 20 74 6f 20 72 65 hus no way to re
8810: 6f 72 64 65 72 20 6f 72 20 63 6f 70 79 20 63 6f order or copy co
8820: 6d 6d 69 74 73 0a 61 72 6f 75 6e 64 20 69 6e 20 mmits.around in
8830: 74 68 65 20 63 6f 6d 6d 69 74 20 68 61 73 68 20 the commit hash
8840: 74 72 65 65 2e 20 54 68 65 72 65 20 69 73 20 6e tree. There is n
8850: 6f 20 63 6f 6d 6d 69 74 20 73 71 75 61 73 68 69 o commit squashi
8860: 6e 67 2c 20 64 72 6f 70 70 69 6e 67 2c 0a 6f 72 ng, dropping,.or
8870: 20 69 6e 74 65 72 61 63 74 69 76 65 20 70 61 74 interactive pat
8880: 63 68 2d 62 61 73 65 64 20 63 68 65 72 72 79 2d ch-based cherry-
8890: 70 69 63 6b 69 6e 67 20 6f 66 20 63 6f 6d 6d 69 picking of commi
88a0: 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 46 6f t elements in Fo
88b0: 73 73 69 6c 2e 0a 54 68 65 72 65 20 69 73 20 6e ssil..There is n
88c0: 6f 74 68 69 6e 67 20 6c 69 6b 65 20 47 69 74 27 othing like Git'
88d0: 73 20 3c 74 74 3e 66 69 6c 74 65 72 2d 62 72 61 s <tt>filter-bra
88e0: 6e 63 68 3c 2f 74 74 3e 20 69 6e 20 46 6f 73 73 nch</tt> in Foss
88f0: 69 6c 2e 0a 0a 54 68 65 20 6c 6f 6e 65 20 65 78 il...The lone ex
8900: 63 65 70 74 69 6f 6e 20 69 73 20 64 65 6c 65 74 ception is delet
8910: 69 6e 67 20 63 6f 6d 6d 69 74 73 2e 20 46 6f 73 ing commits. Fos
8920: 73 69 6c 20 68 61 73 20 74 77 6f 20 6d 65 74 68 sil has two meth
8930: 6f 64 73 20 66 6f 72 20 64 6f 69 6e 67 0a 74 68 ods for doing.th
8940: 61 74 2c 20 62 6f 74 68 20 6f 66 20 77 68 69 63 at, both of whic
8950: 68 20 68 61 76 65 20 73 74 72 69 6e 67 65 6e 74 h have stringent
8960: 20 6c 69 6d 69 74 61 74 69 6f 6e 73 2c 20 6f 6e limitations, on
8970: 20 70 75 72 70 6f 73 65 2e 0a 0a 54 68 65 20 66 purpose...The f
8980: 69 72 73 74 20 69 73 20 5b 2f 64 6f 63 2f 74 72 irst is [/doc/tr
8990: 75 6e 6b 2f 77 77 77 2f 73 68 75 6e 6e 69 6e 67 unk/www/shunning
89a0: 2e 77 69 6b 69 20 7c 20 73 68 75 6e 6e 69 6e 67 .wiki | shunning
89b0: 5d 2e 20 53 65 65 20 74 68 61 74 0a 64 6f 63 75 ]. See that.docu
89c0: 6d 65 6e 74 20 66 6f 72 20 64 65 74 61 69 6c 73 ment for details
89d0: 2c 20 62 75 74 20 62 72 69 65 66 6c 79 2c 20 79 , but briefly, y
89e0: 6f 75 20 6f 6e 6c 79 20 67 65 74 20 6d 61 6e 64 ou only get mand
89f0: 61 74 6f 72 79 20 63 6f 6d 70 6c 69 61 6e 63 65 atory compliance
8a00: 0a 66 6f 72 20 73 68 75 6e 20 72 65 71 75 65 73 .for shun reques
8a10: 74 73 20 77 69 74 68 69 6e 20 61 20 73 69 6e 67 ts within a sing
8a20: 6c 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 20 53 le repository. S
8a30: 68 75 6e 20 72 65 71 75 65 73 74 73 20 64 6f 20 hun requests do
8a40: 6e 6f 74 0a 70 72 6f 70 61 67 61 74 65 20 61 75 not.propagate au
8a50: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 65 74 77 tomatically betw
8a60: 65 65 6e 20 72 65 70 6f 73 69 74 6f 72 79 20 63 een repository c
8a70: 6c 6f 6e 65 73 2e 20 41 20 46 6f 73 73 69 6c 20 lones. A Fossil
8a80: 72 65 70 6f 73 69 74 6f 72 79 0a 61 64 6d 69 6e repository.admin
8a90: 69 73 74 72 61 74 6f 72 20 63 61 6e 20 3c 69 3e istrator can <i>
8aa0: 63 6f 6f 70 65 72 61 74 69 76 65 6c 79 3c 2f 69 cooperatively</i
8ab0: 3e 20 70 75 6c 6c 20 61 6e 6f 74 68 65 72 20 72 > pull another r
8ac0: 65 70 6f 27 73 20 73 68 75 6e 20 72 65 71 75 65 epo's shun reque
8ad0: 73 74 73 0a 61 63 72 6f 73 73 20 61 20 73 79 6e sts.across a syn
8ae0: 63 20 62 6f 75 6e 64 61 72 79 2c 20 73 6f 20 74 c boundary, so t
8af0: 68 61 74 20 74 77 6f 20 61 64 6d 69 6e 73 20 63 hat two admins c
8b00: 61 6e 20 67 65 74 20 74 6f 67 65 74 68 65 72 20 an get together
8b10: 61 6e 64 20 61 67 72 65 65 20 74 6f 0a 73 68 75 and agree to.shu
8b20: 6e 20 63 65 72 74 61 69 6e 20 63 6f 6d 6d 69 74 n certain commit
8b30: 74 65 64 20 61 72 74 69 66 61 63 74 73 2c 20 62 ted artifacts, b
8b40: 75 74 20 61 20 70 65 72 73 6f 6e 20 63 61 6e 6e ut a person cann
8b50: 6f 74 20 66 6f 72 63 65 20 74 68 65 69 72 20 6c ot force their l
8b60: 6f 63 61 6c 0a 73 68 75 6e 20 72 65 71 75 65 73 ocal.shun reques
8b70: 74 73 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72 20 ts into another
8b80: 72 65 70 6f 20 77 69 74 68 6f 75 74 20 68 61 76 repo without hav
8b90: 69 6e 67 20 61 64 6d 69 6e 2d 6c 65 76 65 6c 20 ing admin-level
8ba0: 63 6f 6e 74 72 6f 6c 20 6f 76 65 72 0a 74 68 65 control over.the
8bb0: 20 72 65 63 65 69 76 69 6e 67 20 72 65 70 6f 20 receiving repo
8bc0: 61 73 20 77 65 6c 6c 2e 20 46 6f 73 73 69 6c 27 as well. Fossil'
8bd0: 73 20 73 68 75 6e 20 66 65 61 74 75 72 65 20 69 s shun feature i
8be0: 73 6e 27 74 20 66 6f 72 20 66 69 78 69 6e 67 20 sn't for fixing
8bf0: 75 70 0a 65 76 65 72 79 64 61 79 20 62 61 64 20 up.everyday bad
8c00: 63 6f 6d 6d 69 74 73 2c 20 69 74 27 73 20 66 6f commits, it's fo
8c10: 72 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20 65 r dealing with e
8c20: 78 74 72 65 6d 65 20 73 69 74 75 61 74 69 6f 6e xtreme situation
8c30: 73 3a 20 70 75 62 6c 69 63 0a 63 6f 6d 6d 69 74 s: public.commit
8c40: 73 20 6f 66 20 73 65 63 72 65 74 20 6d 61 74 65 s of secret mate
8c50: 72 69 61 6c 2c 20 74 69 63 6b 65 74 2f 77 69 6b rial, ticket/wik
8c60: 69 2f 66 6f 72 75 6d 20 73 70 61 6d 2c 20 6c 61 i/forum spam, la
8c70: 77 20 65 6e 66 6f 72 63 65 6d 65 6e 74 0a 74 61 w enforcement.ta
8c80: 6b 65 64 6f 77 6e 20 64 65 6d 61 6e 64 73 2c 20 kedown demands,
8c90: 65 74 63 2e 0a 0a 54 68 65 72 65 20 69 73 20 61 etc...There is a
8ca0: 6c 73 6f 20 74 68 65 20 65 78 70 65 72 69 6d 65 lso the experime
8cb0: 6e 74 61 6c 20 5b 2f 68 65 6c 70 3f 63 6d 64 3d ntal [/help?cmd=
8cc0: 70 75 72 67 65 20 7c 20 3c 74 74 3e 70 75 72 67 purge | <tt>purg
8cd0: 65 3c 2f 74 74 3e 0a 63 6f 6d 6d 61 6e 64 5d 2c e</tt>.command],
8ce0: 20 77 68 69 63 68 20 64 69 66 66 65 72 73 20 66 which differs f
8cf0: 72 6f 6d 20 73 68 75 6e 6e 69 6e 67 20 69 6e 20 rom shunning in
8d00: 77 61 79 73 20 74 68 61 74 20 61 72 65 6e 27 74 ways that aren't
8d10: 20 65 73 70 65 63 69 61 6c 6c 79 0a 69 6d 70 6f especially.impo
8d20: 72 74 61 6e 74 20 69 6e 20 74 68 65 20 63 6f 6e rtant in the con
8d30: 74 65 78 74 20 6f 66 20 74 68 69 73 20 64 6f 63 text of this doc
8d40: 75 6d 65 6e 74 2e 20 41 74 20 61 20 33 30 30 30 ument. At a 3000
8d50: 30 20 66 6f 6f 74 20 6c 65 76 65 6c 2c 20 79 6f 0 foot level, yo
8d60: 75 0a 63 61 6e 20 74 68 69 6e 6b 20 6f 66 20 70 u.can think of p
8d70: 75 72 67 69 6e 67 20 61 73 20 75 73 65 66 75 6c urging as useful
8d80: 20 6f 6e 6c 79 20 77 68 65 6e 20 79 6f 75 27 76 only when you'v
8d90: 65 20 74 75 72 6e 65 64 20 6f 66 66 20 46 6f 73 e turned off Fos
8da0: 73 69 6c 27 73 0a 61 75 74 6f 73 79 6e 63 20 66 sil's.autosync f
8db0: 65 61 74 75 72 65 20 61 6e 64 20 77 61 6e 74 20 eature and want
8dc0: 74 6f 20 70 6c 75 63 6b 20 61 72 74 69 66 61 63 to pluck artifac
8dd0: 74 73 20 6f 75 74 20 6f 66 20 69 74 73 20 68 61 ts out of its ha
8de0: 73 68 20 74 72 65 65 20 62 65 66 6f 72 65 0a 74 sh tree before.t
8df0: 68 65 79 20 67 65 74 20 70 75 73 68 65 64 2e 20 hey get pushed.
8e00: 49 6e 20 74 68 61 74 20 73 65 6e 73 65 2c 20 69 In that sense, i
8e10: 74 27 73 20 61 70 70 72 6f 78 69 6d 61 74 65 6c t's approximatel
8e20: 79 20 74 68 65 20 73 61 6d 65 20 61 73 0a 3c 74 y the same as.<t
8e30: 74 3e 67 69 74 c2 a0 72 65 62 61 73 65 c2 a0 2d t>git rebase -
8e40: 69 2c 20 64 72 6f 70 3c 2f 74 74 3e 2e 20 48 6f i, drop</tt>. Ho
8e50: 77 65 76 65 72 2c 20 67 69 76 65 6e 20 74 68 61 wever, given tha
8e60: 74 20 46 6f 73 73 69 6c 20 64 65 66 61 75 6c 74 t Fossil default
8e70: 73 20 74 6f 0a 68 61 76 69 6e 67 20 61 75 74 6f s to.having auto
8e80: 73 79 6e 63 20 65 6e 61 62 6c 65 64 20 5b 23 64 sync enabled [#d
8e90: 65 76 6f 72 67 20 7c 20 66 6f 72 20 67 6f 6f 64 evorg | for good
8ea0: 20 72 65 61 73 6f 6e 5d 2c 20 74 68 65 20 70 75 reason], the pu
8eb0: 72 67 65 20 63 6f 6d 6d 61 6e 64 0a 69 73 6e 27 rge command.isn'
8ec0: 74 20 76 65 72 79 20 75 73 65 66 75 6c 20 69 6e t very useful in
8ed0: 20 70 72 61 63 74 69 63 65 3a 20 6f 6e 63 65 20 practice: once
8ee0: 61 20 63 6f 6d 6d 69 74 20 68 61 73 20 62 65 65 a commit has bee
8ef0: 6e 20 70 75 73 68 65 64 20 69 6e 74 6f 0a 61 6e n pushed into.an
8f00: 6f 74 68 65 72 20 72 65 70 6f 2c 20 73 68 75 6e other repo, shun
8f10: 6e 69 6e 67 20 69 73 20 6d 6f 72 65 20 75 73 65 ning is more use
8f20: 66 75 6c 20 69 66 20 79 6f 75 20 6e 65 65 64 20 ful if you need
8f30: 74 6f 20 64 65 6c 65 74 65 20 69 74 20 66 72 6f to delete it fro
8f40: 6d 0a 68 69 73 74 6f 72 79 2e 0a 0a 49 66 20 74 m.history...If t
8f50: 68 65 73 65 20 61 63 63 6f 6d 6d 6f 64 61 74 69 hese accommodati
8f60: 6f 6e 73 20 73 74 72 69 6b 65 20 79 6f 75 20 61 ons strike you a
8f70: 73 20 69 6e 63 6f 68 65 72 65 6e 74 20 77 69 74 s incoherent wit
8f80: 68 20 72 65 73 70 65 63 74 20 74 6f 0a 46 6f 73 h respect to.Fos
8f90: 73 69 6c 27 73 20 70 68 69 6c 6f 73 6f 70 68 79 sil's philosophy
8fa0: 20 6f 66 20 64 75 72 61 62 6c 65 2c 20 75 6e 63 of durable, unc
8fb0: 68 61 6e 67 69 6e 67 20 63 6f 6d 6d 69 74 73 2c hanging commits,
8fc0: 20 72 65 61 6c 69 7a 65 20 74 68 61 74 20 69 66 realize that if
8fd0: 0a 73 68 75 6e 6e 69 6e 67 20 61 6e 64 20 70 75 .shunning and pu
8fe0: 72 67 69 6e 67 20 77 65 72 65 20 72 65 6d 6f 76 rging were remov
8ff0: 65 64 20 66 72 6f 6d 20 46 6f 73 73 69 6c 2c 20 ed from Fossil,
9000: 79 6f 75 20 63 6f 75 6c 64 20 73 74 69 6c 6c 20 you could still
9010: 72 65 6d 6f 76 65 0a 61 72 74 69 66 61 63 74 73 remove.artifacts
9020: 20 66 72 6f 6d 20 74 68 65 20 72 65 70 6f 73 69 from the reposi
9030: 74 6f 72 79 20 77 69 74 68 20 53 51 4c 20 3c 74 tory with SQL <t
9040: 74 3e 44 45 4c 45 54 45 3c 2f 74 74 3e 20 73 74 t>DELETE</tt> st
9050: 61 74 65 6d 65 6e 74 73 3b 20 74 68 65 0a 72 65 atements; the.re
9060: 70 6f 73 69 74 6f 72 79 20 64 61 74 61 62 61 73 pository databas
9070: 65 20 66 69 6c 65 20 69 73 2c 20 61 66 74 65 72 e file is, after
9080: 20 61 6c 6c 2c 20 64 69 72 65 63 74 6c 79 20 6d all, directly m
9090: 6f 64 69 66 69 61 62 6c 65 2c 20 62 65 69 6e 67 odifiable, being
90a0: 0a 77 72 69 74 61 62 6c 65 20 62 79 20 79 6f 75 .writable by you
90b0: 72 20 75 73 65 72 2e 20 57 68 65 72 65 20 74 68 r user. Where th
90c0: 65 20 46 6f 73 73 69 6c 20 70 68 69 6c 6f 73 6f e Fossil philoso
90d0: 70 68 79 20 72 65 61 6c 6c 79 20 74 61 6b 65 73 phy really takes
90e0: 20 68 6f 6c 64 20 69 73 0a 69 6e 20 6d 61 6b 69 hold is.in maki
90f0: 6e 67 20 69 74 20 64 69 66 66 69 63 75 6c 74 20 ng it difficult
9100: 74 6f 20 76 69 6f 6c 61 74 65 20 74 68 65 20 69 to violate the i
9110: 6e 74 65 67 72 69 74 79 20 6f 66 20 74 68 65 20 ntegrity of the
9120: 68 61 73 68 20 74 72 65 65 2e 0a 49 74 27 73 20 hash tree..It's
9130: 73 6f 6d 65 77 68 61 74 20 74 61 6e 67 65 6e 74 somewhat tangent
9140: 69 61 6c 2c 20 62 75 74 20 74 68 65 20 64 6f 63 ial, but the doc
9150: 75 6d 65 6e 74 20 5b 2e 2f 62 6c 6f 63 6b 63 68 ument [./blockch
9160: 61 69 6e 2e 6d 64 20 7c 20 22 49 73 20 46 6f 73 ain.md | "Is Fos
9170: 73 69 6c 0a 61 20 42 6c 6f 63 6b 63 68 61 69 6e sil.a Blockchain
9180: 3f 22 5d 20 74 6f 75 63 68 65 73 20 6f 6e 20 74 ?"] touches on t
9190: 68 69 73 20 61 6e 64 20 72 65 6c 61 74 65 64 20 his and related
91a0: 74 6f 70 69 63 73 2e 0a 0a 4f 6e 65 20 63 6f 6d topics...One com
91b0: 6d 65 6e 74 61 74 6f 72 20 63 68 61 72 61 63 74 mentator charact
91c0: 65 72 69 7a 65 64 20 47 69 74 20 61 73 20 72 65 erized Git as re
91d0: 63 6f 72 64 69 6e 67 20 68 69 73 74 6f 72 79 20 cording history
91e0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 according to.the
91f0: 20 76 69 63 74 6f 72 73 2c 20 77 68 65 72 65 61 victors, wherea
9200: 73 20 46 6f 73 73 69 6c 20 72 65 63 6f 72 64 73 s Fossil records
9210: 20 68 69 73 74 6f 72 79 20 61 73 20 69 74 20 61 history as it a
9220: 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 65 64 ctually happened
9230: 2e 0a 0a 0a 3c 68 33 20 69 64 3d 22 74 65 73 74 ....<h3 id="test
9240: 69 6e 67 22 3e 32 2e 38 20 54 65 73 74 20 42 65 ing">2.8 Test Be
9250: 66 6f 72 65 20 43 6f 6d 6d 69 74 3c 2f 68 33 3e fore Commit</h3>
9260: 0a 0a 4f 6e 65 20 6f 66 20 74 68 65 20 74 68 69 ..One of the thi
9270: 6e 67 73 20 74 68 61 74 20 66 61 6c 6c 73 20 6f ngs that falls o
9280: 75 74 20 6f 66 20 47 69 74 27 73 20 64 65 66 61 ut of Git's defa
9290: 75 6c 74 20 73 65 70 61 72 61 74 69 6f 6e 20 6f ult separation o
92a0: 66 20 63 6f 6d 6d 69 74 0a 66 72 6f 6d 20 70 75 f commit.from pu
92b0: 73 68 20 69 73 20 74 68 61 74 20 74 68 65 72 65 sh is that there
92c0: 20 61 72 65 20 73 65 76 65 72 61 6c 20 47 69 74 are several Git
92d0: 20 73 75 62 2d 63 6f 6d 6d 61 6e 64 73 20 74 68 sub-commands th
92e0: 61 74 20 6a 75 6d 70 20 73 74 72 61 69 67 68 74 at jump straight
92f0: 0a 74 6f 20 74 68 65 20 63 6f 6d 6d 69 74 20 73 .to the commit s
9300: 74 65 70 20 62 65 66 6f 72 65 20 61 20 63 68 61 tep before a cha
9310: 6e 67 65 20 63 6f 75 6c 64 20 70 6f 73 73 69 62 nge could possib
9320: 6c 79 20 62 65 20 74 65 73 74 65 64 2e 20 46 6f ly be tested. Fo
9330: 73 73 69 6c 2c 20 62 79 0a 63 6f 6e 74 72 61 73 ssil, by.contras
9340: 74 2c 20 6d 61 6b 65 73 20 74 68 65 20 65 71 75 t, makes the equ
9350: 69 76 61 6c 65 6e 74 20 63 68 61 6e 67 65 20 74 ivalent change t
9360: 6f 20 74 68 65 20 6c 6f 63 61 6c 20 77 6f 72 6b o the local work
9370: 69 6e 67 20 63 68 65 63 6b 2d 6f 75 74 0a 6f 6e ing check-out.on
9380: 6c 79 2c 20 72 65 71 75 69 72 69 6e 67 20 61 20 ly, requiring a
9390: 73 65 70 61 72 61 74 65 20 63 68 65 63 6b 2d 69 separate check-i
93a0: 6e 20 73 74 65 70 20 74 6f 20 63 6f 6d 6d 69 74 n step to commit
93b0: 20 74 68 65 20 63 68 61 6e 67 65 2e 20 54 68 69 the change. Thi
93c0: 73 0a 64 65 73 69 67 6e 20 64 69 66 66 65 72 65 s.design differe
93d0: 6e 63 65 20 66 61 6c 6c 73 20 6e 61 74 75 72 61 nce falls natura
93e0: 6c 6c 79 20 6f 75 74 20 6f 66 20 46 6f 73 73 69 lly out of Fossi
93f0: 6c 27 73 20 64 65 66 61 75 6c 74 2d 65 6e 61 62 l's default-enab
9400: 6c 65 64 0a 61 75 74 6f 73 79 6e 63 20 66 65 61 led.autosync fea
9410: 74 75 72 65 20 61 6e 64 20 69 74 73 20 70 68 69 ture and its phi
9420: 6c 6f 73 6f 70 68 79 20 6f 66 20 5b 23 68 69 73 losophy of [#his
9430: 74 6f 72 79 20 7c 20 6e 6f 74 20 6f 66 66 65 72 tory | not offer
9440: 69 6e 67 20 68 69 73 74 6f 72 79 0a 72 65 77 72 ing history.rewr
9450: 69 74 69 6e 67 20 66 65 61 74 75 72 65 73 5d 2e iting features].
9460: 0a 0a 54 68 65 20 70 72 69 6d 65 20 65 78 61 6d ..The prime exam
9470: 70 6c 65 20 69 6e 20 47 69 74 20 69 73 20 72 65 ple in Git is re
9480: 62 61 73 69 6e 67 3a 20 74 68 65 20 63 68 61 6e basing: the chan
9490: 67 65 20 68 61 70 70 65 6e 73 20 74 6f 20 74 68 ge happens to th
94a0: 65 20 6c 6f 63 61 6c 0a 72 65 70 6f 73 69 74 6f e local.reposito
94b0: 72 79 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 69 ry immediately i
94c0: 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 65 76 f successful, ev
94d0: 65 6e 20 74 68 6f 75 67 68 20 79 6f 75 20 68 61 en though you ha
94e0: 76 65 6e 27 74 20 74 65 73 74 65 64 20 74 68 65 ven't tested the
94f0: 0a 63 68 61 6e 67 65 20 79 65 74 2e 20 49 74 27 .change yet. It'
9500: 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 61 72 s possible to ar
9510: 67 75 65 20 66 6f 72 20 73 75 63 68 20 61 20 64 gue for such a d
9520: 65 73 69 67 6e 20 69 6e 20 61 20 74 6f 6f 6c 20 esign in a tool
9530: 6c 69 6b 65 20 47 69 74 0a 73 69 6e 63 65 20 69 like Git.since i
9540: 74 20 6c 61 63 6b 73 20 61 6e 20 61 75 74 6f 73 t lacks an autos
9550: 79 6e 63 20 66 65 61 74 75 72 65 2c 20 62 65 63 ync feature, bec
9560: 61 75 73 65 20 79 6f 75 20 63 61 6e 20 73 74 69 ause you can sti
9570: 6c 6c 20 74 65 73 74 20 74 68 65 0a 63 68 61 6e ll test the.chan
9580: 67 65 20 62 65 66 6f 72 65 20 70 75 73 68 69 6e ge before pushin
9590: 67 20 6c 6f 63 61 6c 20 63 68 61 6e 67 65 73 20 g local changes
95a0: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 72 65 to the parent re
95b0: 70 6f 2c 20 62 75 74 20 69 6e 20 74 68 65 0a 6d po, but in the.m
95c0: 65 61 6e 74 69 6d 65 20 79 6f 75 27 76 65 20 6d eantime you've m
95d0: 61 64 65 20 61 20 64 75 72 61 62 6c 65 20 63 68 ade a durable ch
95e0: 61 6e 67 65 20 74 6f 20 79 6f 75 72 20 6c 6f 63 ange to your loc
95f0: 61 6c 20 47 69 74 20 72 65 70 6f 73 69 74 6f 72 al Git repositor
9600: 79 2e 20 59 6f 75 0a 6d 75 73 74 20 64 6f 20 73 y. You.must do s
9610: 6f 6d 65 74 68 69 6e 67 20 64 72 61 73 74 69 63 omething drastic
9620: 20 6c 69 6b 65 20 3c 74 74 3e 67 69 74 20 72 65 like <tt>git re
9630: 73 65 74 20 2d 2d 68 61 72 64 3c 2f 74 74 3e 20 set --hard</tt>
9640: 74 6f 20 72 65 76 65 72 74 20 74 68 61 74 0a 72 to revert that.r
9650: 65 62 61 73 65 20 6f 72 20 72 65 77 72 69 74 65 ebase or rewrite
9660: 20 68 69 73 74 6f 72 79 20 62 65 66 6f 72 65 20 history before
9670: 70 75 73 68 69 6e 67 20 69 74 20 69 66 20 74 68 pushing it if th
9680: 65 20 72 65 62 61 73 65 20 63 61 75 73 65 73 20 e rebase causes
9690: 61 0a 70 72 6f 62 6c 65 6d 2e 20 49 66 20 79 6f a.problem. If yo
96a0: 75 20 70 75 73 68 20 79 6f 75 72 20 72 65 62 61 u push your reba
96b0: 73 65 64 20 6c 6f 63 61 6c 20 72 65 70 6f 20 75 sed local repo u
96c0: 70 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 p to the parent
96d0: 77 69 74 68 6f 75 74 0a 74 65 73 74 69 6e 67 20 without.testing
96e0: 66 69 72 73 74 2c 20 79 6f 75 20 63 61 6e 6e 6f first, you canno
96f0: 74 20 66 69 78 20 69 74 20 77 69 74 68 6f 75 74 t fix it without
9700: 20 76 69 6f 6c 61 74 69 6e 67 0a 5b 68 74 74 70 violating.[http
9710: 73 3a 2f 2f 77 77 77 2e 61 74 6c 61 73 73 69 61 s://www.atlassia
9720: 6e 2e 63 6f 6d 2f 67 69 74 2f 74 75 74 6f 72 69 n.com/git/tutori
9730: 61 6c 73 2f 6d 65 72 67 69 6e 67 2d 76 73 2d 72 als/merging-vs-r
9740: 65 62 61 73 69 6e 67 23 74 68 65 2d 67 6f 6c 64 ebasing#the-gold
9750: 65 6e 2d 72 75 6c 65 2d 6f 66 2d 72 65 62 61 73 en-rule-of-rebas
9760: 69 6e 67 0a 7c 20 74 68 65 20 67 6f 6c 64 65 6e ing.| the golden
9770: 20 72 75 6c 65 20 6f 66 20 72 65 62 61 73 69 6e rule of rebasin
9780: 67 5d 2e 0a 0a 4c 65 73 73 65 72 20 65 78 61 6d g]...Lesser exam
9790: 70 6c 65 73 20 61 72 65 20 74 68 65 20 47 69 74 ples are the Git
97a0: 20 3c 74 74 3e 6d 65 72 67 65 3c 2f 74 74 3e 2c <tt>merge</tt>,
97b0: 20 3c 74 74 3e 63 68 65 72 72 79 2d 70 69 63 6b <tt>cherry-pick
97c0: 3c 2f 74 74 3e 2c 20 61 6e 64 0a 3c 74 74 3e 72 </tt>, and.<tt>r
97d0: 65 76 65 72 74 3c 2f 74 74 3e 20 63 6f 6d 6d 61 evert</tt> comma
97e0: 6e 64 73 2c 20 61 6c 6c 20 6f 66 20 77 68 69 63 nds, all of whic
97f0: 68 20 61 70 70 6c 79 20 77 6f 72 6b 20 66 72 6f h apply work fro
9800: 6d 20 6f 6e 65 20 62 72 61 6e 63 68 20 6f 6e 74 m one branch ont
9810: 6f 0a 61 6e 6f 74 68 65 72 2c 20 61 6e 64 20 61 o.another, and a
9820: 6c 6c 20 6f 66 20 77 68 69 63 68 20 63 6f 6d 6d ll of which comm
9830: 69 74 20 74 68 65 69 72 20 63 68 61 6e 67 65 20 it their change
9840: 74 6f 20 74 68 65 20 6c 6f 63 61 6c 20 72 65 70 to the local rep
9850: 6f 73 69 74 6f 72 79 0a 69 6d 6d 65 64 69 61 74 ository.immediat
9860: 65 6c 79 20 77 69 74 68 6f 75 74 20 67 69 76 69 ely without givi
9870: 6e 67 20 79 6f 75 0a 61 6e 20 6f 70 70 6f 72 74 ng you.an opport
9880: 75 6e 69 74 79 20 74 6f 20 74 65 73 74 20 74 68 unity to test th
9890: 65 20 63 68 61 6e 67 65 20 66 69 72 73 74 20 75 e change first u
98a0: 6e 6c 65 73 73 20 79 6f 75 20 67 69 76 65 20 74 nless you give t
98b0: 68 65 0a 3c 74 74 3e 2d 2d 6e 6f 2d 63 6f 6d 6d he.<tt>--no-comm
98c0: 69 74 3c 2f 74 74 3e 20 6f 70 74 69 6f 6e 2e 20 it</tt> option.
98d0: 4f 74 68 65 72 77 69 73 65 2c 20 79 6f 75 27 72 Otherwise, you'r
98e0: 65 20 62 61 63 6b 20 69 6e 20 74 68 65 20 73 61 e back in the sa
98f0: 6d 65 20 62 6f 61 74 3a 0a 72 65 73 65 74 20 74 me boat:.reset t
9900: 68 65 20 6c 6f 63 61 6c 20 72 65 70 6f 73 69 74 he local reposit
9910: 6f 72 79 20 6f 72 20 72 65 77 72 69 74 65 20 68 ory or rewrite h
9920: 69 73 74 6f 72 79 20 74 6f 20 66 69 78 20 74 68 istory to fix th
9930: 69 6e 67 73 2c 20 74 68 65 6e 20 6d 61 79 62 65 ings, then maybe
9940: 0a 72 65 74 72 79 2e 0a 0a 46 6f 73 73 69 6c 20 .retry...Fossil
9950: 63 61 6e 6e 6f 74 20 73 65 6e 73 69 62 6c 79 20 cannot sensibly
9960: 77 6f 72 6b 20 74 68 61 74 20 77 61 79 20 62 65 work that way be
9970: 63 61 75 73 65 20 6f 66 20 69 74 73 20 64 65 66 cause of its def
9980: 61 75 6c 74 2d 65 6e 61 62 6c 65 64 0a 61 75 74 ault-enabled.aut
9990: 6f 73 79 6e 63 20 66 65 61 74 75 72 65 20 61 6e osync feature an
99a0: 64 20 69 74 73 20 70 75 72 70 6f 73 65 66 75 6c d its purposeful
99b0: 20 70 61 75 63 69 74 79 20 6f 66 20 63 6f 6d 6d paucity of comm
99c0: 61 6e 64 73 20 66 6f 72 20 6d 6f 64 69 66 79 69 ands for modifyi
99d0: 6e 67 0a 63 6f 6d 6d 69 74 73 2c 20 61 73 20 64 ng.commits, as d
99e0: 69 73 63 75 73 73 65 64 20 69 6e 20 5b 23 68 69 iscussed in [#hi
99f0: 73 74 6f 72 79 20 7c 20 74 68 65 20 70 72 69 6f story | the prio
9a00: 72 20 73 65 63 74 69 6f 6e 5d 2e 0a 0a 49 6e 73 r section]...Ins
9a10: 74 65 61 64 20 6f 66 20 6a 75 6d 70 69 6e 67 20 tead of jumping
9a20: 73 74 72 61 69 67 68 74 20 74 6f 20 74 68 65 20 straight to the
9a30: 63 6f 6d 6d 69 74 20 73 74 65 70 2c 20 46 6f 73 commit step, Fos
9a40: 73 69 6c 0a 61 70 70 6c 69 65 73 20 74 68 65 20 sil.applies the
9a50: 70 72 6f 70 6f 73 65 64 20 6d 65 72 67 65 20 74 proposed merge t
9a60: 6f 20 74 68 65 20 6c 6f 63 61 6c 20 77 6f 72 6b o the local work
9a70: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 6f 6e ing directory on
9a80: 6c 79 2c 0a 72 65 71 75 69 72 69 6e 67 20 61 20 ly,.requiring a
9a90: 73 65 70 61 72 61 74 65 20 63 68 65 63 6b 2d 69 separate check-i
9aa0: 6e 20 73 74 65 70 20 62 65 66 6f 72 65 20 74 68 n step before th
9ab0: 65 20 63 68 61 6e 67 65 20 69 73 20 63 6f 6d 6d e change is comm
9ac0: 69 74 74 65 64 20 74 6f 20 74 68 65 0a 72 65 70 itted to the.rep
9ad0: 6f 73 69 74 6f 72 79 2e 20 54 68 69 73 20 67 69 ository. This gi
9ae0: 76 65 73 20 79 6f 75 20 61 20 63 68 61 6e 63 65 ves you a chance
9af0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 63 68 61 to test the cha
9b00: 6e 67 65 20 66 69 72 73 74 2c 0a 65 69 74 68 65 nge first,.eithe
9b10: 72 20 6d 61 6e 75 61 6c 6c 79 20 6f 72 20 62 79 r manually or by
9b20: 20 72 75 6e 6e 69 6e 67 20 79 6f 75 72 20 73 6f running your so
9b30: 66 74 77 61 72 65 27 73 20 61 75 74 6f 6d 61 74 ftware's automat
9b40: 69 63 20 74 65 73 74 73 2e 20 28 49 64 65 61 6c ic tests. (Ideal
9b50: 6c 79 2c 0a 62 6f 74 68 21 29 20 54 68 75 73 2c ly,.both!) Thus,
9b60: 20 46 6f 73 73 69 6c 20 64 6f 65 73 6e 27 74 20 Fossil doesn't
9b70: 6e 65 65 64 20 72 65 62 61 73 65 2c 20 73 71 75 need rebase, squ
9b80: 61 73 68 69 6e 67 2c 0a 3c 74 74 3e 72 65 73 65 ashing,.<tt>rese
9b90: 74 c2 a0 2d 2d 68 61 72 64 3c 2f 74 74 3e 2c 20 t --hard</tt>,
9ba0: 6f 72 20 6f 74 68 65 72 20 47 69 74 20 63 6f 6d or other Git com
9bb0: 6d 69 74 20 6d 75 74 61 74 69 6e 67 20 6d 65 63 mit mutating mec
9bc0: 68 61 6e 69 73 6d 73 2e 0a 0a 42 65 63 61 75 73 hanisms...Becaus
9bd0: 65 20 46 6f 73 73 69 6c 20 72 65 71 75 69 72 65 e Fossil require
9be0: 73 20 61 6e 20 65 78 70 6c 69 63 69 74 20 63 6f s an explicit co
9bf0: 6d 6d 69 74 20 66 6f 72 20 61 20 6d 65 72 67 65 mmit for a merge
9c00: 2c 20 69 74 20 68 61 73 20 74 68 65 20 6e 69 63 , it has the nic
9c10: 65 0a 73 69 64 65 20 62 65 6e 65 66 69 74 20 74 e.side benefit t
9c20: 68 61 74 20 69 74 20 6d 61 6b 65 73 20 79 6f 75 hat it makes you
9c30: 20 67 69 76 65 20 61 6e 20 65 78 70 6c 69 63 69 give an explici
9c40: 74 20 63 6f 6d 6d 69 74 20 3c 69 3e 6d 65 73 73 t commit <i>mess
9c50: 61 67 65 3c 2f 69 3e 0a 66 6f 72 20 65 61 63 68 age</i>.for each
9c60: 20 6d 65 72 67 65 2c 20 77 68 65 72 65 61 73 20 merge, whereas
9c70: 47 69 74 20 77 72 69 74 65 73 20 74 68 61 74 20 Git writes that
9c80: 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 20 69 commit message i
9c90: 74 73 65 6c 66 20 62 79 20 64 65 66 61 75 6c 74 tself by default
9ca0: 0a 75 6e 6c 65 73 73 20 79 6f 75 20 67 69 76 65 .unless you give
9cb0: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 3c 74 the optional <t
9cc0: 74 3e 2d 2d 65 64 69 74 3c 2f 74 74 3e 20 66 6c t>--edit</tt> fl
9cd0: 61 67 20 74 6f 20 6f 76 65 72 72 69 64 65 20 69 ag to override i
9ce0: 74 2e 0a 0a 57 65 20 64 6f 6e 27 74 20 6c 6f 6f t...We don't loo
9cf0: 6b 20 61 74 20 74 68 69 73 20 64 69 66 66 65 72 k at this differ
9d00: 65 6e 63 65 20 61 73 20 61 20 77 6f 72 6b 61 72 ence as a workar
9d10: 6f 75 6e 64 20 69 6e 20 46 6f 73 73 69 6c 20 66 ound in Fossil f
9d20: 6f 72 20 61 75 74 6f 73 79 6e 63 2c 0a 62 75 74 or autosync,.but
9d30: 20 69 6e 73 74 65 61 64 20 61 73 20 61 20 74 65 instead as a te
9d40: 73 74 2d 66 69 72 73 74 20 70 68 69 6c 6f 73 6f st-first philoso
9d50: 70 68 69 63 61 6c 20 64 69 66 66 65 72 65 6e 63 phical differenc
9d60: 65 3a 0a 3c 74 74 3e 66 6f 73 73 69 6c c2 a0 63 e:.<tt>fossil c
9d70: 6f 6d 6d 69 74 3c 2f 74 74 3e 20 69 73 20 61 20 ommit</tt> is a
9d80: 3c 69 3e 63 6f 6d 6d 69 74 6d 65 6e 74 3c 2f 69 <i>commitment</i
9d90: 3e 2e 20 57 68 65 6e 20 65 76 65 72 79 20 63 6f >. When every co
9da0: 6d 6d 69 74 20 69 73 0a 70 75 73 68 65 64 20 74 mmit is.pushed t
9db0: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 72 65 70 o the parent rep
9dc0: 6f 20 62 79 20 64 65 66 61 75 6c 74 2c 20 69 74 o by default, it
9dd0: 20 65 6e 63 6f 75 72 61 67 65 73 20 61 20 77 6f encourages a wo
9de0: 72 6b 69 6e 67 20 73 74 79 6c 65 20 69 6e 0a 77 rking style in.w
9df0: 68 69 63 68 20 65 76 65 72 79 20 63 6f 6d 6d 69 hich every commi
9e00: 74 20 69 73 20 74 65 73 74 65 64 20 66 69 72 73 t is tested firs
9e10: 74 2e 20 49 74 20 65 6e 63 6f 75 72 61 67 65 73 t. It encourages
9e20: 20 74 68 69 6e 6b 69 6e 67 20 62 65 66 6f 72 65 thinking before
9e30: 0a 61 63 74 69 6e 67 2e 20 57 65 20 62 65 6c 69 .acting. We beli
9e40: 65 76 65 20 74 68 69 73 20 69 73 20 61 6e 20 69 eve this is an i
9e50: 6e 68 65 72 65 6e 74 6c 79 20 67 6f 6f 64 20 74 nherently good t
9e60: 68 69 6e 67 2e 0a 0a 49 6e 63 69 64 65 6e 74 61 hing...Incidenta
9e70: 6c 6c 79 2c 20 74 68 69 73 20 69 73 20 61 20 67 lly, this is a g
9e80: 6f 6f 64 20 65 78 61 6d 70 6c 65 20 6f 66 20 47 ood example of G
9e90: 69 74 27 73 20 6d 65 73 73 79 20 63 6f 6d 6d 61 it's messy comma
9ea0: 6e 64 20 64 65 73 69 67 6e 2e 0a 54 68 65 73 65 nd design..These
9eb0: 20 74 68 72 65 65 20 63 6f 6d 6d 61 6e 64 73 3a three commands:
9ec0: 0a 0a 3c 70 72 65 3e 0a 24 20 67 69 74 20 6d 65 ..<pre>.$ git me
9ed0: 72 67 65 20 48 41 53 48 20 0a 24 20 67 69 74 20 rge HASH .$ git
9ee0: 63 68 65 72 72 79 2d 70 69 63 6b 20 48 41 53 48 cherry-pick HASH
9ef0: 20 0a 24 20 67 69 74 20 72 65 76 65 72 74 20 48 .$ git revert H
9f00: 41 53 48 0a 3c 2f 70 72 65 3e 0a 0a 2e 2e 2e 61 ASH.</pre>.....a
9f10: 72 65 20 61 6c 6c 20 74 68 65 20 73 61 6d 65 20 re all the same
9f20: 63 6f 6d 6d 61 6e 64 20 69 6e 20 46 6f 73 73 69 command in Fossi
9f30: 6c 3a 0a 0a 3c 70 72 65 3e 0a 24 20 66 6f 73 73 l:..<pre>.$ foss
9f40: 69 6c 20 6d 65 72 67 65 20 48 41 53 48 0a 24 20 il merge HASH.$
9f50: 66 6f 73 73 69 6c 20 6d 65 72 67 65 20 2d 2d 63 fossil merge --c
9f60: 68 65 72 72 79 70 69 63 6b 20 48 41 53 48 0a 24 herrypick HASH.$
9f70: 20 66 6f 73 73 69 6c 20 6d 65 72 67 65 20 2d 2d fossil merge --
9f80: 62 61 63 6b 6f 75 74 20 48 41 53 48 0a 3c 2f 70 backout HASH.</p
9f90: 72 65 3e 0a 0a 49 66 20 79 6f 75 20 74 68 69 6e re>..If you thin
9fa0: 6b 20 61 62 6f 75 74 20 69 74 2c 20 74 68 65 79 k about it, they
9fb0: 27 72 65 20 61 6c 6c 20 74 68 65 20 73 61 6d 65 're all the same
9fc0: 20 66 75 6e 63 74 69 6f 6e 3a 20 61 70 70 6c 79 function: apply
9fd0: 20 77 6f 72 6b 20 64 6f 6e 65 20 6f 6e 0a 6f 6e work done on.on
9fe0: 65 20 62 72 61 6e 63 68 20 74 6f 20 61 6e 6f 74 e branch to anot
9ff0: 68 65 72 2e 20 41 6c 6c 20 74 68 61 74 20 63 68 her. All that ch
a000: 61 6e 67 65 73 20 62 65 74 77 65 65 6e 20 74 68 anges between th
a010: 65 73 65 20 63 6f 6d 6d 61 6e 64 73 20 69 73 20 ese commands is
a020: 68 6f 77 0a 6d 75 63 68 20 77 6f 72 6b 20 67 65 how.much work ge
a030: 74 73 20 61 70 70 6c 69 65 64 20 e2 80 94 20 6a ts applied — j
a040: 75 73 74 20 6f 6e 65 20 63 68 65 63 6b 2d 69 6e ust one check-in
a050: 20 6f 72 20 61 20 77 68 6f 6c 65 20 62 72 61 6e or a whole bran
a060: 63 68 20 e2 80 94 20 61 6e 64 20 74 68 65 0a 6d ch — and the.m
a070: 65 72 67 65 20 64 69 72 65 63 74 69 6f 6e 2e 20 erge direction.
a080: 20 54 68 69 73 20 69 73 20 74 68 65 20 73 6f 72 This is the sor
a090: 74 20 6f 66 20 74 68 69 6e 67 20 77 65 20 6d 65 t of thing we me
a0a0: 61 6e 20 77 68 65 6e 20 77 65 20 70 6f 69 6e 74 an when we point
a0b0: 20 6f 75 74 0a 74 68 61 74 20 46 6f 73 73 69 6c out.that Fossil
a0c0: 27 73 20 63 6f 6d 6d 61 6e 64 20 69 6e 74 65 72 's command inter
a0d0: 66 61 63 65 20 69 73 20 73 69 6d 70 6c 65 72 20 face is simpler
a0e0: 74 68 61 6e 20 47 69 74 27 73 3a 20 74 68 65 72 than Git's: ther
a0f0: 65 20 61 72 65 20 66 65 77 65 72 0a 63 6f 6e 63 e are fewer.conc
a100: 65 70 74 73 20 74 6f 20 6b 65 65 70 20 74 72 61 epts to keep tra
a110: 63 6b 20 6f 66 20 69 6e 20 79 6f 75 72 20 6d 65 ck of in your me
a120: 6e 74 61 6c 20 6d 6f 64 65 6c 20 6f 66 20 46 6f ntal model of Fo
a130: 73 73 69 6c 27 73 20 69 6e 74 65 72 6e 61 6c 0a ssil's internal.
a140: 6f 70 65 72 61 74 69 6f 6e 2e 0a 0a 46 6f 73 73 operation...Foss
a150: 69 6c 27 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 il's implementat
a160: 69 6f 6e 20 6f 66 20 74 68 65 20 66 65 61 74 75 ion of the featu
a170: 72 65 20 69 73 20 61 6c 73 6f 20 73 69 6d 70 6c re is also simpl
a180: 65 72 20 74 6f 20 64 65 73 63 72 69 62 65 2e 20 er to describe.
a190: 54 68 65 0a 62 72 69 65 66 20 6f 6e 6c 69 6e 65 The.brief online
a1a0: 20 68 65 6c 70 20 66 6f 72 20 3c 74 74 3e 5b 2f help for <tt>[/
a1b0: 68 65 6c 70 3f 63 6d 64 3d 6d 65 72 67 65 20 7c help?cmd=merge |
a1c0: 20 66 6f 73 73 69 6c 20 6d 65 72 67 65 5d 3c 2f fossil merge]</
a1d0: 74 74 3e 20 69 73 0a 63 75 72 72 65 6e 74 6c 79 tt> is.currently
a1e0: 20 34 31 20 6c 69 6e 65 73 20 6c 6f 6e 67 2c 20 41 lines long,
a1f0: 74 6f 20 77 68 69 63 68 20 79 6f 75 20 77 61 6e to which you wan
a200: 74 20 74 6f 20 61 64 64 20 74 68 65 20 36 30 30 t to add the 600
a210: 20 6c 69 6e 65 73 20 6f 66 0a 5b 2e 2f 62 72 61 lines of.[./bra
a220: 6e 63 68 69 6e 67 2e 77 69 6b 69 20 7c 20 74 68 nching.wiki | th
a230: 65 20 62 72 61 6e 63 68 69 6e 67 20 64 6f 63 75 e branching docu
a240: 6d 65 6e 74 5d 2e 20 54 68 65 20 65 71 75 69 76 ment]. The equiv
a250: 61 6c 65 6e 74 0a 64 6f 63 75 6d 65 6e 74 61 74 alent.documentat
a260: 69 6f 6e 20 69 6e 20 47 69 74 20 69 73 20 74 68 ion in Git is th
a270: 65 20 61 67 67 72 65 67 61 74 69 6f 6e 20 6f 66 e aggregation of
a280: 20 74 68 65 20 6d 61 6e 20 70 61 67 65 73 20 66 the man pages f
a290: 6f 72 20 74 68 65 20 61 62 6f 76 65 0a 74 68 72 or the above.thr
a2a0: 65 65 20 63 6f 6d 6d 61 6e 64 73 2c 20 77 68 69 ee commands, whi
a2b0: 63 68 20 69 73 20 6f 76 65 72 20 31 30 30 30 20 ch is over 1000
a2c0: 6c 69 6e 65 73 2c 20 6d 75 63 68 20 6f 66 20 69 lines, much of i
a2d0: 74 20 6d 75 74 75 61 6c 6c 79 20 72 65 64 75 6e t mutually redun
a2e0: 64 61 6e 74 2e 0a 28 65 2e 67 2e 20 20 47 69 74 dant..(e.g. Git
a2f0: 27 73 20 3c 74 74 3e 2d 2d 65 64 69 74 3c 2f 74 's <tt>--edit</t
a300: 74 3e 20 61 6e 64 20 3c 74 74 3e 2d 2d 6e 6f 2d t> and <tt>--no-
a310: 63 6f 6d 6d 69 74 3c 2f 74 74 3e 20 6f 70 74 69 commit</tt> opti
a320: 6f 6e 73 20 67 65 74 0a 64 65 73 63 72 69 62 65 ons get.describe
a330: 64 20 74 68 72 65 65 20 74 69 6d 65 73 2c 20 65 d three times, e
a340: 61 63 68 20 74 69 6d 65 20 64 69 66 66 65 72 65 ach time differe
a350: 6e 74 6c 79 2e 29 20 46 6f 73 73 69 6c 27 73 0a ntly.) Fossil's.
a360: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 69 73 documentation is
a370: 20 6e 6f 74 20 6f 6e 6c 79 20 6d 6f 72 65 20 63 not only more c
a380: 6f 6e 63 69 73 65 2c 20 69 74 20 67 69 76 65 73 oncise, it gives
a390: 20 61 20 6e 69 63 65 20 73 70 6c 69 74 20 6f 66 a nice split of
a3a0: 20 62 72 69 65 66 0a 6f 6e 6c 69 6e 65 20 68 65 brief.online he
a3b0: 6c 70 20 61 6e 64 20 66 75 6c 6c 20 6f 6e 6c 69 lp and full onli
a3c0: 6e 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e ne documentation
a3d0: 2e 0a 0a 0a 3c 68 33 20 69 64 3d 22 68 61 73 68 ....<h3 id="hash
a3e0: 22 3e 32 2e 39 20 48 61 73 68 20 41 6c 67 6f 72 ">2.9 Hash Algor
a3f0: 69 74 68 6d 3a 20 53 48 41 2d 33 20 76 73 20 53 ithm: SHA-3 vs S
a400: 48 41 2d 32 20 76 73 20 53 48 41 2d 31 3c 2f 68 HA-2 vs SHA-1</h
a410: 33 3e 0a 0a 46 6f 73 73 69 6c 20 73 74 61 72 74 3>..Fossil start
a420: 65 64 20 6f 75 74 20 75 73 69 6e 67 20 31 36 30 ed out using 160
a430: 2d 62 69 74 20 53 48 41 2d 31 20 68 61 73 68 65 -bit SHA-1 hashe
a440: 73 20 74 6f 20 69 64 65 6e 74 69 66 79 20 63 68 s to identify ch
a450: 65 63 6b 2d 69 6e 73 2c 0a 6a 75 73 74 20 61 73 eck-ins,.just as
a460: 20 69 6e 20 47 69 74 2e 20 54 68 61 74 20 63 68 in Git. That ch
a470: 61 6e 67 65 64 20 69 6e 20 65 61 72 6c 79 20 32 anged in early 2
a480: 30 31 37 20 77 68 65 6e 20 6e 65 77 73 20 6f 66 017 when news of
a490: 20 74 68 65 0a 5b 68 74 74 70 73 3a 2f 2f 73 68 the.[https://sh
a4a0: 61 74 74 65 72 65 64 2e 69 6f 2f 7c 53 48 41 74 attered.io/|SHAt
a4b0: 74 65 72 65 64 20 61 74 74 61 63 6b 5d 20 62 72 tered attack] br
a4c0: 6f 6b 65 2c 20 64 65 6d 6f 6e 73 74 72 61 74 69 oke, demonstrati
a4d0: 6e 67 20 74 68 61 74 20 53 48 41 2d 31 0a 63 6f ng that SHA-1.co
a4e0: 6c 6c 69 73 69 6f 6e 73 20 77 65 72 65 20 6e 6f llisions were no
a4f0: 77 20 70 72 61 63 74 69 63 61 6c 20 74 6f 20 63 w practical to c
a500: 72 65 61 74 65 2e 20 54 77 6f 20 77 65 65 6b 73 reate. Two weeks
a510: 20 6c 61 74 65 72 2c 20 74 68 65 20 63 72 65 61 later, the crea
a520: 74 6f 72 20 6f 66 0a 46 6f 73 73 69 6c 20 64 65 tor of.Fossil de
a530: 6c 69 76 65 72 65 64 20 61 20 6e 65 77 20 72 65 livered a new re
a540: 6c 65 61 73 65 20 61 6c 6c 6f 77 69 6e 67 20 61 lease allowing a
a550: 20 63 6c 65 61 6e 20 6d 69 67 72 61 74 69 6f 6e clean migration
a560: 20 74 6f 0a 5b 68 74 74 70 73 3a 2f 2f 65 6e 2e to.[https://en.
a570: 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 wikipedia.org/wi
a580: 6b 69 2f 53 48 41 2d 33 7c 32 35 36 2d 62 69 74 ki/SHA-3|256-bit
a590: 20 53 48 41 2d 33 5d 20 77 69 74 68 0a 5b 2e 2f SHA-3] with.[./
a5a0: 68 61 73 68 70 6f 6c 69 63 79 2e 77 69 6b 69 7c hashpolicy.wiki|
a5b0: 66 75 6c 6c 20 62 61 63 6b 77 61 72 64 73 20 63 full backwards c
a5c0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 5d 20 74 6f ompatibility] to
a5d0: 20 6f 6c 64 20 53 48 41 2d 31 20 62 61 73 65 64 old SHA-1 based
a5e0: 0a 72 65 70 6f 73 69 74 6f 72 69 65 73 2e 0a 0a .repositories...
a5f0: 49 6e 20 4f 63 74 6f 62 65 72 20 32 30 31 39 2c In October 2019,
a600: 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 after the last
a610: 6f 66 20 74 68 65 20 6d 61 6a 6f 72 20 62 69 6e of the major bin
a620: 61 72 79 0a 70 61 63 6b 61 67 65 20 72 65 70 6f ary.package repo
a630: 73 20 6f 66 66 65 72 69 6e 67 20 46 6f 73 73 69 s offering Fossi
a640: 6c 20 75 70 67 72 61 64 65 64 20 74 6f 20 46 6f l upgraded to Fo
a650: 73 73 69 6c 20 32 2e 3c 69 3e 78 3c 2f 69 3e 2c ssil 2.<i>x</i>,
a660: 0a 77 65 20 73 77 69 74 63 68 65 64 20 74 68 65 .we switched the
a670: 20 64 65 66 61 75 6c 74 20 68 61 73 68 20 6d 6f default hash mo
a680: 64 65 20 73 6f 20 74 68 61 74 0a 74 68 65 20 63 de so that.the c
a690: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 53 48 41 onversion to SHA
a6a0: 2d 33 20 69 73 20 66 75 6c 6c 79 20 61 75 74 6f -3 is fully auto
a6b0: 6d 61 74 69 63 2e 0a 54 68 69 73 20 6e 6f 74 0a matic..This not.
a6c0: 6f 6e 6c 79 20 73 6f 6c 76 65 73 20 74 68 65 20 only solves the
a6d0: 53 48 41 74 74 65 72 65 64 20 70 72 6f 62 6c 65 SHAttered proble
a6e0: 6d 2c 20 69 74 20 73 68 6f 75 6c 64 20 70 72 65 m, it should pre
a6f0: 76 65 6e 74 20 61 20 72 65 6f 63 63 75 72 72 65 vent a reoccurre
a700: 6e 63 65 20 6f 66 0a 73 69 6d 69 6c 61 72 20 70 nce of.similar p
a710: 72 6f 62 6c 65 6d 73 20 66 6f 72 20 74 68 65 20 roblems for the
a720: 66 6f 72 65 73 65 65 61 62 6c 65 20 66 75 74 75 foreseeable futu
a730: 72 65 2e 0a 0a 4d 65 61 6e 77 68 69 6c 65 2c 20 re...Meanwhile,
a740: 74 68 65 20 47 69 74 20 63 6f 6d 6d 75 6e 69 74 the Git communit
a750: 79 20 74 6f 6f 6b 20 75 6e 74 69 6c 20 41 75 67 y took until Aug
a760: 75 73 74 20 32 30 31 38 20 74 6f 20 70 75 62 6c ust 2018 to publ
a770: 69 73 68 0a 5b 68 74 74 70 73 3a 2f 2f 67 69 74 ish.[https://git
a780: 2d 73 63 6d 2e 63 6f 6d 2f 64 6f 63 73 2f 68 61 -scm.com/docs/ha
a790: 73 68 2d 66 75 6e 63 74 69 6f 6e 2d 74 72 61 6e sh-function-tran
a7a0: 73 69 74 69 6f 6e 2f 7c 74 68 65 69 72 20 66 69 sition/|their fi
a7b0: 72 73 74 20 70 6c 61 6e 5d 0a 66 6f 72 20 73 6f rst plan].for so
a7c0: 6c 76 69 6e 67 20 74 68 65 20 73 61 6d 65 20 70 lving the same p
a7d0: 72 6f 62 6c 65 6d 20 62 79 20 6d 6f 76 69 6e 67 roblem by moving
a7e0: 20 74 6f 20 53 48 41 2d 32 35 36 2c 20 61 20 76 to SHA-256, a v
a7f0: 61 72 69 61 6e 74 20 6f 66 20 74 68 65 0a 5b 68 ariant of the.[h
a800: 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 ttps://en.wikipe
a810: 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 53 48 41 dia.org/wiki/SHA
a820: 2d 32 20 7c 20 6f 6c 64 65 72 20 53 48 41 2d 32 -2 | older SHA-2
a830: 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20 20 41 73 algorithm]. As
a840: 20 6f 66 0a 74 68 69 73 20 77 72 69 74 69 6e 67 of.this writing
a850: 20 69 6e 20 46 65 62 72 75 61 72 79 20 32 30 32 in February 202
a860: 30 2c 20 74 68 61 74 20 70 6c 61 6e 20 68 61 73 0, that plan has
a870: 6e 27 74 20 62 65 65 6e 20 69 6d 70 6c 65 6d 65 n't been impleme
a880: 6e 74 65 64 2c 20 61 73 20 66 61 72 0a 61 73 20 nted, as far.as
a890: 74 68 69 73 20 61 75 74 68 6f 72 20 69 73 20 61 this author is a
a8a0: 77 61 72 65 2c 20 62 75 74 20 74 68 65 72 65 20 ware, but there
a8b0: 69 73 20 6e 6f 77 0a 5b 68 74 74 70 73 3a 2f 2f is now.[https://
a8c0: 6c 77 6e 2e 6e 65 74 2f 6d 6c 2f 67 69 74 2f 32 lwn.net/ml/git/2
a8d0: 30 32 30 30 31 31 33 31 32 34 37 32 39 2e 33 36 0200113124729.36
a8e0: 38 34 38 34 36 2d 31 2d 73 61 6e 64 61 6c 73 40 84846-1-sandals@
a8f0: 63 72 75 73 74 79 74 6f 6f 74 68 70 61 73 74 65 crustytoothpaste
a900: 2e 6e 65 74 2f 0a 7c 20 61 20 63 6f 6d 70 65 74 .net/.| a compet
a910: 69 6e 67 20 53 48 41 2d 32 35 36 20 62 61 73 65 ing SHA-256 base
a920: 64 20 70 6c 61 6e 5d 20 77 68 69 63 68 20 72 65 d plan] which re
a930: 71 75 69 72 65 73 20 63 6f 6d 70 6c 65 74 65 20 quires complete
a940: 72 65 70 6f 73 69 74 6f 72 79 0a 63 6f 6e 76 65 repository.conve
a950: 72 73 69 6f 6e 20 66 72 6f 6d 20 53 48 41 2d 31 rsion from SHA-1
a960: 20 74 6f 20 53 48 41 2d 32 35 36 2c 20 62 72 65 to SHA-256, bre
a970: 61 6b 69 6e 67 20 61 6c 6c 20 70 75 62 6c 69 63 aking all public
a980: 20 68 61 73 68 65 73 20 69 6e 20 74 68 65 0a 72 hashes in the.r
a990: 65 70 6f 2e 20 4f 6e 65 20 77 61 79 20 74 6f 20 epo. One way to
a9a0: 63 68 61 72 61 63 74 65 72 69 7a 65 20 73 75 63 characterize suc
a9b0: 68 20 61 20 6d 61 73 73 69 76 65 20 75 70 68 65 h a massive uphe
a9c0: 61 76 61 6c 20 69 6e 20 47 69 74 20 74 65 72 6d aval in Git term
a9d0: 73 20 69 73 20 61 0a 77 68 6f 6c 65 2d 70 72 6f s is a.whole-pro
a9e0: 6a 65 63 74 20 72 65 62 61 73 65 2c 20 77 68 69 ject rebase, whi
a9f0: 63 68 20 76 69 6f 6c 61 74 65 73 20 74 68 65 0a ch violates the.
aa00: 5b 68 74 74 70 73 3a 2f 2f 77 77 77 2e 61 74 6c [https://www.atl
aa10: 61 73 73 69 61 6e 2e 63 6f 6d 2f 67 69 74 2f 74 assian.com/git/t
aa20: 75 74 6f 72 69 61 6c 73 2f 6d 65 72 67 69 6e 67 utorials/merging
aa30: 2d 76 73 2d 72 65 62 61 73 69 6e 67 23 74 68 65 -vs-rebasing#the
aa40: 2d 67 6f 6c 64 65 6e 2d 72 75 6c 65 2d 6f 66 2d -golden-rule-of-
aa50: 72 65 62 61 73 69 6e 67 7c 47 6f 6c 64 65 6e 20 rebasing|Golden
aa60: 52 75 6c 65 20 6f 66 20 52 65 62 61 73 69 6e 67 Rule of Rebasing
aa70: 5d 2e 0a 0a 52 65 67 61 72 64 6c 65 73 73 20 6f ]...Regardless o
aa80: 66 20 74 68 65 20 65 76 65 6e 74 75 61 6c 20 69 f the eventual i
aa90: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 mplementation de
aaa0: 74 61 69 6c 73 2c 20 77 65 20 66 75 6c 6c 79 20 tails, we fully
aab0: 65 78 70 65 63 74 20 47 69 74 0a 74 6f 20 6d 6f expect Git.to mo
aac0: 76 65 20 6f 66 66 20 53 48 41 2d 31 20 65 76 65 ve off SHA-1 eve
aad0: 6e 74 75 61 6c 6c 79 20 61 6e 64 20 66 6f 72 20 ntually and for
aae0: 74 68 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 the changes to t
aaf0: 61 6b 65 20 79 65 61 72 73 20 6d 6f 72 65 20 74 ake years more t
ab00: 6f 0a 70 65 72 63 6f 6c 61 74 65 20 74 68 72 6f o.percolate thro
ab10: 75 67 68 20 74 68 65 20 63 6f 6d 6d 75 6e 69 74 ugh the communit
ab20: 79 2e 0a 0a 41 6c 6d 6f 73 74 20 74 68 72 65 65 y...Almost three
ab30: 20 79 65 61 72 73 20 61 66 74 65 72 20 46 6f 73 years after Fos
ab40: 73 69 6c 20 73 6f 6c 76 65 64 20 74 68 69 73 20 sil solved this
ab50: 70 72 6f 62 6c 65 6d 2c 20 74 68 65 0a 5b 68 74 problem, the.[ht
ab60: 74 70 73 3a 2f 2f 73 68 61 2d 6d 62 6c 65 73 2e tps://sha-mbles.
ab70: 67 69 74 68 75 62 2e 69 6f 2f 20 7c 20 53 48 41 github.io/ | SHA
ab80: 6d 62 6c 65 73 20 61 74 74 61 63 6b 5d 20 77 61 mbles attack] wa
ab90: 73 20 70 75 62 6c 69 73 68 65 64 2c 20 66 75 72 s published, fur
aba0: 74 68 65 72 0a 77 65 61 6b 65 6e 69 6e 67 20 74 ther.weakening t
abb0: 68 65 20 63 61 73 65 20 66 6f 72 20 63 6f 6e 74 he case for cont
abc0: 69 6e 75 69 6e 67 20 74 6f 20 75 73 65 20 53 48 inuing to use SH
abd0: 41 2d 31 2e 0a 0a 54 68 65 20 70 72 61 63 74 69 A-1...The practi
abe0: 63 61 6c 20 69 6d 70 61 63 74 20 6f 66 20 61 74 cal impact of at
abf0: 74 61 63 6b 73 20 6c 69 6b 65 20 53 48 41 74 74 tacks like SHAtt
ac00: 65 72 65 64 20 61 6e 64 20 53 48 41 6d 62 6c 65 ered and SHAmble
ac10: 73 20 6f 6e 20 74 68 65 0a 47 69 74 20 61 6e 64 s on the.Git and
ac20: 20 46 6f 73 73 69 6c 20 4d 65 72 6b 6c 65 20 74 Fossil Merkle t
ac30: 72 65 65 73 20 69 73 6e 27 74 20 63 6c 65 61 72 rees isn't clear
ac40: 2c 20 62 75 74 20 79 6f 75 20 77 61 6e 74 20 74 , but you want t
ac50: 6f 20 68 61 76 65 20 79 6f 75 72 20 72 65 70 6f o have your repo
ac60: 73 69 74 6f 72 69 65 73 0a 6d 6f 76 65 64 20 6f sitories.moved o
ac70: 76 65 72 20 74 6f 20 61 20 73 74 72 6f 6e 67 65 ver to a stronge
ac80: 72 20 68 61 73 68 20 61 6c 67 6f 72 69 74 68 6d r hash algorithm
ac90: 20 62 65 66 6f 72 65 20 73 6f 6d 65 6f 6e 65 20 before someone
aca0: 66 69 67 75 72 65 73 20 6f 75 74 20 68 6f 77 0a figures out how.
acb0: 74 6f 20 6d 61 6b 65 20 75 73 65 20 6f 66 20 74 to make use of t
acc0: 68 65 20 77 65 61 6b 6e 65 73 73 65 73 20 69 6e he weaknesses in
acd0: 20 74 68 65 20 6f 6c 64 20 6f 6e 65 2e 20 46 6f the old one. Fo
ace0: 73 73 69 6c 20 68 61 73 20 68 61 64 20 74 68 69 ssil has had thi
acf0: 73 20 63 6f 76 65 72 65 64 0a 66 6f 72 20 79 65 s covered.for ye
ad00: 61 72 73 20 6e 6f 77 2c 20 73 6f 20 74 68 61 74 ars now, so that
ad10: 20 74 68 65 20 73 6f 6c 75 74 69 6f 6e 20 69 73 the solution is
ad20: 20 6e 6f 77 20 61 6c 6d 6f 73 74 20 75 6e 69 76 now almost univ
ad30: 65 72 73 61 6c 6c 79 20 64 65 70 6c 6f 79 65 64 ersally deployed
ad40: 2e 0a 0a 3c 68 72 2f 3e 0a 0a 3c 68 33 3e 41 73 ...<hr/>..<h3>As
ad50: 69 64 65 73 20 61 6e 64 20 44 69 67 72 65 73 73 ides and Digress
ad60: 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 69 3e 3c 73 ions</h3>..<i><s
ad70: 6d 61 6c 6c 3e 3c 6f 6c 3e 0a 20 20 20 20 3c 6c mall><ol>. <l
ad80: 69 3e 3c 70 3e 5b 2e 2f 6d 69 72 72 6f 72 6c 69 i><p>[./mirrorli
ad90: 6d 69 74 61 74 69 6f 6e 73 2e 6d 64 7c 4d 61 6e mitations.md|Man
ada0: 79 0a 20 20 20 20 74 68 69 6e 67 73 20 61 72 65 y. things are
adb0: 20 6c 6f 73 74 5d 20 69 6e 20 6d 61 6b 69 6e 67 lost] in making
adc0: 20 61 20 47 69 74 20 6d 69 72 72 6f 72 20 6f 66 a Git mirror of
add0: 20 61 20 46 6f 73 73 69 6c 20 72 65 70 6f 20 64 a Fossil repo d
ade0: 75 65 20 74 6f 0a 20 20 20 20 6c 69 6d 69 74 61 ue to. limita
adf0: 74 69 6f 6e 73 20 6f 66 20 47 69 74 20 72 65 6c tions of Git rel
ae00: 61 74 69 76 65 20 74 6f 20 46 6f 73 73 69 6c 2e ative to Fossil.
ae10: 20 47 69 74 48 75 62 20 61 64 64 73 20 73 6f 6d GitHub adds som
ae20: 65 20 6f 66 20 74 68 65 73 65 0a 20 20 20 20 6d e of these. m
ae30: 69 73 73 69 6e 67 20 66 65 61 74 75 72 65 73 20 issing features
ae40: 74 6f 20 73 74 6f 63 6b 0a 20 20 20 20 47 69 74 to stock. Git
ae50: 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 74 68 , but because th
ae60: 65 79 27 72 65 20 6e 6f 74 20 70 61 72 74 20 6f ey're not part o
ae70: 66 20 47 69 74 20 70 72 6f 70 65 72 2c 0a 20 20 f Git proper,.
ae80: 20 20 5b 2e 2f 6d 69 72 72 6f 72 74 6f 67 69 74 [./mirrortogit
ae90: 68 75 62 2e 6d 64 7c 65 78 70 6f 72 74 69 6e 67 hub.md|exporting
aea0: 20 61 20 46 6f 73 73 69 6c 20 72 65 70 6f 73 69 a Fossil reposi
aeb0: 74 6f 72 79 20 74 6f 20 47 69 74 48 75 62 5d 20 tory to GitHub]
aec0: 77 69 6c 6c 0a 20 20 20 20 73 74 69 6c 6c 20 6e will. still n
aed0: 6f 74 20 69 6e 63 6c 75 64 65 20 74 68 65 6d 3b ot include them;
aee0: 20 46 6f 73 73 69 6c 20 74 69 63 6b 65 74 73 20 Fossil tickets
aef0: 64 6f 20 6e 6f 74 20 62 65 63 6f 6d 65 20 47 69 do not become Gi
af00: 74 48 75 62 20 69 73 73 75 65 73 2c 0a 20 20 20 tHub issues,.
af10: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e 0a 0a 20 for example...
af20: 20 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 3c 74 <li><p>The <t
af30: 74 3e 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 t>fossil-scm.org
af40: 3c 2f 74 74 3e 20 77 65 62 20 73 69 74 65 20 69 </tt> web site i
af50: 73 20 61 63 74 75 61 6c 6c 79 20 68 6f 73 74 65 s actually hoste
af60: 64 20 69 6e 0a 20 20 20 20 73 65 76 65 72 61 6c d in. several
af70: 20 70 61 72 74 73 2c 20 73 6f 20 74 68 61 74 20 parts, so that
af80: 69 74 20 69 73 20 6e 6f 74 20 73 74 72 69 63 74 it is not strict
af90: 6c 79 20 74 72 75 65 20 74 68 61 74 20 22 65 76 ly true that "ev
afa0: 65 72 79 74 68 69 6e 67 22 20 6f 6e 0a 20 20 20 erything" on.
afb0: 20 69 74 20 69 73 20 69 6e 20 74 68 65 20 73 65 it is in the se
afc0: 6c 66 2d 68 6f 73 74 69 6e 67 20 46 6f 73 73 69 lf-hosting Fossi
afd0: 6c 20 70 72 6f 6a 65 63 74 20 72 65 70 6f 2e 20 l project repo.
afe0: 54 68 65 20 77 65 62 20 66 6f 72 75 6d 20 69 73 The web forum is
aff0: 0a 20 20 20 20 68 6f 73 74 65 64 20 61 73 20 5b . hosted as [
b000: 68 74 74 70 73 3a 2f 2f 66 6f 73 73 69 6c 2d 73 https://fossil-s
b010: 63 6d 2e 6f 72 67 2f 66 6f 72 75 6d 2f 7c 61 20 cm.org/forum/|a
b020: 73 65 70 61 72 61 74 65 20 46 6f 73 73 69 6c 20 separate Fossil
b030: 72 65 70 6f 5d 0a 20 20 20 20 66 72 6f 6d 20 74 repo]. from t
b040: 68 65 20 5b 68 74 74 70 73 3a 2f 2f 66 6f 73 73 he [https://foss
b050: 69 6c 2d 73 63 6d 2e 6f 72 67 2f 68 6f 6d 65 2f il-scm.org/home/
b060: 7c 6d 61 69 6e 20 46 6f 73 73 69 6c 20 73 65 6c |main Fossil sel
b070: 66 2d 68 6f 73 74 69 6e 67 0a 20 20 20 20 72 65 f-hosting. re
b080: 70 6f 5d 20 66 6f 72 20 61 64 6d 69 6e 69 73 74 po] for administ
b090: 72 61 74 69 6f 6e 20 72 65 61 73 6f 6e 73 2c 20 ration reasons,
b0a0: 61 6e 64 20 74 68 65 20 44 6f 77 6e 6c 6f 61 64 and the Download
b0b0: 20 70 61 67 65 20 63 6f 6e 74 65 6e 74 0a 20 20 page content.
b0c0: 20 20 69 73 6e 27 74 20 6e 6f 72 6d 61 6c 6c 79 isn't normally
b0d0: 20 73 79 6e 63 68 72 6f 6e 69 7a 65 64 20 77 69 synchronized wi
b0e0: 74 68 20 61 20 22 3c 74 74 3e 66 6f 73 73 69 6c th a "<tt>fossil
b0f0: 20 63 6c 6f 6e 65 3c 2f 74 74 3e 22 20 63 6f 6d clone</tt>" com
b100: 6d 61 6e 64 20 75 6e 6c 65 73 73 0a 20 20 20 20 mand unless.
b110: 79 6f 75 20 61 64 64 20 74 68 65 20 22 2d 75 22 you add the "-u"
b120: 20 6f 70 74 69 6f 6e 2e 20 20 28 53 65 65 20 22 option. (See "
b130: 5b 2e 2f 61 62 6f 75 74 64 6f 77 6e 6c 6f 61 64 [./aboutdownload
b140: 2e 77 69 6b 69 7c 48 6f 77 20 74 68 65 0a 20 20 .wiki|How the.
b150: 20 20 44 6f 77 6e 6c 6f 61 64 20 50 61 67 65 20 Download Page
b160: 57 6f 72 6b 73 5d 22 20 66 6f 72 20 64 65 74 61 Works]" for deta
b170: 69 6c 73 2e 29 0a 20 20 20 20 43 68 61 74 20 68 ils.). Chat h
b180: 69 73 74 6f 72 79 20 69 73 20 64 65 6c 69 62 65 istory is delibe
b190: 72 61 74 65 6c 79 20 6e 6f 74 20 73 79 6e 63 65 rately not synce
b1a0: 64 20 61 73 0a 20 20 20 20 63 68 61 74 20 6d 65 d as. chat me
b1b0: 73 73 61 67 65 73 20 61 72 65 20 69 6e 74 65 6e ssages are inten
b1c0: 64 65 64 20 74 6f 20 62 65 20 65 70 68 65 6d 65 ded to be epheme
b1d0: 72 61 6c 2e 0a 20 20 20 20 54 68 65 72 65 20 6d ral.. There m
b1e0: 61 79 20 61 6c 73 6f 20 62 65 20 73 6f 6d 65 20 ay also be some
b1f0: 70 75 72 65 6c 79 0a 20 20 20 20 73 74 61 74 69 purely. stati
b200: 63 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68 c elements of th
b210: 65 20 77 65 62 20 73 69 74 65 20 73 65 72 76 65 e web site serve
b220: 64 20 76 69 61 20 44 2e 20 52 69 63 68 61 72 64 d via D. Richard
b230: 20 48 69 70 70 27 73 20 6f 77 6e 0a 20 20 20 20 Hipp's own.
b240: 6c 69 67 68 74 77 65 69 67 68 74 20 77 65 62 20 lightweight web
b250: 73 65 72 76 65 72 2c 0a 20 20 20 20 3c 74 74 3e server,. <tt>
b260: 5b 68 74 74 70 73 3a 2f 2f 73 71 6c 69 74 65 2e [https://sqlite.
b270: 6f 72 67 2f 61 6c 74 68 74 74 70 64 2f 7c 61 6c org/althttpd/|al
b280: 74 68 74 74 70 64 5d 3c 2f 74 74 3e 2c 0a 20 20 thttpd]</tt>,.
b290: 20 20 77 68 69 63 68 20 69 73 20 63 6f 6e 66 69 which is confi
b2a0: 67 75 72 65 64 20 61 73 20 61 20 66 72 6f 6e 74 gured as a front
b2b0: 20 65 6e 64 20 74 6f 20 46 6f 73 73 69 6c 20 72 end to Fossil r
b2c0: 75 6e 6e 69 6e 67 20 69 6e 20 43 47 49 20 6d 6f unning in CGI mo
b2d0: 64 65 20 6f 6e 0a 20 20 20 20 74 68 65 73 65 20 de on. these
b2e0: 73 69 74 65 73 2e 0a 0a 20 20 20 20 3c 6c 69 3e sites... <li>
b2f0: 3c 70 3e 54 68 61 74 20 65 73 74 69 6d 61 74 65 <p>That estimate
b300: 20 69 73 20 62 61 73 65 64 20 6f 6e 20 70 72 69 is based on pri
b310: 63 69 6e 67 20 61 74 20 44 69 67 69 74 61 6c 20 cing at Digital
b320: 4f 63 65 61 6e 20 69 6e 0a 20 20 20 20 6d 69 64 Ocean in. mid
b330: 2d 32 30 31 39 3a 20 46 6f 73 73 69 6c 20 77 69 -2019: Fossil wi
b340: 6c 6c 20 72 75 6e 20 6a 75 73 74 20 66 69 6e 65 ll run just fine
b350: 20 6f 6e 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 on the smallest
b360: 20 69 6e 73 74 61 6e 63 65 20 74 68 65 79 0a 20 instance they.
b370: 20 20 20 6f 66 66 65 72 2c 20 61 74 20 55 53 20 offer, at US
b380: 24 35 2f 6d 6f 6e 74 68 2c 20 62 75 74 20 74 68 $5/month, but th
b390: 65 20 63 6c 6f 73 65 73 74 20 6d 61 74 63 68 20 e closest match
b3a0: 74 6f 20 47 69 74 4c 61 62 27 73 20 6d 69 6e 69 to GitLab's mini
b3b0: 6d 75 6d 0a 20 20 20 20 72 65 71 75 69 72 65 6d mum. requirem
b3c0: 65 6e 74 73 20 61 6d 6f 6e 67 20 44 69 67 69 74 ents among Digit
b3d0: 61 6c 20 4f 63 65 61 6e 27 73 20 6f 66 66 65 72 al Ocean's offer
b3e0: 69 6e 67 73 20 63 75 72 72 65 6e 74 6c 79 20 63 ings currently c
b3f0: 6f 73 74 73 0a 20 20 20 20 24 34 30 2f 6d 6f 6e osts. $40/mon
b400: 74 68 2e 0a 0a 20 20 20 20 3c 6c 69 3e 3c 70 3e th... <li><p>
b410: 54 68 69 73 20 6d 65 61 6e 73 20 79 6f 75 20 63 This means you c
b420: 61 6e 20 67 69 76 65 20 75 70 20 77 61 69 74 69 an give up waiti
b430: 6e 67 20 66 6f 72 20 46 6f 73 73 69 6c 20 74 6f ng for Fossil to
b440: 20 62 65 20 70 6f 72 74 65 64 20 74 6f 0a 20 20 be ported to.
b450: 20 20 74 68 65 20 50 44 50 2d 31 31 2c 20 62 75 the PDP-11, bu
b460: 74 20 77 65 20 72 65 6d 61 69 6e 20 68 6f 70 65 t we remain hope
b470: 66 75 6c 20 74 68 61 74 20 73 6f 6d 65 6f 6e 65 ful that someone
b480: 20 6d 61 79 20 65 76 65 6e 74 75 61 6c 6c 79 20 may eventually
b490: 70 6f 72 74 0a 20 20 20 20 69 74 20 74 6f 20 5b port. it to [
b4a0: 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 https://en.wikip
b4b0: 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 5a 2f edia.org/wiki/Z/
b4c0: 4f 53 7c 7a 2f 4f 53 5d 2e 0a 0a 20 20 20 20 3c OS|z/OS]... <
b4d0: 6c 69 3e 3c 70 3e 22 57 68 79 20 69 73 20 74 68 li><p>"Why is th
b4e0: 65 72 65 20 61 6c 6c 20 74 68 69 73 20 54 63 6c ere all this Tcl
b4f0: 20 69 6e 20 61 6e 64 20 61 72 6f 75 6e 64 20 46 in and around F
b500: 6f 73 73 69 6c 3f 22 20 79 6f 75 20 6d 61 79 0a ossil?" you may.
b510: 20 20 20 20 61 73 6b 2e 20 49 74 20 69 73 20 62 ask. It is b
b520: 65 63 61 75 73 65 20 44 2e 20 52 69 63 68 61 72 ecause D. Richar
b530: 64 20 48 69 70 70 20 69 73 20 61 20 6c 6f 6e 67 d Hipp is a long
b540: 2d 74 69 6d 65 20 54 63 6c 20 75 73 65 72 20 61 -time Tcl user a
b550: 6e 64 0a 20 20 20 20 63 6f 6e 74 72 69 62 75 74 nd. contribut
b560: 6f 72 2e 20 53 51 4c 69 74 65 20 73 74 61 72 74 or. SQLite start
b570: 65 64 20 6f 75 74 20 61 73 20 61 6e 20 65 6d 62 ed out as an emb
b580: 65 64 64 65 64 20 64 61 74 61 62 61 73 65 20 66 edded database f
b590: 6f 72 20 54 63 6c 0a 20 20 20 20 73 70 65 63 69 or Tcl. speci
b5a0: 66 69 63 61 6c 6c 79 2e 20 28 5b 68 74 74 70 73 fically. ([https
b5b0: 3a 2f 2f 73 71 6c 69 74 65 2e 6f 72 67 2f 74 63 ://sqlite.org/tc
b5c0: 6c 73 71 6c 69 74 65 2e 68 74 6d 6c 20 7c 20 5b lsqlite.html | [
b5d0: 52 65 66 65 72 65 6e 63 65 5d 5d 29 0a 20 20 20 Reference]]).
b5e0: 20 57 68 65 6e 20 68 65 20 74 68 65 6e 20 63 72 When he then cr
b5f0: 65 61 74 65 64 20 46 6f 73 73 69 6c 20 74 6f 20 eated Fossil to
b600: 6d 61 6e 61 67 65 20 74 68 65 20 64 65 76 65 6c manage the devel
b610: 6f 70 6d 65 6e 74 20 6f 66 20 53 51 4c 69 74 65 opment of SQLite
b620: 2c 20 69 74 0a 20 20 20 20 77 61 73 20 6e 61 74 , it. was nat
b630: 75 72 61 6c 20 66 6f 72 20 68 69 6d 20 74 6f 20 ural for him to
b640: 75 73 65 20 54 63 6c 2d 62 61 73 65 64 20 74 6f use Tcl-based to
b650: 6f 6c 73 20 66 6f 72 20 69 74 73 20 73 63 72 69 ols for its scri
b660: 70 74 69 6e 67 2c 20 62 75 69 6c 64 0a 20 20 20 pting, build.
b670: 20 73 79 73 74 65 6d 2c 20 74 65 73 74 20 73 79 system, test sy
b680: 73 74 65 6d 2c 20 65 74 63 2e 20 49 74 20 63 61 stem, etc. It ca
b690: 6d 65 20 66 75 6c 6c 20 63 69 72 63 6c 65 20 69 me full circle i
b6a0: 6e 20 32 30 31 31 20 77 68 65 6e 0a 20 20 20 20 n 2011 when.
b6b0: 5b 68 74 74 70 73 3a 2f 2f 77 77 77 2e 72 65 64 [https://www.red
b6c0: 64 69 74 2e 63 6f 6d 2f 72 2f 70 72 6f 67 72 61 dit.com/r/progra
b6d0: 6d 6d 69 6e 67 2f 63 6f 6d 6d 65 6e 74 73 2f 66 mming/comments/f
b6e0: 77 72 78 35 2f 74 63 6c 5f 61 6e 64 5f 74 6b 5f wrx5/tcl_and_tk_
b6f0: 6d 6f 76 65 5f 61 77 61 79 5f 66 72 6f 6d 5f 63 move_away_from_c
b700: 76 73 5f 74 6f 5f 66 6f 73 73 69 6c 2f 0a 20 20 vs_to_fossil/.
b710: 20 20 7c 20 74 68 65 20 54 63 6c 20 61 6e 64 20 | the Tcl and
b720: 54 6b 20 70 72 6f 6a 65 63 74 73 20 6d 6f 76 65 Tk projects move
b730: 64 20 66 72 6f 6d 20 43 56 53 20 74 6f 20 46 6f d from CVS to Fo
b740: 73 73 69 6c 5d 2e 0a 0a 20 20 20 20 3c 6c 69 3e ssil]... <li>
b750: 3c 70 3e 41 20 6d 69 6e 6f 72 69 74 79 20 6f 66 <p>A minority of
b760: 20 74 68 65 20 70 69 65 63 65 73 20 6f 66 20 74 the pieces of t
b770: 68 65 20 47 69 74 20 63 6f 72 65 20 73 6f 66 74 he Git core soft
b780: 77 61 72 65 20 73 75 69 74 65 20 61 72 65 0a 20 ware suite are.
b790: 20 20 20 77 72 69 74 74 65 6e 20 69 6e 20 6f 74 written in ot
b7a0: 68 65 72 20 6c 61 6e 67 75 61 67 65 73 2c 20 70 her languages, p
b7b0: 72 69 6d 61 72 69 6c 79 20 50 65 72 6c 2c 20 50 rimarily Perl, P
b7c0: 79 74 68 6f 6e 2c 20 61 6e 64 20 54 63 6c 2e 20 ython, and Tcl.
b7d0: 28 65 2e 67 2e 0a 20 20 20 20 3c 74 74 3e 67 69 (e.g.. <tt>gi
b7e0: 74 2d 73 65 6e 64 2d 6d 61 69 6c 3c 2f 74 74 3e t-send-mail</tt>
b7f0: 2c 20 3c 74 74 3e 67 69 74 2d 70 34 3c 2f 74 74 , <tt>git-p4</tt
b800: 3e 2c 20 61 6e 64 20 3c 74 74 3e 67 69 74 6b 3c >, and <tt>gitk<
b810: 2f 74 74 3e 2c 0a 20 20 20 20 72 65 73 70 65 63 /tt>,. respec
b820: 74 69 76 65 6c 79 2e 29 20 20 41 6c 74 68 6f 75 tively.) Althou
b830: 67 68 20 74 68 65 73 65 20 69 6e 74 65 72 70 72 gh these interpr
b840: 65 74 65 72 73 20 61 72 65 20 71 75 69 74 65 20 eters are quite
b850: 70 6f 72 74 61 62 6c 65 2c 20 74 68 65 79 0a 20 portable, they.
b860: 20 20 20 61 72 65 6e 27 74 20 69 6e 73 74 61 6c aren't instal
b870: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 20 65 led by default e
b880: 76 65 72 79 77 68 65 72 65 2c 20 61 6e 64 20 6f verywhere, and o
b890: 6e 20 73 6f 6d 65 20 70 6c 61 74 66 6f 72 6d 73 n some platforms
b8a0: 20 79 6f 75 0a 20 20 20 20 63 61 6e 27 74 20 63 you. can't c
b8b0: 6f 75 6e 74 20 6f 6e 20 74 68 65 6d 20 61 74 20 ount on them at
b8c0: 61 6c 6c 2e 20 28 4e 6f 74 20 6a 75 73 74 20 57 all. (Not just W
b8d0: 69 6e 64 6f 77 73 2c 20 62 75 74 20 61 6c 73 6f indows, but also
b8e0: 20 74 68 65 20 42 53 44 73 20 61 6e 64 0a 20 20 the BSDs and.
b8f0: 20 20 6d 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e many other non
b900: 2d 4c 69 6e 75 78 20 70 6c 61 74 66 6f 72 6d 73 -Linux platforms
b910: 2e 29 20 54 68 69 73 20 65 78 70 61 6e 64 73 20 .) This expands
b920: 74 68 65 20 64 65 70 65 6e 64 65 6e 63 79 0a 20 the dependency.
b930: 20 20 20 66 6f 6f 74 70 72 69 6e 74 20 6f 66 20 footprint of
b940: 47 69 74 20 63 6f 6e 73 69 64 65 72 61 62 6c 79 Git considerably
b950: 2e 20 49 74 20 69 73 20 77 68 79 20 74 68 65 20 . It is why the
b960: 63 75 72 72 65 6e 74 20 47 69 74 20 66 6f 72 20 current Git for
b970: 57 69 6e 64 6f 77 73 0a 20 20 20 20 64 69 73 74 Windows. dist
b980: 72 69 62 75 74 69 6f 6e 20 69 73 20 34 34 2e 37 ribution is 44.7
b990: 26 6e 62 73 70 3b 4d 69 42 20 62 75 74 20 74 68 MiB but th
b9a0: 65 20 63 75 72 72 65 6e 74 20 3c 74 74 3e 66 6f e current <tt>fo
b9b0: 73 73 69 6c 2e 65 78 65 3c 2f 74 74 3e 0a 20 20 ssil.exe</tt>.
b9c0: 20 20 7a 69 70 20 66 69 6c 65 20 66 6f 72 20 57 zip file for W
b9d0: 69 6e 64 6f 77 73 20 69 73 20 32 2e 32 34 26 6e indows is 2.24&n
b9e0: 62 73 70 3b 4d 69 42 2e 20 46 6f 73 73 69 6c 20 bsp;MiB. Fossil
b9f0: 69 73 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 0a is much smaller.
ba00: 20 20 20 20 64 65 73 70 69 74 65 20 75 73 69 6e despite usin
ba10: 67 20 61 20 72 6f 75 67 68 6c 79 20 73 69 6d 69 g a roughly simi
ba20: 6c 61 72 20 61 6d 6f 75 6e 74 20 6f 66 20 68 69 lar amount of hi
ba30: 67 68 2d 6c 65 76 65 6c 20 73 63 72 69 70 74 69 gh-level scripti
ba40: 6e 67 20 63 6f 64 65 0a 20 20 20 20 62 65 63 61 ng code. beca
ba50: 75 73 65 20 69 74 73 20 69 6e 74 65 72 70 72 65 use its interpre
ba60: 74 65 72 73 20 61 72 65 20 63 6f 6d 70 61 63 74 ters are compact
ba70: 20 61 6e 64 20 62 75 69 6c 74 20 69 6e 74 6f 20 and built into
ba80: 46 6f 73 73 69 6c 20 69 74 73 65 6c 66 2e 0a 0a Fossil itself...
ba90: 20 20 20 20 3c 6c 69 3e 3c 70 3e 42 6f 74 68 20 <li><p>Both
baa0: 46 6f 73 73 69 6c 20 61 6e 64 20 47 69 74 20 73 Fossil and Git s
bab0: 75 70 70 6f 72 74 0a 20 20 20 20 5b 68 74 74 70 upport. [http
bac0: 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 s://en.wikipedia
bad0: 2e 6f 72 67 2f 77 69 6b 69 2f 50 61 74 63 68 5f .org/wiki/Patch_
bae0: 28 55 6e 69 78 29 7c 3c 74 74 3e 70 61 74 63 68 (Unix)|<tt>patch
baf0: 28 31 29 3c 2f 74 74 3e 0a 20 20 20 20 66 69 6c (1)</tt>. fil
bb00: 65 73 5d 20 e2 80 94 20 75 6e 69 66 69 65 64 20 es] — unified
bb10: 64 69 66 66 20 66 6f 72 6d 61 74 74 65 64 20 6f diff formatted o
bb20: 75 74 70 75 74 20 e2 80 94 20 66 6f 72 20 61 63 utput — for ac
bb30: 63 65 70 74 69 6e 67 20 64 72 69 76 65 2d 62 79 cepting drive-by
bb40: 20 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 2c 20 contributions,
bb50: 62 75 74 20 69 74 27 73 20 61 0a 20 20 20 20 6c but it's a. l
bb60: 6f 73 73 79 20 63 6f 6e 74 72 69 62 75 74 69 6f ossy contributio
bb70: 6e 20 70 61 74 68 20 66 6f 72 20 62 6f 74 68 20 n path for both
bb80: 73 79 73 74 65 6d 73 2e 20 55 6e 6c 69 6b 65 20 systems. Unlike
bb90: 47 69 74 20 50 52 73 20 61 6e 64 20 46 6f 73 73 Git PRs and Foss
bba0: 69 6c 0a 20 20 20 20 62 75 6e 64 6c 65 73 2c 20 il. bundles,
bbb0: 70 61 74 63 68 20 66 69 6c 65 73 20 63 6f 6c 6c patch files coll
bbc0: 61 70 73 65 20 6d 75 6c 74 69 70 6c 65 20 63 68 apse multiple ch
bbd0: 65 63 6b 69 6e 73 20 74 6f 67 65 74 68 65 72 2c eckins together,
bbe0: 20 74 68 65 79 20 64 6f 6e 27 74 0a 20 20 20 20 they don't.
bbf0: 69 6e 63 6c 75 64 65 20 63 68 65 63 6b 2d 69 6e include check-in
bc00: 20 63 6f 6d 6d 65 6e 74 73 2c 20 61 6e 64 20 74 comments, and t
bc10: 68 65 79 20 63 61 6e 6e 6f 74 20 65 6e 63 6f 64 hey cannot encod
bc20: 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 61 e changes made a
bc30: 62 6f 76 65 0a 20 20 20 20 74 68 65 20 69 6e 64 bove. the ind
bc40: 69 76 69 64 75 61 6c 20 66 69 6c 65 20 63 6f 6e ividual file con
bc50: 74 65 6e 74 20 6c 61 79 65 72 3a 20 79 6f 75 20 tent layer: you
bc60: 6c 6f 73 65 20 62 72 61 6e 63 68 69 6e 67 20 64 lose branching d
bc70: 65 63 69 73 69 6f 6e 73 2c 0a 20 20 20 20 74 61 ecisions,. ta
bc80: 67 20 63 68 61 6e 67 65 73 2c 20 66 69 6c 65 20 g changes, file
bc90: 72 65 6e 61 6d 65 73 2c 20 61 6e 64 20 6d 6f 72 renames, and mor
bca0: 65 20 77 68 65 6e 20 75 73 69 6e 67 20 70 61 74 e when using pat
bcb0: 63 68 20 66 69 6c 65 73 2e 20 54 68 65 0a 20 20 ch files. The.
bcc0: 20 20 5b 2e 2f 70 61 74 63 68 63 6d 64 2e 6d 64 [./patchcmd.md
bcd0: 20 7c 20 3c 74 74 3e 66 6f 73 73 69 6c 20 70 61 | <tt>fossil pa
bce0: 74 63 68 3c 2f 74 74 3e 20 63 6f 6d 6d 61 6e 64 tch</tt> command
bcf0: 5d 0a 20 20 20 20 61 6c 73 6f 20 73 6f 6c 76 65 ]. also solve
bd00: 73 20 74 68 65 73 65 20 70 72 6f 62 6c 65 6d 73 s these problems
bd10: 2c 20 62 75 74 20 69 74 20 69 73 20 62 65 63 61 , but it is beca
bd20: 75 73 65 20 69 74 20 77 6f 72 6b 73 20 6c 69 6b use it works lik
bd30: 65 20 61 20 46 6f 73 73 69 6c 0a 20 20 20 20 62 e a Fossil. b
bd40: 75 6e 64 6c 65 2c 20 6f 6e 6c 79 20 66 6f 72 20 undle, only for
bd50: 75 6e 63 6f 6d 6d 69 74 74 65 64 20 63 68 61 6e uncommitted chan
bd60: 67 65 73 3b 20 69 74 20 64 6f 65 73 6e 27 74 20 ges; it doesn't
bd70: 75 73 65 20 4c 61 72 72 79 20 57 61 6c 6c 27 73 use Larry Wall's
bd80: 0a 20 20 20 20 3c 74 74 3e 70 61 74 63 68 3c 2f . <tt>patch</
bd90: 74 74 3e 20 74 6f 6f 6c 20 74 6f 20 61 70 70 6c tt> tool to appl
bda0: 79 20 75 6e 69 66 69 65 64 20 64 69 66 66 20 6f y unified diff o
bdb0: 75 74 70 75 74 20 74 6f 20 74 68 65 20 72 65 63 utput to the rec
bdc0: 65 69 76 69 6e 67 0a 20 20 20 20 46 6f 73 73 69 eiving. Fossi
bdd0: 6c 20 63 68 65 63 6b 6f 75 74 2e 3c 2f 70 3e 3c l checkout.</p><
bde0: 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 3c 2f 69 3e 3c 2f /li>.</ol></i></
bdf0: 73 6d 61 6c 6c 3e 0a small>.