[HN Gopher] Fossil
       ___________________________________________________________________
        
       Fossil
        
       Author : tosh
       Score  : 137 points
       Date   : 2020-09-30 20:08 UTC (2 hours ago)
        
 (HTM) web link (www.fossil-scm.org)
 (TXT) w3m dump (www.fossil-scm.org)
        
       | Midar wrote:
       | I'm using it for a while now for https://objfw.nil.im/ and am
       | quite happy with it. I wrote a little bit about that at
       | https://blog.nil.im/?78.
       | 
       | It's quite sad to see that so few projects use it. The idea of
       | having everything in one repo, incl. bugs, is just great. I can
       | create new bugs while offline, update bugs while offline, etc.
       | and then just sync everything once I'm back online.
       | 
       | It also has pretty good support for incrementally importing from
       | and exporting to Git: https://blog.nil.im/?79
        
         | kzrdude wrote:
         | Practical aspects aside, having issue tracking in the repo
         | prevents lock-in of that data - in the way that the github
         | platform works, for example.
        
         | OldHand2018 wrote:
         | Thank you for posting a link to your site. It's really nice to
         | see a live demonstration of Fossil. I notice that your page is
         | using https - does Fossil do that or do you have something else
         | in between (nginx, etc) that provides the https?
        
         | Quekid5 wrote:
         | > The idea of having everything in one repo, incl. bugs, is
         | just great. I can create new bugs while offline, update bugs
         | while offline, etc. and then just sync everything once I'm back
         | online.
         | 
         | The bug thing I kinda disagree with... or at least I'm
         | skeptical, shall we say. Bugs are solved when the fix has been
         | _deployed_ and _verified fixed in production_ , not when
         | someone commits/pushes/merges a potential fix to the main
         | branch. Sure you can separate the 'bug-X fixed' change to the
         | bug tracker and the code commits, but then what have you gained
         | over just a 'Fixes: X' annotation in the commit msg?
         | 
         | This could be misunderstanding on my part about the
         | intent/process around bug/issue handling in Fossil, so I'd
         | appreciate if you could expand on what you like about and how
         | it works within the larger 'deploy a fix' context.
         | 
         | (I tried Fossil for a bit on a very small scale -- it was
         | pleasant enough, but ultimately Git's network effects win out
         | big time... at least for me.)
        
           | lrem wrote:
           | It isn't putting your issue tracking into an equivalent of a
           | git repository. It just contains a rather standard-looking
           | issue tracker, along a wiki for documentation, in the same
           | sqlite. And they are distributed/synchronized just like the
           | repository.
        
             | Quekid5 wrote:
             | So they're independent of what happens to the code and just
             | happen to be bundled/synced when the code is?
        
               | hexmiles wrote:
               | yes
        
               | [deleted]
        
               | Quekid5 wrote:
               | Ok, makes sense, but what is the workflow like, then?
               | Would one close the bug along with the fix to the code,
               | or...?
        
           | Midar wrote:
           | That is only true for projects where you need to deploy. In
           | that case, yeah, you of course can only close the bug once
           | you fixed production. But for normal software development,
           | you can fix the bug in the software and you can update the
           | bug tracker, and then push everything once you're back
           | online.
           | 
           | For example, on a flight, I can look at the bug tracker
           | (since it's part of the clone), pick a bug I want to work on,
           | create a few commits to fix it, then update that bug (set it
           | to closed, reference the commits that fixed it), and then
           | upload it all when the plane landed again.
        
         | thunderbong wrote:
         | This is really nice. How have you been hosting this? How well
         | is fossil able to handle the traffic?
         | 
         | I've read so many articles about the advantages of static site
         | generators and serverless implementations for blogs so that
         | they are able to handle traffic and the insane amount of
         | tooling around each of those concepts. It's so great to see a
         | well crafted piece of software being able to take care of all
         | that so seamlessly.
         | 
         | I'm a big fan of fossil personally and use it for all my
         | projects as well as for all the projects in our organization.
        
       | kayson wrote:
       | Reading through some of the articles linked in the comments, I'm
       | very hesitant to use something whose creator is so opinionated
       | and vocally against another piece of software. Maybe its just the
       | style of writing, and isn't actually reflected in Fossil's
       | development, but this kind of attitude doesn't inspire
       | confidence.
        
         | bachmeier wrote:
         | It's more that "why don't you use Github for sqlite" comes up
         | six times a day, so at a certain point you have to explain why
         | you use your own version control system. A lot of developers
         | today know nothing other than Git and assume anything else is
         | wrong by default.
        
       | dkulchenko wrote:
       | Notably used (and developed) by the SQLite authors. They explain
       | their rationale here: https://sqlite.org/whynotgit.html
        
       | rkeene2 wrote:
       | I run ChiselApp.com to support publicly hosted Fossil
       | repositories.
       | 
       | The architecture behind it is pretty simple, since Fossil is
       | doing all the work and I'm just orchestrating it (although I do
       | allow you to execute arbitrary Tcl scripts as part of it, so
       | there is some work that goes into the sandbox).
        
         | lactobacillis wrote:
         | Quick question. Is the entire thing on one SQLite db?
        
           | rkeene2 wrote:
           | Each Fossil repository is its own SQLite database.
           | Additionally, there's an SQLite database which holds
           | ChiselApp.com user information (which is unrelated to Fossil
           | information).
        
       | n3k5 wrote:
       | > _Fossil also supports bug tracking, wiki, forum, and technotes_
       | 
       | That sounds great, but I'm scared of checking these features out
       | because I'm currently looking at the quick start guide[0] and am
       | immediately put off by how awful the CSS is. Formatting running
       | text such that a single line can be ~500 characters wide[1]
       | results in very low readability. There's a difference between
       | 'themeable' and 'configuring a custom theme is mandatory because
       | the default option makes you feel sick'.
       | 
       | In case someone working on Fossil sees this: I just bookmarked
       | the site because the project seems very attractive in most other
       | respects. I hope that when I eventually re-visit that link, I'll
       | be able to go on a significantly deeper dive. A somewhat sane
       | style sheet would certainly help.
       | 
       | [0] https://www.fossil-
       | scm.org/home/doc/trunk/www/quickstart.wik... [1]
       | https://i.paste.pics/A9RQ8.png
        
         | z2210558 wrote:
         | It looks totally fine to me (lines are wrapping normally). Are
         | you sure it's not something to do with your own browser?
        
         | flohofwoe wrote:
         | Not sure what you're complaining about, the page looks fine in
         | a desktop browser window, the text automatically overflows when
         | the window is resized.
        
       | kipari wrote:
       | I enjoy how well-crafted Fossil seems to be; just like SQLite,
       | which a sibling comment also mentioned. I really want to use
       | Fossil, but it would be way too hard for me to not have the
       | index/staging area of Git. [1] For all the software that claims
       | to be 'opinionated', Fossil really is that.
       | 
       | [1]: https://fossil-scm.org/home/doc/trunk/www/gitusers.md
        
         | JoshTriplett wrote:
         | Agreed. I'd love to have integrated bug-tracking, and some of
         | the other features, but Fossil is also trying to drive
         | particular opinions about version control that are incompatible
         | with how many people want to work.
         | 
         | It's already hard to move people away from a system that has
         | huge network effects. This makes it much harder.
        
           | beagle3 wrote:
           | There are several bug tracking systems that store their data
           | inside the repository (and as a result, branch / merge / push
           | / pull automatically) -- including the venerable "vi
           | bugs.txt" system which works surprisingly well from
           | experience.
           | 
           | What fossil brings that those systems don't is indeed the
           | network effect as you pointed out. It's integrated with the
           | web frontend, and is thus used by everyone using fossil and
           | fossil's bug tracking, based on experience with cvstrac, is
           | low ceremony, easy to use and reasonably effective -- even
           | more than "vi bugs.txt" which sets a remarkably low ceremony
           | bar.
        
             | JoshTriplett wrote:
             | That's exactly what I'd love to have, just without the
             | opinionated differences in things like rebase, staging,
             | branching, and similar.
        
         | Arnavion wrote:
         | Yes. I use `git add -p` and `git stash -p` all the time and
         | couldn't work without them. Fossil's equivalents appear to let
         | you specify a subset of files to commit / stash, but not
         | individual thunks inside them. [1] [2]
         | 
         | Not to mention the lack of `rebase -i` to clean up local
         | commits.
         | 
         | [1]: https://www.fossil-scm.org/fossil/help?cmd=commit [2]:
         | https://www.fossil-scm.org/fossil/help?cmd=stash
        
           | rstupek wrote:
           | It would seem the authors consider rebase harmful:
           | https://fossil-scm.org/home/doc/trunk/www/rebaseharm.md
        
             | aidenn0 wrote:
             | Contrary to that article, squashing _aids_ bisection rather
             | than hurts it.
             | 
             | One simple example:
             | 
             | commit 1: things work
             | 
             | commit 2: Feature X, regress
             | 
             | commit 4: Feature Y, break things by accident
             | 
             | commit 5: oops, fix commit #4
             | 
             | ...
             | 
             | You land on commit 4 breaking your commit, but if #5 and #4
             | had been squashed then you would find commit #3 much more
             | easily.
             | 
             | With a tiny history like this it's not a big deal, but with
             | a larger one, it becomes an issue.
        
               | progval wrote:
               | On personal projects (using git), I use squashing only
               | for small bug fixes like the one you mentioned or when
               | the author of a PR made a big mess of commits (usually
               | because they are a git beginner). Best of both worlds.
        
             | Arnavion wrote:
             | (Holy shit I didn't realize how long this had gotten.)
             | 
             | I read that page. It's their opinion and I disagree with
             | it.
             | 
             | To be clear of where I'm coming from, I've never used
             | fossil, and I've used git regularly for about 10 years. I
             | only use git from the commandline except that I often use
             | `gitk` to read a branch's commit history or inspect diffs,
             | and I use `kdiff3` for interactive merging when there are
             | conflicts. I actively disable git "integrations" in editors
             | and IDEs.
             | 
             | ---
             | 
             | >1.0
             | 
             | Whether other people struggle with rebase or not does not
             | affect me, because I have no problems using it. (This logic
             | also extends to people who complain the entire git CLI is
             | hard to use.)
             | 
             | Now, this might sound like the seasoned C programmer saying
             | "Other people accidentally write UB but I don't, so C is
             | perfectly fine." but there is a difference. UB with C is
             | problematic because it's hard to know it happened, which is
             | why we know the seasoned C programmer might have
             | unknowingly written UB after all. This is not the case with
             | `git rebase` though. Either you do it correctly or you
             | don't, and I can confidently say I do it correctly.
             | 
             | >2.1
             | 
             | This is specifically talking about rebases that move
             | commits onto new parents. Rebase does much more than that.
             | For this particular use case, I agree that some projects
             | even when using git prefer to have merge commits instead of
             | rebased commits, and that's fine. But for projects that do
             | want a linear series of commits, it's good to have the
             | choice. Rebased commits also make it easier to revert just
             | a single commit instead of the whole merge (though of
             | course it's not impossible to revert a single commit of a
             | merged branch either).
             | 
             | >2.2
             | 
             | This whole section is a non-sequitur because indeed the
             | correct pre-rebase diff would indeed be diff(C2, C5) even
             | in the git case. But if you're planning to rebase the code
             | in order to merge it, you need to rebase the code to know
             | what the diff will be.
             | 
             | >3.0
             | 
             | The Windows Vista citation starts off with the (correct)
             | result that lack of communication between engineers of
             | disparate components leads to bugs, but then associates it
             | to mean that these disparate components were being
             | developed in private branches. The cited paper does not
             | talk about branches at all. Indeed, bugs happening because
             | of private branches was not the case then, and is not the
             | case now. The reason those bugs happen is because the
             | engineers of a particular component only work with code of
             | their component.
             | 
             | The "egoless" citation is from a book, so I can't tell if
             | the book specifically says private branches have anything
             | to do with ego or not.
             | 
             | At any rate, this section is fundamentally confused. Making
             | branches public doesn't mean you can't rebase them. If I
             | work on an OSS github project, I would certainly make my
             | WIP code branch public. That doesn't mean I don't want to
             | rebase it right before I send a PR to clean the cruft up.
             | 
             | I think the article author may have read the git advice
             | about not rebasing public branches and thought it meant all
             | non-private branches. It actually means branches other
             | people would want to pull from you and who are not
             | expecting it to be rebased. Single-person development
             | happens in branches only that single person cares about, so
             | whether the branches are private or public makes no
             | difference to that person wanting to be able to rebase
             | them. If a group of people are collaborating and they agree
             | that rebases are going to happen, nothing is wrong with
             | letting them do that. The only problem is with rebasing
             | public branches that people pull from and which those
             | people do not expect to be rebased, like a public repo's
             | `master`.
             | 
             | >4.0
             | 
             | So test each commit then. git doesn't makes it impossible
             | to do that or anything. If anything, ensuring tests pass on
             | each intermediate commit makes `bisect`ing easier in the
             | future.
             | 
             | Also, only using merges means the only tested commit is the
             | merge commit, so you lose the ability to check which commit
             | in the merged branch caused the problem.
             | 
             | See also 7.0
             | 
             | >5.0
             | 
             | `git rebase --ignore-date` will reset the commit date of
             | each rebased commit to the current time.
             | 
             | >6.0
             | 
             | It is correct that commit messages are the only way to
             | associate some of the metadata that Fossil lets you
             | manipulate separately. So (2) and (3) do benefit from
             | Fossil's approach.
             | 
             | (1) and especially (5) happens rarely enough in my
             | experience that it isn't enough justification.
             | 
             | I'm not sure what (4) is referring to by "routine display",
             | but in general the only branches things like `gitk` will
             | show you are the ones you ask for.
             | 
             | >7.0
             | 
             | It also throws away non-valuable garbage. When I'm
             | bisecting a bug, or running a `blame` to figure out what
             | commit added a particular line, I don't need to go through
             | half-commits that got reverted afterwards.
             | 
             | False starts and incorrect approaches can be documented in
             | the commit message or in the code comments.
             | 
             | Also this directly contradicts 4.0 unless we are to assume
             | that only merge commits get tested, and that the user
             | running `blame` does not go deeper than the merge that
             | introduced the line, which has the problem I mentioned in
             | 4.0
             | 
             | >7.1
             | 
             | This section is just a longer reiteration of 7.0, so it has
             | the same rebuttal.
             | 
             | >7.2
             | 
             | This has switched to specifically talking about squash
             | rebases, which is not necessarily the only kind of rebase
             | (and is also not the kind of rebase that the diagram in 2.2
             | was talking about). I also dislike squashed rebases when
             | merging pulls. But if I have to squash two commits in my
             | WIP branch I absolutely want to be able to.
             | 
             | >7.3
             | 
             | If the checkins are being rebased and are going to be
             | merged without squashing, then each commit has to stand on
             | its own by definition, so of course they should all have
             | individual justifications.
             | 
             | >7.4, 7.5
             | 
             | These are the same as 7.2 and 8.0 below.
             | 
             | >8.0
             | 
             | This appears to be saying that fossil's cherry-pick is not
             | just a wrapper around rebase like git's is. So I agree that
             | (1) and (4) are benefits due to Fossil's approach.
             | 
             | (2) is exactly the same as 4.0
             | 
             | I don't understand what (3) is trying to say.
        
             | mikepurvis wrote:
             | I'm sympathetic to a lot of what they have to say, but this
             | has always been a sticking point for me:
             | 
             | > Cherry-picks work better with small check-ins
             | 
             | Maybe it's just bad git tooling or me using the tools
             | wrong, but if I need to cherry-pick and there are
             | conflicts, it is always way easier to squash everything
             | down and pick it in one go-- if I don't do that, I end up
             | resolving the same conflict over and over as new commits
             | pile in on top of it and meet a conflict-resolved state
             | that they then have a further conflict with.
        
               | samatman wrote:
               | The author of pijul is of the opinion that cherry-picks
               | only work in accordance with the developer's mental
               | model, if the VCS is based on patches.
               | 
               | I've been persuaded by his argument, and I'm really
               | looking forward to the pijul rewrite landing, so I can
               | play around with it again.
        
               | aidenn0 wrote:
               | I don't cherry-pick much in git, but I'm guesing rerere
               | doesn't work with it?
        
       | dognotdog wrote:
       | I'm a big fan of Fossil, but I've sadly not used it in a while
       | for new projects, as when stuff has to go on gitlab or github it
       | is just too inconvenient.
       | 
       | Even though one-way pushes to github/gitlab via --fast-export /
       | --fast-import are relatively painless, going the other way for
       | contributions is still not easy because of rebase issues, etc, at
       | least to my knowledge.
        
       | marmaduke wrote:
       | I wanted to use Fossil but the division between what you do in
       | CLI and what you do in the web UI was too arbitrary. I wanted to
       | edit the wiki in vim, for example. Now I don't care anymore and
       | just use Git and GitHub
        
         | gw wrote:
         | Yeah it's a bit bifurcated. Internally there's a lot of
         | coupling -- HTML embedded directly in the C code and whatnot.
         | This could be resolved if tools could be built on top of
         | fossil, but the CLI code uses `exit` everywhere which makes it
         | impossible to use as a library. I think they made an incomplete
         | attempt at a JSON API, but what you really need is a proper
         | linkable library like libgit2.
        
         | bachmeier wrote:
         | Maybe I'm not understanding, but it's pretty easy to edit the
         | wiki from the command line in vim (I've used text editors for
         | it before).
         | 
         | https://fossil-scm.org/home/help?cmd=wiki
         | 
         | To edit a page, do an export and then a commit when you're
         | done. It was easy enough to add this as a menu item in Emacs.
         | 
         | fossil wiki export foo.wiki foo.md
         | 
         | fossil wiki commit foo.wiki foo.md
        
       | samatman wrote:
       | I have great fondness for Fossil, used it a couple of times and
       | wish it were possible to keep using it.
       | 
       | I tried to rally some interest on the mailing list behind
       | separating the working parts from the UI chrome into a
       | 'libfossil', which could be integrated into other programs. The
       | verdict was that D. Richard Hipp doesn't really want to, since
       | it's a classic C monolith where the allocation strategy doesn't
       | make that separation easy. Someone started the job, but had to
       | abandon it due to RSI issues.
       | 
       | I still kinda hope someone bites the bullet, because a "libsqlite
       | for versioning" would be a real boon for application developers.
       | Even for fossil's central use case as a code VCS, the monolithic
       | bundling of everything into one program is a mixed bag.
        
       | michaelmure wrote:
       | If you like this idea of embedding a bug-tracker (and eventually
       | the code review) within a DVCS, I'm working on a project[1] that
       | does that for git.
       | 
       | [1]: https://github.com/MichaelMure/git-bug
        
       | [deleted]
        
       | dfischer wrote:
       | Can anyone give a conceptual model breakdown of the data model of
       | fossil vs git and trade offs? I've been quite interested in these
       | types of structures. I need to play more with them.
        
         | cbsks wrote:
         | These web pages give a good broad overview of Git vs Fossil.
         | They don't go into much detail about the internals, however.
         | 
         | Fossil Versus Git: https://fossil-
         | scm.org/fossil/doc/trunk/www/fossil-v-git.wik...
         | 
         | Why SQLite Does Not Use Git: https://sqlite.org/whynotgit.html
         | 
         | Hints For Users With Prior Git Experience: https://fossil-
         | scm.org/home/doc/trunk/www/gitusers.md
        
           | aidenn0 wrote:
           | The first item on "why sqlite does not use git" asking for a
           | timeline view. That looks almost exactly what "gitk" shows,
           | which was builtin to git before github or gitlab existed.
           | 
           | A quick scan of the other items are all more-or-less true so
           | it's a shame it leads with that.
        
             | rstupek wrote:
             | Didn't the author address that by stating "people install
             | graphical viewers to get around this" and that this is not
             | built into default git?
        
               | aidenn0 wrote:
               | No because it's built into default git.
        
       | sigzero wrote:
       | Gitea falls into a similar category
       | 
       | [1]: https://gitea.io
        
         | ComputerGuru wrote:
         | No, it really doesn't. Gitea is just your typical web stack
         | built around forking git.exe processes.
        
       | bachmeier wrote:
       | Aside from standard version control uses, I eventually realized
       | that the tickets database is just a regular sqlite database that
       | lets you edit the schema and query any way you like. What's
       | really cool is that it's version controlled. You can put any
       | information you want into the tickets database and then pull
       | changes like any other repo. You can view the timeline to see all
       | the changes you've made to the database over time.
        
       ___________________________________________________________________
       (page generated 2020-09-30 23:01 UTC)