Intro

This tip is based on my (Matt Ford) experience of using git annex with my out-and-about netbook which hits many different wifi networks and has no fixed home or address.

I'm not using a bare repository that allows pushing (an alternative solution) nor do I fancy allowing git push to run against my desktop checked out repository (perhaps I worry over nothing?)

None of this is really git annex specific but I think it is useful to know...

Dealing with no fixed hostname

Essentially set up two repos as per the walkthrough.

Desktop as follows:

cd ~/annex
git init
git annex init "desktop"

And the laptop like this

git clone ssh://desktop/annex
git init
git annex init "laptop"

Now we want to add the the repos as remotes of each other.

For the laptop it is easy:

git remote add desktop ssh://desktop/~/annex 

However for the desktop to add an ever changing laptops hostname it's a little tricky. We make use of remote SSH tunnels to do this. Essentially we have the laptop (which always knows its own name and address and knows the address of the desktop) create a tunnel starting on an arbitrary port at the desktop and heads back to the laptop on its own SSH server port (22).

To do this make part of your laptop's SSH config look like this:

Host desktop
User matt
HostName desktop.example.org
RemoteForward 2222 localhost:22

Now on the desktop to connect over the tunnel to the laptop's SSH port you need this:

Host laptop
User matt
HostName localhost
port 2222

So to add the desktop's remote:

a) From the laptop ensure the tunnel is up

ssh desktop

b) From the desktop add the remote

git remote add laptop ssh://laptop/~/annex

So now you can work on the train, pop on the wifi at work upon arrival, and sync up with a git pull && git annex get.

An alternative solution may be to use direct tunnels over Openvpn.