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.
> 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.
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.
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.
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.
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.
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...
> 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).
I recall a time when github was having an outage at the same time me and a coworker were trying to fix a high priority issue.
I had pushed my changes before the outage but he couldn't pull them.
I proposed that I share my repo locally so he could pull from me,
but he looked confused
and didn't get it,
so I let it drop.
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.
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.
Comment threads certainly work better through email than on GitHub PRs, at least when you can use a good email client (i.e., running locally, and not Outlook).
The challenge is integration with CI and other automatic work flows.
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.
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`
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).
but fyi, depending on your needs, git clone/push/pull doesn't sync everything. For example it doesn't sync .git/hooks
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
The challenge is integration with CI and other automatic work flows.