• 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.
  • MajorHavoc@programming.dev
    link
    fedilink
    arrow-up
    27
    ·
    3 months ago

    I’m pleased to report that git has made significant strides, and git submodule can now be easily used to achieve a mono-repo-like level of painful jankiness.

  • collapse_already@lemmy.ml
    link
    fedilink
    English
    arrow-up
    9
    ·
    3 months ago

    I use git daily and still wonder why I had fewer merge issues on a larger team in the 1990s with command line rcs on Solaris. Maybe we were just more disciplined then. I know we were less likely to work on the same file concurrently. I feel like I spend more time fighting the tools than I ever used to. Some of that is because of the dumb decisions that were made on our project a decade or more ago.

    • EatATaco@lemm.ee
      link
      fedilink
      English
      arrow-up
      8
      ·
      3 months ago

      I know we were less likely to work on the same file concurrently.

      I mean, isn’t that when merge conflicts happen? Isn’t that your answer?

      • collapse_already@lemmy.ml
        link
        fedilink
        English
        arrow-up
        2
        ·
        3 months ago

        I was trying to say that tools were better about letting us know that another developer was modifying the same file as us, so we would collaborate in advance of creating the conflict.

  • Mikina@programming.dev
    link
    fedilink
    arrow-up
    8
    ·
    3 months ago

    My best VCS experience so far was when working with Plastic SCM. I like how it can track merges, the code review workflow is also nice, and in general it was pretty nice to work with.

    Fuck Unity, who paywalled it into unusability, though. Another amazing project that was bought and killed by absurd monetization by Unity, same as Parsec.

  • Ananace@lemmy.ananace.dev
    link
    fedilink
    arrow-up
    7
    arrow-down
    1
    ·
    3 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)

    • SkyNTP@lemmy.ml
      link
      fedilink
      arrow-up
      10
      ·
      3 months ago

      I suspect rebasing makes sequential commit IDs not really work in practice.

      • wewbull@feddit.uk
        link
        fedilink
        English
        arrow-up
        7
        arrow-down
        1
        ·
        3 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.

          • wewbull@feddit.uk
            link
            fedilink
            English
            arrow-up
            3
            ·
            3 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.

              • wewbull@feddit.uk
                link
                fedilink
                English
                arrow-up
                2
                ·
                2 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@programming.dev
          link
          fedilink
          arrow-up
          3
          arrow-down
          1
          ·
          3 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.

  • greysemanticist@lemmy.one
    link
    fedilink
    arrow-up
    5
    ·
    3 months ago

    jujutsu is a fresh take on git-- you describe the work you’re about to do with jj new -m 'message'. Do the work. Anything not previously ignored in .gitignore is ready to commit with jj ci. You don’t have to git add anything. No futzing with stashes to switch or refocus work. Need that file back? jj restore FILENAME.

    • AnActOfCreation@programming.devOP
      link
      fedilink
      arrow-up
      8
      ·
      3 months ago

      It’s very optimistic to think people will be able to describe what they’re going to do before they do it. I find things rarely go exactly as planned and my commit messages usually include some nuance about my changes that I didn’t anticipate.

  • masterspace@lemmy.ca
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    3 months ago

    Facebook uses Mercurial, but when people praise their developer tooling it’s not just that. They’re using their CLI which is built on top of Mercurial but cleans up its errors and commands further, it’s all running on their own virtual filesystem (EdenFS), their dev testing in a customized version of chromium, and they sync code using their own in-house equivalent of GitHub, and all of it connects super nicely into their own customized version of VS Codium.

    • villainy@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      3 months ago

      The inhouse tooling from the massive tech companies is very cool but I always wonder how that impacts transferrable skills. I work in a much smaller shop but intentionally make tech decisions that will give our engineers a highly transferrable skill set. If someone wants to leave it should be easy to bring their knowledge to bear elsewhere.

      • ByteOnBikes@slrpnk.net
        link
        fedilink
        arrow-up
        1
        ·
        3 months ago

        Speaking from my own experience and a few other seniors I work with, you try to recreate solutions you like at those smaller shops. It may not be identical, but you know what’s possible.

        I came into a company that didn’t have a system to manage errors. At my old job, errors would get grouped automatically and work can be prioritized through the groupings. The new company only handled errors when they saw it, by word of mouth.

        Immediately went to work setting up a similar system.

        • senkora@lemmy.zip
          link
          fedilink
          arrow-up
          1
          ·
          3 months ago

          There’s also a whole industry of ex-Googlers reimplementing Google tooling as SaaS services to sell to other ex-Googlers at other companies.

          There’s even a lookup table: https://github.com/jhuangtw/xg2xg

          (some of those are open source projects, some are SaaS services)

      • masterspace@lemmy.ca
        link
        fedilink
        English
        arrow-up
        1
        ·
        3 months ago

        The source control was so smooth and pleasant that it convinced me that git isn’t the be all end all, and the general developer focus was super nice, but some of that tooling was pretty janky, poorly documented, and you had no stack overflow to fall back on. And some of it (like EdenFS), really felt like it was the duct tape holding that overloaded monorepo together (complete with all the jankiness of a duct tape solution).

  • Treczoks@lemmy.world
    link
    fedilink
    arrow-up
    2
    arrow-down
    1
    ·
    3 months ago

    What kind of RCS is used always depends on the organisation. We are actually using GIT and SVN, and both make sense for the departments that are using them.

    • x1gma@lemmy.world
      link
      fedilink
      arrow-up
      10
      ·
      3 months ago

      Serious question, why do they use SVN, as in what does SVN better than Git for the department using it?

      • Mikina@programming.dev
        link
        fedilink
        arrow-up
        5
        ·
        3 months ago

        While I’m not using it, since we started our small-team hobby project in git and moving away from it would be a bother, there is one use-case of SVN that would save us a lot of headaches.

        SVN being centralized means you can lock files. Merging Unity scenes together is really pain, the tooling mostly doesn’t work properly and you have no way how to quickly check that nothing was lost. Usually, with several people working on a scene, it resulted in us having to decide whose work we will scratch and he will do it again, because merging it wouldn’t work properly and you end up in a situation where two people each did hundreds or thousands of changes to a scene, you know that the Unity mergetool is wonky at best, and checking that all of those changes merged properly would take longer and be more error prone than simply copying one persons work over the other.

        We resorted to simply asking in chat if anyone has any uncommited work, but with SVN (or any other centralized VSC, I suppose) we wouldn’t have to bother with that - you simply lock the scene file and be safe.

        • FizzyOrange@programming.dev
          link
          fedilink
          arrow-up
          4
          ·
          3 months ago

          Git LFS does actually support file locking. But in general I find LFS to be hackily pasted onto Git and not very good (as with submodules).

        • x1gma@lemmy.world
          link
          fedilink
          arrow-up
          2
          ·
          3 months ago

          Right, completely forgot that locking exists in SVN, and I guess it definitely makes sense if you’re collaboratively editing unmergeable files.

          Thanks!

      • Treczoks@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        3 months ago

        SVN has the big advantage of serialized revision numbers. Which is essential for out build- and release-system.

      • leds@feddit.dk
        link
        fedilink
        arrow-up
        1
        ·
        3 months ago

        SVN admin here:

        • easy to partial checkouts, no need to clone entire repo
        • euuuh…
        • much simpler for non developers that need version control e.g. engineers
  • AwkwardLookMonkeyPuppet@lemmy.world
    link
    fedilink
    English
    arrow-up
    11
    arrow-down
    12
    ·
    3 months ago

    Because Facebook is a terrible company that can’t even build a functional website. They think they know better than the entire industry, yet can’t get basic features like browser history, link sharing, back buttons, or even comments and zooming working. Fuckin idiots.