It's interesting to me every time one of these "I just figured out I can use git without GitHub" posts comes up.
The entire design of git was intended to be decentralized. You really don't even need the centralized bare repo! You can just point your machines at each other. With Tailscale these days that's especially easy.
Admittedly, I'm getting old, but for the first couple years I used git professionally ~2008-2011 we just pulled from each other's machines. Directly over SSH. We worked in an office, all had each other's machines as remotes. "Hey, is that feature done? Cool, I'll pull it". It worked really well.
Eventually we tossed a bare repo up on a server in the office and switched to push instead of pull. Finish a feature? Push it up! At some point our devops guy installed Gitlab around that, but we never really used the web ui.
Winds changed, we moved to GitHub, eventually a pull request / code review workflow. Here we are now.
pimlottc•about 7 hours ago
GitHub did an incredibly good job of capturing mindspace around git, to the extent that many users don’t realize that there is any distinction between the tool and the hosting platform.
varun_ch•about 6 hours ago
I’m not sure if this is a large scale thing, but I know it’s definitely true for myself and some others.
My first exposure to Git and GitHub was through GitHub Pages. I was told to use the GitHub web editor, ignore all the ‘git’ stuff, and just write the HTML files there. Then I grew into using GitHub desktop and later VSCode’s git integration. At no point did I have to use ‘git’ on the command line so I didn’t really understand what the tool did or why. I think many people simply don’t see git without GitHub. Some even see GitHub without touching git eg. see the infamous ‘I am new to GitHub and I have lots to say’ post https://www.reddit.com/r/github/comments/1at9br4/i_am_new_to...
1718627440•about 9 hours ago
Yeah, you can even just push to an USB stick, if you don't have an Ethernet cable available.
mettamage•about 8 hours ago
> Admittedly, I'm getting old, but for the first couple years I used git professionally ~2008-2011 we just pulled from each other's machines. Directly over SSH. We worked in an office, all had each other's machines as remotes. "Hey, is that feature done? Cool, I'll pull it". It worked really well.
Haha I'm jealous.
We used Airdrop.
And then I was like "shouldn't we use git?"
"Nah, this works fine, you have the code you need now, don't you?"
I was still in my second year of my information science bachelor and he was +60 years old and had programmed for over 2 decades. I was not going to argue with someone that experienced. In retrospect, I should have. But I'd probably been shot down with being "that youngster that always wants to use new technologies" (despite git not being that new anymore).
inatreecrown2•about 8 hours ago
Funny you mentioned Tailscale, since the Author seems to work there.
pwdisswordfishy•about 5 hours ago
> You can’t push changes to a non-bare repo – if you try, Git will reject your push.
Sure you can. If the repo has branch foo checked out, but you're changing branch bar, it will happily let you push to bar (or bar->baz). And even if both are working with the same branch, whether or not you get a warning or it's accepted or rejected is controlled by 'receive.denyCurrentBranch'.
> Because nobody can “work” inside a bare repo, it’s always safe to receive pushes from other locations
Mmm... it's "safe" depending on what you're pushing and what's on the other end, which is no different from trying to push to a non-bare repo.
tonymet•about 5 hours ago
This is one of gits best features . SSH deploys with offline remote version tracking
fragmede•about 4 hours ago
GitHub having a connection of ssh public keys is another feature that's really neat. You can give someone access to your server without having to give them a password somehow.
embedding-shape•about 3 hours ago
Another nice little "hidden" thing is that you can get people's public keys from just a GitHub username, and be kind of sure it is keys in active use, by doing http://github.com/$username.keys.
Exactly. And it’s great to move code around without having to add keys to GitHub/gitlab. Wherever you have ssh access you can push refs , build and deploy. Great for embedded systems where you may have dozens and you don’t want to add keys to GitHub for each one.
socalgal2•about 3 hours ago
It's common to sync via ssh
git clone ssh://mydyn.dns/path/to/repo
If you have unique ssh settings you can put them in .ssh/config
but fyi, depending on your needs, git clone/push/pull doesn't sync everything. For example it doesn't sync .git/hooks
qudat•about 2 hours ago
I use bare git repos and then a statically generated git web viewer using https://pgit.pico.sh
estimator7292•about 2 hours ago
When I quit my last job, I was the only employee left that understood our tech stack. The other was a mechanical engineer and industrial designer. Because I felt that CEO could barely comprehend what git is or why it's important to pay AWS on time, I made a full backup of everything on a USB hard drive.
If you ever need to do this, it can be as simple as "git mirror", with extra steps for LFS and other addons.
That guy definitely did not deserve me to give him $100 of my own personal hard drive stash but out of some sick sense of professionalism I felt I had to give him a failsafe archive. Because, you guessed it, not one byte of the entire company was backed up anywhere.
jonathanlydall•about 5 hours ago
> You can’t push changes to a non-bare repo – if you try, Git will reject your push.
You can push to a folder with a non-bare Git repo, it’s just that you can’t push the same branch which it has checked out.
Or in other words, if you get an error when trying to push to a folder with a checked out repo, push to a different remote branch.
(I do this regularly between WSL and the Windows host)
tomjuggler•about 4 hours ago
Cool! I wrote a similar blog post last year when I decided to "Cut GitHub out of the loop"
My motivation was mainly the fact that Bitbucket cut their free tier, and who knows how long GitHub will be free? So I tried and found out how easy git actually is to sync without third parties
MonkeyClub•about 3 hours ago
> and who knows how long GitHub will be free?
Apparently for as long as it will enable Microsoft to profit by training its LLMs on people's code.
For people uncomfortable with working on free/libre stuff with git directly I always suggest Codeberg as an alternative, but hands on git is also an excellent option.
blibble•about 3 hours ago
I know you're not really supposed to do it, but I've kept my git bare repos in syncthing for years
as long as you don't work on two machines at once and they're always online it's ... fine
(I do have a daily backup though)
kvikshaug•about 6 hours ago
I had a collection of bare repos like this on a private server for a while, but eventually decided to move them to a self-hosted forgejo instance. It provides a nice web interface, and can be configured to create a new repo simply by pushing to a new non-existing repo name, super handy.
ghosty141•about 6 hours ago
Im quite happy with my setup.
I have the stock git server on a vm, gitweb to view things in the browser and gitolite for basic permission management.
Very low tech, almost no maintenance necessary and I dont more for hosting personal projects
_ache_•about 7 hours ago
You know you can send commit by email ?
alansaber•about 5 hours ago
Funny to imagine they may have thought this would be a key USP when developing the feature.
matt_kantor•about 3 hours ago
Git was designed for Linux kernel development, which still uses email patches for contributions.
alansaber•about 3 hours ago
I stand corrected, email appears to be a perfectly logical way of sharing pull requests.
Discussion (28 Comments)
The entire design of git was intended to be decentralized. You really don't even need the centralized bare repo! You can just point your machines at each other. With Tailscale these days that's especially easy.
Admittedly, I'm getting old, but for the first couple years I used git professionally ~2008-2011 we just pulled from each other's machines. Directly over SSH. We worked in an office, all had each other's machines as remotes. "Hey, is that feature done? Cool, I'll pull it". It worked really well.
Eventually we tossed a bare repo up on a server in the office and switched to push instead of pull. Finish a feature? Push it up! At some point our devops guy installed Gitlab around that, but we never really used the web ui.
Winds changed, we moved to GitHub, eventually a pull request / code review workflow. Here we are now.
My first exposure to Git and GitHub was through GitHub Pages. I was told to use the GitHub web editor, ignore all the ‘git’ stuff, and just write the HTML files there. Then I grew into using GitHub desktop and later VSCode’s git integration. At no point did I have to use ‘git’ on the command line so I didn’t really understand what the tool did or why. I think many people simply don’t see git without GitHub. Some even see GitHub without touching git eg. see the infamous ‘I am new to GitHub and I have lots to say’ post https://www.reddit.com/r/github/comments/1at9br4/i_am_new_to...
Haha I'm jealous.
We used Airdrop.
And then I was like "shouldn't we use git?"
"Nah, this works fine, you have the code you need now, don't you?"
I was still in my second year of my information science bachelor and he was +60 years old and had programmed for over 2 decades. I was not going to argue with someone that experienced. In retrospect, I should have. But I'd probably been shot down with being "that youngster that always wants to use new technologies" (despite git not being that new anymore).
Sure you can. If the repo has branch foo checked out, but you're changing branch bar, it will happily let you push to bar (or bar->baz). And even if both are working with the same branch, whether or not you get a warning or it's accepted or rejected is controlled by 'receive.denyCurrentBranch'.
> Because nobody can “work” inside a bare repo, it’s always safe to receive pushes from other locations
Mmm... it's "safe" depending on what you're pushing and what's on the other end, which is no different from trying to push to a non-bare repo.
Adding access to a new user? `curl https://github.com/embedding-shapes.keys >> /home/user/.ssh/authorized_keys`
but fyi, depending on your needs, git clone/push/pull doesn't sync everything. For example it doesn't sync .git/hooks
If you ever need to do this, it can be as simple as "git mirror", with extra steps for LFS and other addons.
That guy definitely did not deserve me to give him $100 of my own personal hard drive stash but out of some sick sense of professionalism I felt I had to give him a failsafe archive. Because, you guessed it, not one byte of the entire company was backed up anywhere.
You can push to a folder with a non-bare Git repo, it’s just that you can’t push the same branch which it has checked out.
Or in other words, if you get an error when trying to push to a folder with a checked out repo, push to a different remote branch.
(I do this regularly between WSL and the Windows host)
https://www.circusscientist.com/2025/07/23/cutting-github-ou...
My motivation was mainly the fact that Bitbucket cut their free tier, and who knows how long GitHub will be free? So I tried and found out how easy git actually is to sync without third parties
Apparently for as long as it will enable Microsoft to profit by training its LLMs on people's code.
For people uncomfortable with working on free/libre stuff with git directly I always suggest Codeberg as an alternative, but hands on git is also an excellent option.
as long as you don't work on two machines at once and they're always online it's ... fine
(I do have a daily backup though)
I have the stock git server on a vm, gitweb to view things in the browser and gitolite for basic permission management.
Very low tech, almost no maintenance necessary and I dont more for hosting personal projects