How to use local filesystem remotes with git

If you develop with git and use multiple computers, you may find you want to keep your repos updated across these different computers. One way to do this is to use a git repo hosting provider like Github and push and fetch from remote branches.

Though there could be reasons why you might not want to do this: privacy, setup time, code you’re not ready to push to the rest of the world, … Another way you could do it is to copy your repo onto a USB disk or cloud drive, either zipped or uncompressed, then copy it onto the second computer and continue work. This works, but it is easy to get files out of sync.

Another option is to host your own local filesystem git remote repo. To do this, you need to create a bare repo:

cd repos # change to whichever directory you like
git init --bare myrepo.git

This will create a repo called myrepo.git that you can use as a remote. (Bare repos are normal repos but without a working copy of the code.) You can setup your bare repo wherever is convenient for you. In order to share it across multiple computers, it could be on a networked drive, a usb disk, a cloud drive such as Dropbox, …

Then you need to hook the repo where you’ve been working up to the remote. So, from that directory, run:

git remote add origin /path/to/repos/myrepo.git

The identifier origin is commonly used for remotes, but this can be what you like. Then push master or any other branches you want to have available to the remote.

git push origin master

Now to create a new working copy, you can clone the repo in a new directory:

git clone /path/to/repos/myrepo.git

To update a copy you can use standard git fetch, merge, pull, rebase commands with your branches as normal. For example:

git fetch origin
git merge origin/master

Or to link an existing copy of the repo to the remote and pull in remote branches:

git remote add origin /path/to/repos/myrepo.git
git fetch origin

Then merge changes as needed.

Other useful commands

To show information about a remote, for example if tracked branches are up-to-date:

git remote show origin

To show log messages of the changes between branches:

git log origin/master ^master

To show differences between branches:

git diff origin/master master