Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does GitHub use bare repositories under the hood?

Tags:

github

Recently, I discovered that git could be initialized with a --bare flag (e.g. git init --bare). It creates a local repository without a working tree (workspace). As far as I understand, such repositories can be used as a remote from which you can clone, pull and push.

Do GitHub and similar services use "bare repositories" under the hood?

I'm wondering because whenever I create a local repo and push it to a remote service (like GitHub, GitLab, Bitbucket, etc.), I don't create the bare repo myself and I'm not sure if it was created at all (implicitly by GitHub). If it wasn't created, then what is tracking the files/history?


tl;dr

Locally, I can do something like this

-- Step 1. Create a local bare repository

$ mkdir bare-repo/
$ cd bare-repo/
$ git init --bare

-- Step 2. Clone a non-bare repo and push changes

$ mkdir non-bare-repo-1
$ cd non-bare-repo-1
$ git clone ../bare-repo .
$ touch file.txt
$ git add .
$ git commit -m "Add file.txt"
$ git push (it pushes changes to the local remote a.k.a. non-bare/)

And I can create another folder and another and all of them will refer to a single (local) bare-repo/ which tracks changes of all cloned repositories.

I wonder if GitHub uses this approach under the hood, or if the bare repositories are used for something else...

like image 321
Roman Mahotskyi Avatar asked Oct 14 '25 15:10

Roman Mahotskyi


1 Answers

Answering my own question

Do GitHub and similar services use "bare repositories" under the hood?

Yes

It looks like bare git repositories were designed to be used as remote instances and GitHub has to use them to get it to work.

P.S.


Related answer by @VonC

It seems that GitHub repository can work as working repository and bare repository at the same time, does that mean GitHub repository is developed from git bare repository

No, Git repos on GitHub are bare, like any remote repo to which you want to push.


Related answer by @duncan

Short answer

A bare repository is a git repository without a working copy, therefore the content of .git is top-level for that directory.

Use a non-bare repository to work locally and a bare repository as a central server/hub to share your changes with other people. For example, when you create a repository on github.com, it is created as a bare repository.

So, in your computer:

git init
touch README
git add README
git commit -m "initial commit"

on the server:

cd /srv/git/project
git init --bare
Then on the client, you push:

git push username@server:/srv/git/project master

...

like image 196
Roman Mahotskyi Avatar answered Oct 17 '25 03:10

Roman Mahotskyi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!