Fossil SCM
Now up to 91 reasons.
Commit
f15daa89a42f396e855a09773466fa9c2650d1d41fba40e9466e78ab46f44d83
Parent
ff819b5ec8f555e…
1 file changed
+89
-1
+89
-1
| --- www/hundredandone.md | ||
| +++ www/hundredandone.md | ||
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | # 101 Reasons Why Fossil Is Better Than Git |
| 2 | 2 | |
| 3 | -*This is a work in progress. Only 82 reasons have been typed in so far, | |
| 3 | +*This is a work in progress. Only 91 reasons have been typed in so far, | |
| 4 | 4 | but I have a separate text file of notes that lists 104 candidate reasons. |
| 5 | 5 | It's just taking me a while to compose and edit the rationale for each |
| 6 | 6 | one, and to arrange the reasons in a sensible order. I will merge this |
| 7 | 7 | document from its current branch onto trunk when it gets closer to being |
| 8 | 8 | ready to publish.* |
| @@ -214,10 +214,17 @@ | ||
| 214 | 214 | GitHub just cannot shows you the checkins of branch setlk-snapshot-fix |
| 215 | 215 | only. There are other third-party tools that will show you that, I am |
| 216 | 216 | told, but they all require a local clone of the repository. Apparently |
| 217 | 217 | there is no way to see this information in a web browser running on |
| 218 | 218 | your phone. |
| 219 | + | |
| 220 | + 1. **Fossil has a built-in bug tracking system.**.<p> | |
| 221 | + Tickets are stored in the repository together with source code and | |
| 222 | + push/pull/sync the same as the code. The ticket system is configurable | |
| 223 | + and distributed. Repository administrators can determine what | |
| 224 | + fields appear in tickets and what users are allowed to create, | |
| 225 | + edit, or moderate tickets. | |
| 219 | 226 | |
| 220 | 227 | 1. **Fossil allows multiple branches with the same name.**<p> |
| 221 | 228 | This is used, for example, to name a lot for branches "experimental" |
| 222 | 229 | or "mistake". See |
| 223 | 230 | <https://sqlite.org/src/timeline?r=experimental> and |
| @@ -862,5 +869,86 @@ | ||
| 862 | 869 | <p> |
| 863 | 870 | One important aspect of Fossil that this page illustrates due to the |
| 864 | 871 | rebust and modular design of the Fossil implementation, |
| 865 | 872 | pages like this can be generated, using very little memory or CPU, |
| 866 | 873 | and with not very much code. |
| 874 | + | |
| 875 | + 1. **Fossil allows you to update your current check-out even if it | |
| 876 | + contains uncommitted changes.**<p> | |
| 877 | + This is a very common idiom in Fossil. You are working on changes | |
| 878 | + and somebody commits ahead of you. You just run | |
| 879 | + "<tt>fossil up</tt>" ("up" is short for "update") and the new | |
| 880 | + external changes are merge into your own uncommitted changes. You | |
| 881 | + continue working. | |
| 882 | + <p> | |
| 883 | + Doing this in Git appears to require multiple commands involving | |
| 884 | + the stash and a rebase. | |
| 885 | + | |
| 886 | + 1. **Fossil lets you undo an update.**<p> | |
| 887 | + If you run "<tt>fossil up</tt>" on a check-out that contains | |
| 888 | + uncommitted changes, and the update does not go well (for example, | |
| 889 | + if there are a lot of merge conflicts) you can back out the update | |
| 890 | + by running "<tt>fossil undo</tt>". | |
| 891 | + <p> | |
| 892 | + The need for this does not arise often, because | |
| 893 | + "<tt>fossil up</tt>" normally just works. But the ability to | |
| 894 | + undo is a nice safety for the rare cases when the update goes awry. | |
| 895 | + Current versions of Fossil only support a single level of undo, | |
| 896 | + but that might change in the future. | |
| 897 | + | |
| 898 | + 1. **Fossil warns you if you try to commit and somebody else has | |
| 899 | + committed and pushed ahead of you.**<p> | |
| 900 | + You can then run "<tt>fossil up</tt>" and then retest and retry. | |
| 901 | + Or you can override the warning and force Fossil to commit anyhow, | |
| 902 | + thus forking the branch. Either way, | |
| 903 | + you enter the commit with more knowledge about what is happening, | |
| 904 | + and thus improved situational awareness. | |
| 905 | + | |
| 906 | + 1. **Every Fossil project has a unique identifier**.<p> | |
| 907 | + When a new repository is created, the unique identifier is created | |
| 908 | + and stored in the repository. That identifier is called the | |
| 909 | + "project code". The identifier is copied with every | |
| 910 | + clone. (Uniqueness is probabilistic. The identifier simply contains | |
| 911 | + enough of high-quality randomness to make it unlikely that there | |
| 912 | + will ever be a collision.) | |
| 913 | + <p> | |
| 914 | + It is not possible in Fossil to push to or pull from a repository | |
| 915 | + with the wrong project code. Thus you cannot contaminate one | |
| 916 | + project with code from another simply by specifying the wrong | |
| 917 | + remote and adding the --force flag, as is apparently possible in Git. | |
| 918 | + | |
| 919 | + 1. **Each Fossil repository keeps an audit trail.**<p> | |
| 920 | + For each new artifact received into a Fossil repository, by push or | |
| 921 | + pull or by direct commit from the command line, Fossil records a | |
| 922 | + timestamp, username, and an IP address (where applicable) for | |
| 923 | + that artifact. If harmful or malicious is ever introduced into | |
| 924 | + a repository, the repository administrator has the capability to | |
| 925 | + trace that content back to its source, so that appropriate | |
| 926 | + sanctions can be applied to the malefactor. | |
| 927 | + | |
| 928 | + 1. **Fossil stores content in a power-safe ACID database.**<p> | |
| 929 | + The repository content cannot be corrupted by a program crash, | |
| 930 | + system crash, or unexpected power loss. The repository moves | |
| 931 | + from one consistent state to another, atomically. This helps | |
| 932 | + to ensure that the resources stored in Fossil are kept safe, | |
| 933 | + even if the Fossil implementation itself contains bugs. | |
| 934 | + <p> | |
| 935 | + The underlying datbase engine used by Fossil is SQLite, of course. | |
| 936 | + <p> | |
| 937 | + Git also claims to be transactional. However, because Git does | |
| 938 | + not use a separate database engine, the transactional integrity | |
| 939 | + of Git depends entirely upon the correctness of the Git code | |
| 940 | + itself. Git is thus far more sensitive to implementation bugs. | |
| 941 | + | |
| 942 | + 1. **Fossil supports a built-in graphical diff tool.**<p> | |
| 943 | + Running "<tt>fossil gdiff</tt>" show the currently | |
| 944 | + uncommitted changes in a Tk-based graphical display. This | |
| 945 | + is built into Fossil and does not require any external tools | |
| 946 | + (though it does require Tcl/Tk). Git requires external tooling | |
| 947 | + in order to do the same. | |
| 948 | + | |
| 949 | + 1. **Fossil support showing diffs in a web browser.**<p> | |
| 950 | + Adding the "<tt>-b</tt>" or "<tt>-by</tt>" option to any Fossil | |
| 951 | + diff command causes that diff to be rendered as a new page in | |
| 952 | + the users default web browser. Git does not have any such | |
| 953 | + capability, even with the aid of external programs, as far as | |
| 954 | + I am aware. | |
| 867 | 955 |
| --- www/hundredandone.md | |
| +++ www/hundredandone.md | |
| @@ -1,8 +1,8 @@ | |
| 1 | # 101 Reasons Why Fossil Is Better Than Git |
| 2 | |
| 3 | *This is a work in progress. Only 82 reasons have been typed in so far, |
| 4 | but I have a separate text file of notes that lists 104 candidate reasons. |
| 5 | It's just taking me a while to compose and edit the rationale for each |
| 6 | one, and to arrange the reasons in a sensible order. I will merge this |
| 7 | document from its current branch onto trunk when it gets closer to being |
| 8 | ready to publish.* |
| @@ -214,10 +214,17 @@ | |
| 214 | GitHub just cannot shows you the checkins of branch setlk-snapshot-fix |
| 215 | only. There are other third-party tools that will show you that, I am |
| 216 | told, but they all require a local clone of the repository. Apparently |
| 217 | there is no way to see this information in a web browser running on |
| 218 | your phone. |
| 219 | |
| 220 | 1. **Fossil allows multiple branches with the same name.**<p> |
| 221 | This is used, for example, to name a lot for branches "experimental" |
| 222 | or "mistake". See |
| 223 | <https://sqlite.org/src/timeline?r=experimental> and |
| @@ -862,5 +869,86 @@ | |
| 862 | <p> |
| 863 | One important aspect of Fossil that this page illustrates due to the |
| 864 | rebust and modular design of the Fossil implementation, |
| 865 | pages like this can be generated, using very little memory or CPU, |
| 866 | and with not very much code. |
| 867 |
| --- www/hundredandone.md | |
| +++ www/hundredandone.md | |
| @@ -1,8 +1,8 @@ | |
| 1 | # 101 Reasons Why Fossil Is Better Than Git |
| 2 | |
| 3 | *This is a work in progress. Only 91 reasons have been typed in so far, |
| 4 | but I have a separate text file of notes that lists 104 candidate reasons. |
| 5 | It's just taking me a while to compose and edit the rationale for each |
| 6 | one, and to arrange the reasons in a sensible order. I will merge this |
| 7 | document from its current branch onto trunk when it gets closer to being |
| 8 | ready to publish.* |
| @@ -214,10 +214,17 @@ | |
| 214 | GitHub just cannot shows you the checkins of branch setlk-snapshot-fix |
| 215 | only. There are other third-party tools that will show you that, I am |
| 216 | told, but they all require a local clone of the repository. Apparently |
| 217 | there is no way to see this information in a web browser running on |
| 218 | your phone. |
| 219 | |
| 220 | 1. **Fossil has a built-in bug tracking system.**.<p> |
| 221 | Tickets are stored in the repository together with source code and |
| 222 | push/pull/sync the same as the code. The ticket system is configurable |
| 223 | and distributed. Repository administrators can determine what |
| 224 | fields appear in tickets and what users are allowed to create, |
| 225 | edit, or moderate tickets. |
| 226 | |
| 227 | 1. **Fossil allows multiple branches with the same name.**<p> |
| 228 | This is used, for example, to name a lot for branches "experimental" |
| 229 | or "mistake". See |
| 230 | <https://sqlite.org/src/timeline?r=experimental> and |
| @@ -862,5 +869,86 @@ | |
| 869 | <p> |
| 870 | One important aspect of Fossil that this page illustrates due to the |
| 871 | rebust and modular design of the Fossil implementation, |
| 872 | pages like this can be generated, using very little memory or CPU, |
| 873 | and with not very much code. |
| 874 | |
| 875 | 1. **Fossil allows you to update your current check-out even if it |
| 876 | contains uncommitted changes.**<p> |
| 877 | This is a very common idiom in Fossil. You are working on changes |
| 878 | and somebody commits ahead of you. You just run |
| 879 | "<tt>fossil up</tt>" ("up" is short for "update") and the new |
| 880 | external changes are merge into your own uncommitted changes. You |
| 881 | continue working. |
| 882 | <p> |
| 883 | Doing this in Git appears to require multiple commands involving |
| 884 | the stash and a rebase. |
| 885 | |
| 886 | 1. **Fossil lets you undo an update.**<p> |
| 887 | If you run "<tt>fossil up</tt>" on a check-out that contains |
| 888 | uncommitted changes, and the update does not go well (for example, |
| 889 | if there are a lot of merge conflicts) you can back out the update |
| 890 | by running "<tt>fossil undo</tt>". |
| 891 | <p> |
| 892 | The need for this does not arise often, because |
| 893 | "<tt>fossil up</tt>" normally just works. But the ability to |
| 894 | undo is a nice safety for the rare cases when the update goes awry. |
| 895 | Current versions of Fossil only support a single level of undo, |
| 896 | but that might change in the future. |
| 897 | |
| 898 | 1. **Fossil warns you if you try to commit and somebody else has |
| 899 | committed and pushed ahead of you.**<p> |
| 900 | You can then run "<tt>fossil up</tt>" and then retest and retry. |
| 901 | Or you can override the warning and force Fossil to commit anyhow, |
| 902 | thus forking the branch. Either way, |
| 903 | you enter the commit with more knowledge about what is happening, |
| 904 | and thus improved situational awareness. |
| 905 | |
| 906 | 1. **Every Fossil project has a unique identifier**.<p> |
| 907 | When a new repository is created, the unique identifier is created |
| 908 | and stored in the repository. That identifier is called the |
| 909 | "project code". The identifier is copied with every |
| 910 | clone. (Uniqueness is probabilistic. The identifier simply contains |
| 911 | enough of high-quality randomness to make it unlikely that there |
| 912 | will ever be a collision.) |
| 913 | <p> |
| 914 | It is not possible in Fossil to push to or pull from a repository |
| 915 | with the wrong project code. Thus you cannot contaminate one |
| 916 | project with code from another simply by specifying the wrong |
| 917 | remote and adding the --force flag, as is apparently possible in Git. |
| 918 | |
| 919 | 1. **Each Fossil repository keeps an audit trail.**<p> |
| 920 | For each new artifact received into a Fossil repository, by push or |
| 921 | pull or by direct commit from the command line, Fossil records a |
| 922 | timestamp, username, and an IP address (where applicable) for |
| 923 | that artifact. If harmful or malicious is ever introduced into |
| 924 | a repository, the repository administrator has the capability to |
| 925 | trace that content back to its source, so that appropriate |
| 926 | sanctions can be applied to the malefactor. |
| 927 | |
| 928 | 1. **Fossil stores content in a power-safe ACID database.**<p> |
| 929 | The repository content cannot be corrupted by a program crash, |
| 930 | system crash, or unexpected power loss. The repository moves |
| 931 | from one consistent state to another, atomically. This helps |
| 932 | to ensure that the resources stored in Fossil are kept safe, |
| 933 | even if the Fossil implementation itself contains bugs. |
| 934 | <p> |
| 935 | The underlying datbase engine used by Fossil is SQLite, of course. |
| 936 | <p> |
| 937 | Git also claims to be transactional. However, because Git does |
| 938 | not use a separate database engine, the transactional integrity |
| 939 | of Git depends entirely upon the correctness of the Git code |
| 940 | itself. Git is thus far more sensitive to implementation bugs. |
| 941 | |
| 942 | 1. **Fossil supports a built-in graphical diff tool.**<p> |
| 943 | Running "<tt>fossil gdiff</tt>" show the currently |
| 944 | uncommitted changes in a Tk-based graphical display. This |
| 945 | is built into Fossil and does not require any external tools |
| 946 | (though it does require Tcl/Tk). Git requires external tooling |
| 947 | in order to do the same. |
| 948 | |
| 949 | 1. **Fossil support showing diffs in a web browser.**<p> |
| 950 | Adding the "<tt>-b</tt>" or "<tt>-by</tt>" option to any Fossil |
| 951 | diff command causes that diff to be rendered as a new page in |
| 952 | the users default web browser. Git does not have any such |
| 953 | capability, even with the aid of external programs, as far as |
| 954 | I am aware. |
| 955 |