• Facebook does not use Git due to scale issues with their large monorepo, instead opting for Mercurial.
  • Mercurial may be a better option for large monorepos, but Git has made improvements to support them better.
  • Despite some drawbacks, Git usage remains dominant with 93.87% share, due to familiarity, additional tools, and industry trends.
  • Ananace
    link
    fedilink
    112 months ago

    Mercurial does have a few things going for it, though for most use-cases it’s behind Git in almost all metrics.

    I really do like the fact that it keeps a commit number counter, it’s a lot easier to know if “commit 405572” is newer than “commit 405488” after all, instead of Git’s “commit ea43f56” vs “commit ab446f1”. (Though Git does have the describe format, which helps somewhat in this regard. E.g. “0.95b-4204-g1e97859fb” being the 4204th commit after tag 0.95b)

      • @[email protected]
        link
        fedilink
        English
        82 months ago

        Rebasing updates the commit ids. It’s fine. Commit IDs are only local anyway.

        One thing that makes mercurial better for rebase based flows is obsolescence markers. The old version of the commits still exist after a rebases and are marked as being made obsolete by the new commits. This means somebody you’ve shared those old commits with isn’t left in hyperspace when they fetch your new commits. There’s history about what happened being shared.

        • @AnActOfCreationOP
          link
          42 months ago

          Commit IDs are only local anyway.

          Whay do you mean by that?

          • @[email protected]
            link
            fedilink
            English
            32 months ago

            You and I both clone a repo with ten changes in it. We each make a new commit. Both systems will call it commit 11. If I pull your change into my repo your 11 becomes my 12.

            The sequential change IDs are only consistent locally.

            • @AnActOfCreationOP
              link
              12 months ago

              Got it! Are they renumbered chronologically? Like if my 11 was created before your 11, would yours be the one that’s renumbered?

              • @[email protected]
                link
                fedilink
                English
                22 months ago

                No. They are not renumbered. Your 11 is always the same commit. It’s consistent locally (which is what I mean by “local only”) otherwise they’d change under your feet. You just can’t share them with others and expect the same results. You have to use the hash for that.

        • @FizzyOrange
          link
          22 months ago

          That’s exactly the same in git. The old commits are still there, they just don’t show up in git log because nothing points to them.

          • @aport
            link
            12 months ago

            Old, unreachable commits will be garbage collected.

            • @FizzyOrange
              link
              22 months ago

              Does that not happen with Mercurial? If not that seems like a point against it.

              • @aport
                link
                12 months ago

                I’m confused, the behavior you just said was “exactly the same in git” is now a problem for Mercurial?

                • @FizzyOrange
                  link
                  12 months ago

                  I thought it was exactly the same based on the description.

                  • @[email protected]
                    link
                    fedilink
                    English
                    1
                    edit-2
                    2 months ago

                    No the old commit is always there, marked as obsolete with the information of what it became. No holes in history. (Assuming you use the obsolecense markers)