GitHub: adicionar remoto para pulls e merges

Depois de olhar para O protip de @filosottile totalmente incrível demonstrando como fazer checkout de uma solicitação de pull como um branch Eu comecei a pensar que deve haver uma maneira melhor de fazer isso do que ter que martelar todo o refspec todas as vezes.

Inicialmente, procurei maneiras de especificar vários refspecs para o fetchatributo do GitHub remote

[remote "origin"]
url
= git@github.com:user/repo.git
fetch
= +refs/heads/*:refs/remotes/origin/*

… mas, AFAICT, o fetchatributo leva apenas o único refspec. Então me ocorreu, se não podemos adicionar mais refspecs a um controle remoto, talvez pudéssemos simplesmente adicionar mais remotes! Então eu liguei git config -ee fiz isso …

[remote "origin"]
url
= git@github.com:user/repo.git
fetch
= +refs/heads/*:refs/remotes/origin/*

[remote "origin-pull"]

url = git@github.com:user/repo.git

fetch = +refs/pull/*/
head:refs/remotes/origin-pull/*

[remote "origin-merge"]

url = git@github.com:user/repo.git

fetch = +refs/pull/*/
merge:refs/remotes/origin-merge/*

… et viola! A git remote updateme deu isso …

$ git remote update
Fetching origin
Fetching origin-pull
From github.com:user/repo
* [new ref] refs/pull/1/head -> origin-pull/1
Fetching origin-merge
From github.com:user/repo
* [new ref] refs/pull/1/merge -> origin-merge/1

Agora eu posso merge/ rebasecommits de solicitações pull do GitHub sem ter que adicionar um remotepara o fork do autor (e sem ter que me lembrar disso refspec. Dado que o GitHub fecha os problemas assim que você mescla e envia para o branch, isso cria um manuseio legal de solicitações pull usando apenas gitFerramentas!

PS- Tenho certeza de que também podemos estender isso para abranger git-notes.