## 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.
