Mantenha seus github forks sincronizados com 2 URLs diferentes!

Eu uso git e github há um tempo, mas só recentemente descobri que é possível definir 2 URLs separados para buscar e enviar. Muitas vezes, quando eu queria contribuir com um projeto de código aberto, eu tinha que passar pela cerimônia de a) bifurcação do repositório b) clonagem da bifurcação para minha máquina ec) definir um controle remoto upstream para manter a bifurcação em sincronia com o mudanças do repositório original.

Definir o repositório upstream é minha parte menos favorita de trabalhar com git / github – eu sempre tenho que procurar as etapas para fazer isso. Em vez de manter a bifurcação sincronizada, eu só quero ser capaz de buscar as alterações do repositório original (upstream), mas enviar as alterações para minha própria bifurcação.

Acontece que o git suporta este cenário! Normalmente, ao digitar git remote –v, você obtém a seguinte saída:

git remote -v

origin git@github
.com:username/MyForkedRepository.git (fetch)
origin git@github
.com:username/MyForkedRepository.git (push)

Como você pode ver, a ‘origem’ remota define 2 URLs, um com busca de rótulo e outro com push. Vamos definir um URL diferente para o repositório upstream original (aquele de onde buscar):

git remote set-url origin git@github.com:NancyFx/Nancy.git

E outro URL para meu próprio fork (aquele para o qual enviar):

git remote set-url --push origin git@github.com:hmemcpy/Nancy.git

Você também pode fazer isso modificando diretamente o .git/config filee adicionando um pushurlvalor separado em [remote "origin"]:

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

pushurl = git@github.com:hmemcpy/Nancy.git

...

E é isso, agora posso buscar e empurrar normalmente, sem ter que me preocupar com o controle remoto que estou usando!