$ mkdir abc.git
$ cd abc.git
$ git init --bare
$ git daemon --export-all
$ cd ..
$ mkdir abc.git.dump
$ cd abc.git.dump
$ git clone ../abc.git #in late time, need to pull from abc.git manually for getting the latest content in abc.git
create local git repo and commit files into local repo with TortoiseGit
push local repo to abc.git with TortoiseGit
browse the full branches in repo with GitExtensions
c:\path-to-local-repo d:\_work\projects\abc anonymous access
git://host/path-to-repo git://linuxhostname/home/username/abc.git anonymous access, read only
repo always sits in the working dir: the .git folder in working dir
the difference between normal git repo and bare git
One important thing is that you should push only to remote branches that are not currently checked out on the other side (for the same reasons you never switch to a remote branch locally)! Otherwise the working copy at the remote branch will get out of date and confusion will ensue. The best way to avoid that is to push only to remote repositories with no working copy at all - so called bare repositories which are commonly used for public access or developers' meeting point - just for exchange of history where a checked out copy would be a waste of space anyway. You can create such a repository. See Setting up a public repository for details.