• @Appoxo@lemmy.dbzer0.com
    link
    fedilink
    English
    1
    edit-2
    12 days ago

    How come Git is decentralized?
    Doesnt it need a central component so I can pull your changes?

    Edit: Thanks to all that explained it to me :)

    • @expr@programming.dev
      link
      fedilink
      English
      513 days ago

      Changes can come from anywhere. The Linux kernel itself doesn’t use any central repository like Github, it’s instead done via emailing patches that are eventually merged into the mainline kernel repository managed by Linus.

      It is 100% decentralized.

      • Lka1988
        link
        fedilink
        English
        212 days ago

        mainline kernel repository managed by Linus.

        It is 100% decentralized.

        But… How does that work? The code has to be stored somewhere

        • @expr@programming.dev
          link
          fedilink
          English
          112 days ago

          It’s just for the “last mile” where code gets packaged up into releases. There’s still thousands of developers that have all of the code on their machines as well, it’s just that their local repos aren’t the ones that end up in the hands of end users.

    • KubeRoot
      link
      fedilink
      English
      413 days ago

      Fundamentally, the repository you have on GitHub is the same thing as the repository you have on your computer when you clone it. Pulling and pushing are shorthands for synchronizing commits between the two repositories, but you could also synchronize them directly with somebody else who cloned the repository. As somebody mentioned, you can also just host the same repository on two servers, and push to both of them.

      The issue is that git doesn’t include convenient features like issues, pull requests, CI, wikis, etc., and by extensions, those aren’t included in your local repository, so if GitHub takes them down, you don’t have a copy.

      An extra fun fact is that git can be considered a blockchain. It’s a distributed ledger of immutable commits, each one representing a change in state relative to the previous one. Everybody who clones a repository gets a copy of its entire history and fast forwards through the changes to calculate the current state.

        • @thevoidzero@lemmy.world
          link
          fedilink
          English
          412 days ago

          Git works through ssh. So you need the same system as sshing into your machine. You just make a user group git and then let git and ssh handle things. And if you don’t need people to push to your repo, then it’s a lot easier as it’s now similar to hosting a website/file server.

        • KubeRoot
          link
          fedilink
          English
          112 days ago

          Git exposes a lot of internals through odd commands, so I suspect you could manage synchronization by sending changes over email or something.

          Bonus fun fact: there’s a git bundle command that “dumps” the repository into a single file, that can be interacted with as a remote. So if you’re ever working with a local repository and want to put it on a server over ssh or something like that, you can just create a bundle, scp it over, and clone from that on the server.