Git pull de outro repositório

95

Eu tenho um repositório chamado Generic, que é um aplicativo genérico. Eu fiz um fork em um repositório chamado Acme, que apenas se baseia no Genericrepositório armazenado do aplicativo e adiciona a marca Acme Co a ele.

Se eu fizer alterações na funcionalidade principal em Generic, desejo atualizar o Acmerepositório com as últimas alterações que fiz na funcionalidade principal em Generic. Como eu faria isso?

Pelo que posso dizer, estou essencialmente tentando mesclar as alterações feitas em um repositório upstream na bifurcação atual.

Se isso significa alguma coisa, estou tentando fazer isso porque tenho um aplicativo genérico sobre o qual desenvolvo e faço a marca para clientes individuais (como Acmeneste exemplo). Se houver uma maneira mais limpa de fazer isso, me avise.

Libbux
fonte

Respostas:

135

Emita o seguinte comando em seu Acmerepo. Ele adiciona um novo repositório remoto denominado upstreamque aponta para o Genericrepo.

git remote add upstream https://location/of/generic.git

Você pode então mesclar quaisquer alterações feitas Genericno branch atual Acmecom o seguinte comando:

git pull upstream

Se você deseja apenas fazer o download das alterações sem mesclar automaticamente, use em git fetchvez de git pull.

Se você deseja desativar o envio para esse repositório, defina o URL de envio para um URL inválido usando algo como

git config remote.upstream.pushurl "NEVER GONNA GIVE YOU UP"

Git irá gritar com você sobre não ser capaz de encontrar um repo se você tentar empurrar para upstream(e desculpe pelo Rickroll, mas foi a primeira string aleatória que surgiu na minha cabeça).

McLovin
fonte
6
Excelente, obrigado. Só mais uma coisa: há uma maneira de tornar este controle remoto somente leitura, para não acabar acidentalmente empurrando para ele?
Libbux
1
Comecei a responder, mas vejo que McLovin já editou sua resposta para incluir isso.
Frankie Simon,
4
Desde o git 2.9, você precisará especificar o sinalizador --allow-unrelated-histories. Consulte stackoverflow.com/a/37938036/3799847
sfinks_29
5
Eu precisava emitirgit pull --allow-unrelated-histories upstream master
Alec Jacobson
Eu tentei isso, mas git pull upstreamapenas trava ... alguma ideia?
Paulo Carvalho
6

Para obter um branch específico de um repo diferente, você pode usar o comando git abaixo.

git pull <git_url> <branch> --allow-unrelated-histories
vin
fonte