Fossil

Hex Artifact Content
Login

Artifact c8c03e4e3d17a20ba3180ac6fca6294d44d2aab7a358ac3889db3eacbd072853:


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;&darr;</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;&darr;</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&nbsp;&darr;</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&nbsp;&darr;</
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&nbsp;&darr;</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  &nbsp;&darr;</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;&darr;</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&nbsp;&darr;
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&nbsp;&darr;</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&nbsp;&darr;</
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&nbsp;&darr;</
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 &amp; 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&nbsp;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&nbsp
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&nbsp;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  &nbsp;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>.