| | @@ -17,17 +17,20 @@ |
| 17 | 17 | <h2>2.0 Executive Summary:</h2> |
| 18 | 18 | |
| 19 | 19 | <blockquote><center><table border=1 cellpadding=5> |
| 20 | 20 | <tr><th width="50%">GIT</th><th width="50%">FOSSIL</th></tr> |
| 21 | 21 | <tr><td>File versioning only</td> |
| 22 | | - <td>Versioning, Tickets, Wiki, and Blog/News</td></tr> |
| 22 | + <td>Versioning, Tickets, Wiki, and Technotes</td></tr> |
| 23 | 23 | <tr><td>Sharding</td><td>Replicating</td></tr> |
| 24 | 24 | <tr><td>Developer branches</td><td>Feature branches</td></tr> |
| 25 | 25 | <tr><td>Complex</td><td>Intuitive</td></tr> |
| 26 | 26 | <tr><td>Separate web tools</td><td>Integrated Web interface</td></tr> |
| 27 | 27 | <tr><td>Lots of little tools</td><td>Single executable</td></tr> |
| 28 | | -<tr><td>Pile-of-files repository</td><td>Single file repository</td></tr> |
| 28 | +<tr><td>Pile-of-files repository</td> |
| 29 | + <td>Single-file relational database</td></tr> |
| 30 | +<tr><td>One check-out per repository</td> |
| 31 | + <td>Many check-outs per repository</td></tr> |
| 29 | 32 | <tr><td>Uses "<tt>rebase</tt>"</td><td>Immutable</td></tr> |
| 30 | 33 | <tr><td>GPL</td><td>BSD</td></tr> |
| 31 | 34 | </table></center></blockquote> |
| 32 | 35 | |
| 33 | 36 | <h2>3.0 Discussion</h2> |
| | @@ -36,11 +39,11 @@ |
| 36 | 39 | |
| 37 | 40 | Git provides file versioning services only, whereas Fossil adds an |
| 38 | 41 | integrated [./wikitheory.wiki | wiki], |
| 39 | 42 | [./bugtheory.wiki | ticketing & bug tracking], |
| 40 | 43 | [./embeddeddoc.wiki | embedded documentation], and |
| 41 | | -[./event.wiki | News/Blog features]. |
| 44 | +[./event.wiki | Technical notes]. |
| 42 | 45 | These additional capabilities are available for Git as 3rd-party |
| 43 | 46 | user-installed add-ons, but with Fossil they are integrated into |
| 44 | 47 | the design. One way to describe Fossil is that it is |
| 45 | 48 | "[https://github.com/ | github]-in-a-box". |
| 46 | 49 | |
| | @@ -148,10 +151,13 @@ |
| 148 | 151 | Fossil strives for simplicity. Fossil wants to be easy to learn and to |
| 149 | 152 | require little thinking about how to operating it. |
| 150 | 153 | [./quotes.wiki | Reports from the field] |
| 151 | 154 | indicate that Fossil is mostly successful at this effort. |
| 152 | 155 | |
| 156 | +Fossil will <u>never</u> get you into anything like the |
| 157 | +"disconnected head state" which has frustrated so many Git users. |
| 158 | + |
| 153 | 159 | <h3>3.5 Web Interface</h3> |
| 154 | 160 | |
| 155 | 161 | Git has a web interface, but it requires a fair amount of setup and an |
| 156 | 162 | external web server. Fossil comes with a fully functional |
| 157 | 163 | [./webui.wiki | built-in web-server] |
| | @@ -189,11 +195,27 @@ |
| 189 | 195 | repository can serve multiple simultaneous working checkouts. |
| 190 | 196 | A Fossil repository is an SQLite database, so it is highly resistant |
| 191 | 197 | to damage from a power-loss or system crash - incomplete transactions |
| 192 | 198 | are simply rolled back after the system reboots. |
| 193 | 199 | |
| 194 | | -<h3>3.8 Audit Trail</h3> |
| 200 | +<h3>3.8 Check-outs Per Repository</h3> |
| 201 | + |
| 202 | +In Git, a check-out and a repository are joined in a fundamental way |
| 203 | +so that only a single version of the project history, or a single branch, |
| 204 | +can be open at once. If you have a project with multiple branches and |
| 205 | +you want to have two or more branches open at the same time (perhaps to |
| 206 | +do performance comparisons, or maybe to run simultaneous builds using |
| 207 | +different compile-time options) then in Git you actually have to create |
| 208 | +a new clone of the repository for each open checkout. |
| 209 | + |
| 210 | +In Fossil, the repository and the check-out are distinct entities and |
| 211 | +so a single repository can support multiple simultaneous checkouts. |
| 212 | +This feature is <em>extensively</em> used by the Fossil developers |
| 213 | +themselves. Perhaps we are biased, but we not understand how anyone |
| 214 | +can work efficiently with just one check-out per repository. |
| 215 | + |
| 216 | +<h3>3.9 Audit Trail</h3> |
| 195 | 217 | |
| 196 | 218 | Git features the "rebase" command which can be used to change the |
| 197 | 219 | sequence of check-ins in the repository. Rebase can be used to "clean up" |
| 198 | 220 | a complex sequence of check-ins to make their intent easier for others |
| 199 | 221 | to understand. This is important if you view the history of a project |
| | @@ -204,24 +226,47 @@ |
| 204 | 226 | Fossil allows mistakes to be corrected (for example, check-in comments |
| 205 | 227 | can be revised, and check-ins can be moved onto new branches even after |
| 206 | 228 | the check-in has occurred) but the correction is an addition to the repository |
| 207 | 229 | and the original actions are preserved and displayed alongside |
| 208 | 230 | the corrections, thus preserving an historically accurate audit trail. |
| 209 | | -This is analogous to an accountant marking through an incorrect |
| 210 | | -entry in a ledger and writing in a correction beside it, rather than |
| 211 | | -erasing and incorrect entry. |
| 231 | +This is analogous to an accounting practice of marking through an incorrect |
| 232 | +entry in a ledger and writing a correction beside it. |
| 233 | + |
| 212 | 234 | |
| 213 | 235 | To put it another way, Git remembers what you should have done whereas |
| 214 | 236 | Fossil remembers what you actually did. |
| 215 | 237 | |
| 216 | 238 | The lack of a "rebase" command and the inability to rewrite history |
| 217 | 239 | is considered a feature of Fossil, not an omission or bug. |
| 218 | 240 | |
| 219 | | -<h3>3.9 License</h3> |
| 241 | +<h3>3.10 License</h3> |
| 220 | 242 | |
| 221 | 243 | Both Git and Fossil are open-source. Git is under |
| 222 | 244 | [http://www.gnu.org/licenses/gpl.html | GPL] whereas Fossil is |
| 223 | 245 | under the |
| 224 | 246 | [http://en.wikipedia.org/wiki/BSD_licenses | two-clause BSD license]. |
| 225 | | -The difference should not be of a concern to most users. However, |
| 226 | | -some corporate lawyers have objections to using GPL products and |
| 227 | | -are more comfortable with a BSD-style license. |
| 247 | +The different licenses parallel, to some extent, the different philosophies |
| 248 | +of Git and Fossil. |
| 249 | +There are exceptions on both sides, but to a first approximation, Git |
| 250 | +works better for GPL projects and Fossil works better for BSD projects. |
| 251 | + |
| 252 | +The GPL is designed to provide a very contributor-friendly environment. |
| 253 | +No legal paperwork is needed to contribute to a GPL project because |
| 254 | +the GPL is cleverly designed so that the act of contributing |
| 255 | +to the project (or even reading the code for the project) constitutes |
| 256 | +an acceptance of the licensing terms. GPL encourages a bazaar-style |
| 257 | +development model, with lots of anonymous programmers contributing |
| 258 | +drive-by patches. The theory is that with many eyeballs, all bugs |
| 259 | +are shallow. Surprisingly, this has actually been demonstrated to |
| 260 | +work in many well-known projects. |
| 261 | + |
| 262 | +The BSD-style licenses are more user-friendly. BSD-style licenses |
| 263 | +place fewer restrictions on the users of the software at the expense |
| 264 | +of making it more difficult to contribute changes or enhancements. |
| 265 | +To protect against IP claims, |
| 266 | +every contributor to a BSD-style project must sign legal documents in |
| 267 | +which they agree to release their contributions under the same license. |
| 268 | +(Some BSD-licensed projects omit this formality, but do so at their peril.) |
| 269 | +A BSD-style license encourages a more cathedral-style approach to development. |
| 270 | +There is a small team of developers. Drive-by patches and anonymous |
| 271 | +contributors are discouraged and/or prohibited. Contributors are expected |
| 272 | +to be experts and be available to support their changes for the long-term. |
| 228 | 273 | |