Quick & Dirty Git Mirroring

A situation that happens often – you’re working on a repository (GitHub for example) also want your commits automatically mirrored to anther repository.

The obvious solution is to add a second remote, but that means having to constantly remember to push to both remotes. After playing around with the idea of aliases and hooks, I fell upon a little-known Git feature – secondary fetch and push URLs.

We can add additional fetch and push URLs for a remote by using the reite set-url For example, to add https://my-backup-remote as a remote for the current git remote set-url –add –push origin https://my-backup-remote

Taking a peek at the .config fileL

[remote “origin”] url = https://github.com/alanapz/snorlax.git fetch = +refs/heads/:refs/remotes/origin/ pushurl = https://github.com/alanapz/snorlax.git pushurl = \\192.168.1.40\public\projects\snorlax And

C:\dev\adista\snorlax>git remote show origin

C:\dev\adista\snorlax>git push origin head -v Pushing to https://github.com/alanapz/snorlax.git To https://github.com/alanapz/snorlax.git = [up to date] head -> master updating local tracking ref ‘refs/remotes/origin/master’ Everything up-to-date Pushing to \192.168.1.40\public\projects\snorlax To \192.168.1.40\public\projects\snorlax = [up to date] head -> master updating local tracking ref ‘refs/remotes/origin/master’ Everything up-to-date

Notice that fetches are not affected – we fetch from only the fetch URL (perfect – it doesn’t really make sense to fetch from our backup remote).

C:\dev\adista\snorlax>git fetch -v
From https://github.com/alanapz/snorlax
 = [up to date]      master     -> origin/master

Quick, easy & dirty !

Comments

Leave a Reply