Github Pull-Requests lokal auschecken

Wer auf Github ein Projekt wartet, kennt die Situation: Ein neuer Pull-Request wird eröffnet und man möchte die Änderungen gerne lokal ausprobieren, bevor man sie merged. Aber wie geht das am einfachsten?

In diesem Tipp zeige ich am Beispiel vom Repository openhsr/www.openhsr.ch, wie man bequem Pull-Requests lokal auschecken kann.

Falls du noch keine lokale Kopie des Projekts hast, dann klone es jetzt:

$ git clone https://github.com/openhsr/www.openhsr.ch.git
$ cd www.openhsr.ch/

Damit wir nicht jeden Pull-Request von Hand herunterladen müssen, ergänzen wir die Git-Konfiguration, so dass auch Pull-Requests bei einem fetch heruntergeladen werden.

$ git config --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

Wenn wir nun mittels fetch Änderungen aus Remote Repository herunterladen, werden auch Pull-Requests als Branches heruntergeladen:

$ git fetch
remote: Counting objects: 53, done.
remote: Total 53 (delta 20), reused 20 (delta 20), pack-reused 33
Unpacking objects: 100% (53/53), done.
From https://github.com/openhsr/www.openhsr.ch
 * [new ref]         refs/pull/14/head -> origin/pr/14
 * [new ref]         refs/pull/24/head -> origin/pr/24
 * [new ref]         refs/pull/27/head -> origin/pr/27
 * [new ref]         refs/pull/28/head -> origin/pr/28
 * [new ref]         refs/pull/29/head -> origin/pr/29
 ...

Mit jedem fetch werden nun also alle Pull-Requests als Branches heruntergeladen.

Ein beliebiger Pull-Request kann jetzt wie jeder andere Branch ausgecheckt werden:

$ git checkout pr/51

Wenn du dieses Kommando oft brauchst, lohnt es sich einen Alias einzurichten.

alias setup-pr-fetch="git config --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'"