GitHub is a 'social website' that allows users to host their source code there. It gives you multiple ways to edit your source code:
- Edit directly using a web interface
- Push updates with
git push
- Commit changes with svn integration
svn commit
- ... (maybe more that I don't know of)
Depending on your perspective, you could make all kinds of guesses here:
- If you only edit files using the web interfaces, it may seem you're editing files in a non-bare repo
- If you only push and pull using
git
commands, it may seem you're talking to a bare git repo at the other end
- If you only use Subversion commands, it may seem you're talking to a Subversion repo at the other and
- If you aware of all these at the same time, then you can guess that all the different methods of access boil down to the same common internal mechanism
GitHub provides lots of extra magic to hide the internal details from you. I would guess there are bare git repos at the core. The web interface could either work with a non-bare clone of the original bare repo, or it could have a working tree of the files, and using git commands in the fashion: GIT_DIR=/path/to/bare.git git somecommand
. In reality, it's probably much more complicated than that.
Technically, they don't even need to be using Git repositories underneath. At the core, they could be using SomeSystemXYZ, that implements all the necessary protocols to give the appearance that you're working with a Git or Subversion repository. You can only know how a website really works by looking at their source code.