5 ms·
Local Git remotes
- antiframe 5mo agoGitHub has been such a staple of the modern dev that some are now (re)discovering git is distributed.
- alsobrsp 5mo agoEverything old is new again. I wouldn't be surprised if there were people that thought GitHub invented git.
- enoint 5mo agoMore precisely, a movement to leave GitHub mistakenly endeavors to leave git.
- orev 5mo agoThat assumption has come up in almost every conversation I’ve ever had with semi-technical people regarding git, so the confusion is just a fact. It happens so often, I think Linus (or whoever controlled the git trademarks at the time) should have demanded GitHub change their name when it was launched.
- elevation 5mo ago> thought GitHub invented git Putting the generic term into your corporation's name can be effective means of claiming things that don't belong to you. Jon Postel reserved 44.0.0.0/8 for a generic purpose: "amateur radio digital communications." Decades later, there was a successful heist when some enterprising individuals who had incorporated "Amateur Radio Digital Communications" misrepresented to ARIN that the assignment had actually been theirs. Immediately after ARIN gave them transfer rights, they pocketed 8 figures reselling the space to Amazon. Github obviously isn't making explicit claims like this but they benefit whenever people with purchasing power implicitly understand that github is the only option. edited: Amateur Radio Digital Communications is not an LLC
- neuronexmachina 5mo agoDo you have a source for your claims about the ARDC?
- elevation 5mo agoThis lengthy email thread[0] indicates that Jon Postel made the assignment in 1992, that the entity "Amateur Radio Digital Communications" wasn't formed until years later, meaning Jon's assignment had to have been for a purpose and not to an entity of the same name. The head of ARIN defends[1] the transfer throughout the thread. [0]: https://seclists.org/nanog/2019/Jul/366 https://seclists.org/nanog/2019/Jul/366 [1]: https://seclists.org/nanog/2019/Jul/458 https://seclists.org/nanog/2019/Jul/458
- neuronexmachina 5mo agoFrom your earlier comment it sounded like there was a "heist" simply based on having a similar name. Looking into it though, it seems like the ARDC non-profit did a pretty reasonable job of proving they were the same folks who'd been managing the IP block for decades. Also, has there been any sort of allegation that they've misused the funds? From what I understand they've pretty consistently used the funds to support amateur radio.
- wanzg 5mo agoOne of my younger colleagues indeed displayed a mistaken impression of that kind last week.
- jjice 5mo agoI know so many people I went to school with and have worked with that _still_ couldn't tell you the difference between git and GitHub.
- tardedmeme 5mo agoI don't think I've ever met a programmer online who didn't think git and github were the same thing.
- mystifyingpoi 5mo agoWhat's the purpose of this? I don't get it. Why push at all to "local remote", if you can just keep your changes on a local branch, and push it whenever "remote remote" becomes available again?
- pokstad 5mo agoI use this to push changes to a local encrypted sparse bundle image, and then I periodically rsync that image to a remote disk. Git has no built in encrypted storage, so pushing directly to a remote means you trust that remote.
- ulrikrasmussen 5mo agoI am also seriously puzzled and don't see the point. Why push to a local remote if the real remote is not reachable? The branch is still not leaving your machine, you are just making a copy of it in another place and now have to manage `local/` refs in addition to `origin/`.
- fwip 5mo ago"local" can also be a network fileshare. It could also be in a directory that is treated differently than your other checkouts - whether that's something like deployment, sharing over the web, running CI, etc.
- ulrikrasmussen 5mo agoI doubt it is safe to concurrently modify a git repo over a fileshare though. I don't understand the other use cases you mention
- mystifyingpoi 5mo ago"network fileshare" is not local. By the same logic, I can mount S3 bucket over fuse and call it "local". Sure, it will work, but in the context it is just nonsense.
- 5mo ago
- globular-toast 5mo agoA "local remote" is a contradiction. Unless the remote is on a different disk you are just wasting space. Even then the point of remotes is for sharing, not for backup/redundancy.
- orev 5mo agoWhat if you have a few local machines you’re using for development, and want to keep them in sync? This method allows that single central repo without having to bounce all the code through a cloud hosting service.
- globular-toast 5mo agoOK, different meanings of word "local". TFA uses "local" to mean the same machine, not the same local network.
- Zambyte 5mo agoThe remote can be a shared directory that multiple users have access to, and the working directory is private where each user only has private read + write access.
- cowmix 5mo agoI use them ALL THE TIME. If anything, I have my 'local remote' in my Syncthing shared dir - its great for sharing code between my dev workstation(s) w/o using Github, etc.
- cerved 5mo agoyou can also setup a local remote which hardlinks the index so it doesn't occupy more space. Why? Idk. You don't want to share stash, rerere-cache, branches whatever. Also handy if you're running an agent in a container on the local fs. Set up a local clone, contain the agent to that repo folder and have it hack away on that. Later, you step out of the container and do the syncing. You can't use worktrees in this situations. Bare repos are also pretty cool. You can clone the git mailing list as a bare repo and search for threads there instead of setting up an mbox (same for the kernel obviously)
- fphilipe 5mo agoAt that point you might as well use a worktree[1]. [1]: https://git-scm.com/docs/git-worktree https://git-scm.com/docs/git-worktree
- cyanydeez 5mo agowhich harness has actual containment controls and not just suggestions?
- sciolizer 5mo ago> hardlinks the index I think you mean hardlinks the object database? The index (staging area) changes constantly. Not much point in hardlinking it. Hardlinking the object database is the default behavior with you clone locally on linux. It's great for one-off clones such as CI/CD pipelines and agentic containers, but the benefit in terms of disk space saved is short-lived: as repos evolve independently, they replace their packfiles with new ones, and the new ones will not be hardlinked because they don't contain the same objects. I like to keep bare repositories in dropbox, but I use `--no-hardlinks` when cloning, because before I did that, on one occasion, dropbox corrupted the bare repo, and my working repo was corrupted as a result.
- nasretdinov 5mo agoYou can also have multiple independent git repos that don't duplicate the full object store, via git clone --reference. It's less relevant in the container era, but otherwise it can save a lot of time and disk space when cloning repos repeatedly
- packetlost 5mo agoOh, that's actually really useful for my... inefficient clone of nixpkgs and the linux kernel...
- yjftsjthsd-h 5mo agoInteresting; how's it compare to work trees?
- nasretdinov 5mo agoWorktrees are different checkouts of the same repo. Clone with --reference is a separate repo altogether, with its own .git and worktree.
- cerved 5mo agoWorktrees effectively share the entire state of the repo. Only limitation is that a branch can only be checked out in one repo at a time. Clones only share the immutable object store For most practical uses of same repo checking out different branches locally, worktrees are better. The nice thing about clones is that you can have a backup clone, a wip clone, a review clone where you don't clutter the amount of local branch refs
- cerved 5mo agoofc if you're running AI agents in YOLO mode — clones means you don't need to worry that Sonnet is going to see your .git/index.lock file and go "this is blocking me, let's rm -f this" and corrupt all your work that you never bothered pushing
- enoint 5mo agoIt’s hard to sincerely bring up things like site-to-site VPN, without condescending.
- ucirello 5mo agoThat's what I used to do with git (just recently moved off of SVN) in a shared computer predating github. It works very well!
- thehwang 5mo ago[flagged]
- zenoprax 5mo agoI was expecting the use of non-SSH git remotes without network access. Any mounted file system can be a valid remote such as a USB drive. I use file-based remote to keep some repos encrypted on S3 using Rclone. For example, `git remote -v` would show: `secure-s3 /mnt/fuse/rclone/secure-s3/git/$REPO.git` I think concurrency is a problem with file-based remotes but for one person keeping a desktop and laptop in sync it is much simpler than running a VPS.
- kmarc 5mo agoI use Keybase's encrypted git repo the same way (to sync "private" dotfiles across laptops / remote workstations)
- joeyguerra 5mo agoI love reading articles like this. It's kinda of a slap in the face – "hey guys, you know that thing you've been doing for decades, well for decades you've had this ability to do it with your own stuff if you just spend a few human brain tokens on it". btw, Git also supports the HTTP protocol ...
- jjice 5mo agoWhile yeah it's a thing that many people already are familiar with, I don't think it hurts to push out these concepts once and a while to help spread info to recalibrate those who hadn't learned these yet. I'd rather we have a bunch of articles explaining git specifics than a bunch of engineers that don't know the difference between git and GitHub.
- chriswarbo 5mo ago> btw, Git also supports the HTTP protocol ... In fact, Git supports any protocol! If you add a git remote like git remote add my-remote my-super-duper-protocol::some-sort-of-address-thingy Then pushing/pulling `my-remote` will try to invoke a command called `git-remote-my-super-duper-protocol`, with `some-sort-of-address-thingy` in its arguments. You can implement that however you like. I use remotes like "pkipfs::y5a9inx61aski4miz4sgmg55qgbazxhfwab3i6ee1ypa6rnumi8o", which invokes a custom git-remote-pkipfs command that pushes/pulls object data to IPFS and resolves/updates refs as subdomains of a specified pkarr address.
- whax 5mo agoInteresting that the footer of the page contains the magic string Anthropic provides to trigger model refusal (styled small and clear).
- barnabee 5mo agoI do this to a ~/git-sync/<project>.git directory that's synced over Syncthing for all my personal projects it's great.
- cowmix 5mo ago[dead]
- shmerl 5mo agoCan it work with file://?
- js2 5mo agoYes: $ git init foo Initialized empty Git repository in .../foo/.git/ $ git clone "file://$PWD/foo" bar Cloning into 'bar'... But it's redundant: $ git clone bar baz Cloning into 'baz'... If you example .git/config in either clone, you'll see that remote.origin.url is the absolute path of the source repo. Note that you can share objects across clones on the same machine in various ways. See "--local", "--shared", and "--reference" in the git-clone man page. (GitHub uses this feature heavily. Or at least they did. I have no idea what their backend implementation is these days, but they must be doing some sort of copy-on-write CAS for forks.)
- shmerl 5mo agoGood to know, thanks. I should try it with vim.pack for local repos.
- tuyiown 5mo agogit push . <branch1>:<branch2> git pull . <branch2>:<branch1>
- joseph 5mo agoSometimes I do this if I want to cherry pick commits from another repo already on my machine. Add the other repo as a local remote and then I can "import" that code while keeping its history in the new repo.
- dogscatstrees 5mo agoNice. Claude likes it, especially when the AI detects PII and knows by policy to halt the commit to cloud but not local. > A related trick worth knowing — one git push can fan out to two destinations: git remote set-url --add --push origin ~/bares/<repo>.git # add a 2nd push URL # now `git push origin` writes to GitHub AND the local bare repo
- codepack 5mo agoIn my experience, local remotes shine when you have multiple clones of the same repo on the same machine (e.g., different working trees) and you want to share objects without re-downloading or using symlinks. Also, for quick offline backups: `git push /mnt/backup/repo.git --all` is dead simple. To answer mystifyingpoi's question, one reason to push to a local remote is if you want a separate copy that isn't affected by your branch naming—or if you're using multiple clients (like a work and personal repo) that need to sync when network is available later.