This maybe has been answered, but I didn't find a good answer.
I come from centralized repositories, such as SVN, where usually you only perform checkouts, updates, commits, reverts, merges and not much more.
Git is driving me crazy. There are tons of commands, but the most difficult to understand is why many things work as they do.
According to "What is a bare git repository?":
Repositories created with
git init --bare
are called bare repos. They are structured a bit differently from working directories. First off, they contain no working or checked out copy of your source files.
…
A bare repository created withgit init --bare
is for… sharing. …developers will clone the shared bare repo, make changes locally in their working copies of the repo, then push back to the shared bare repo to make their changes available to other users.
– Jon Saints, http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/
However, from the accepted answer to "what's the difference between github repository and git bare repository?":
Git repos on GitHub are bare, like any remote repo to which you want to push to [sic].
– VonC, https://stackoverflow.com/a/20855207
However, in GitHub there are source files. I can see them. If I create a bare repository, there are no source files, only the contents for .git
directory of a working repository.
How is this possible? What don't I understand?
Can you give an example about why I would need a bare repository and its motivation to work that way?
UPDATE
Edward Thomson's answer is, in part, what I wanted to know. Nevertheless, I will rephrase my question:
First link I posted states("What is a bare git repository?"):
they [bare repositories] contain no working or checked out copy of your source files.
VonC's answer:
Git repos on GitHub are bare
Both statements implies
Github has no working copy.
Edward Thomson says:
it renders the web page based on the data as you navigate through it - pulling the data directly out of the repo and out to your web browser, not writing it to a disk on the fileserver first
Somehow, a bare repository has to contain all data and source code. If not, it wouldn't be impossible to render anything, because I can see all source code updated (commited), all branches (with their respective source), the whole log of a repo, etc.
Is there the whole data of a repository always within .git directory (or in a bare repo), in some kind of format which is able to render all files at any time? Is this the reason of bare repository, while working copy only has the files at a given time?