Um projeto pode ter várias origens?


188

Um projeto pode ter duas (ou mais) "origens" no Git?

Eu gostaria de enviar um único projeto ao github e ao servidor Heroku .

Especificamente, esse erro aparece ao adicionar o repositório do github:

$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.

8
Você pode ter quantos repositórios remotos quiser, mas deve dar a eles nomes diferentes.
Felix Kling

O nome do repositório é diferente nesse caso. A palavra "origem" é um nome que pode ser alterado?
31412 Chris Dutrow

4
Sim git remote rename <old> <new>: linux.die.net/man/1/git-remote . Mas você também pode nomear o repositório Github diferente ...
Felix Kling


E é possível tornar um dos controles remotos o padrão, para que não seja solicitado que eu escreva explicitamente o nome desse controle remoto toda vez que estou pressionando?
40detectives

Respostas:


275

Você pode ter quantos controles remotos quiser, mas pode ter apenas um controle remoto chamado "origem". O controle remoto chamado "origem" não é de forma alguma especial, exceto que é o controle remoto padrão criado pelo Git quando você clona um repositório existente. Você pode configurar um segundo controle remoto, pressionar / puxar desse controle remoto e configurar algumas ramificações para rastrear ramificações desse controle remoto em vez da origem.

Tente adicionar um controle remoto chamado "github":

$ git remote add github https://github.com/Company_Name/repository_name.git

# push master to github
$ git push github master

# Push my-branch to github and set it to track github/my-branch
$ git push -u github my-branch

# Make some existing branch track github instead of origin
$ git branch --set-upstream other-branch github/other-branch

4
Conforme indicado pela resposta com os votos mais altos para a pergunta que esta possivelmente duplica - um controle remoto pode se referir a vários repositórios. Portanto, você pode enviar para um controle remoto e atualizar dois ou mais repositórios, mas não está claro se esse é o objetivo do OP.
AD7six 28/07/12

Quais são alguns exemplos práticos de por que você gostaria de fazer isso? Por que você teria um diretório apontado para vários repositórios? Cada repositório normalmente tem seu próprio dir dedicado
dspacejs

4
@mightyspaj Quase todo mundo que implanta no Heroku tem um controle remoto chamado origine um remoto chamado heroku.
meagar

@mightyspaj, ou se sua equipe estiver usando garfos e você às vezes quiser acessá-los. Fazemos isso em nossa equipe, trabalhando com equipes em diferentes UTC, para que, quando aprovarmos PRs, possamos fazer uma nova reorganização / envio por lá usando o fork e podermos mesclar código agora, e não amanhã).
Benoit Drapeau

Existe uma maneira de enviar todas as filiais locais de uma vez para o novo controle remoto?
Tanasis

89

Como uma observação lateral para quem se deparar com essa questão mais tarde, é possível enviar a origem para mais de um servidor de repositório git por vez.

Você pode conseguir isso usando o seguinte comando para adicionar outro URL ao controle remoto de origem.

git remote set-url --add origin ssh://git@bitbucket.org/user/myproject.git

8
Para mais pensamentos sobre isso, consulte esta pergunta .
moi

3
Ok, então como excluo uma dessas origens sem excluir todas?
Michael

@ Michael Você pode editar o ./git/configarquivo e remover o arquivo url na secção [remoto "origem"]
Pini Cheyni

8
@ Michaelgit remote set-url --delete origin ssh://git@bitbucket.org/user/myproject.git
Afrig Aminuddin

Todos os controles remotos devem ter o mesmo histórico de consolidação? E se eu quiser para empurrar certos commits com um controle remoto e não o outro
Qasim

44

Aqui está um projeto de amostra com vários controles remotos, GitHub e GitLab:

  1. Adicionar repositório remoto para GitHub

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Adicionar repositório remoto para GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Agora você tem vários controles remotos no projeto. Verifique comgit remote -v

    $ git remote -v
    github https://github.com/Company_Name/repository_name.git (fetch)
    github https://github.com/Company_Name/repository_name.git (push)
    gitlab https://gitlab.com/Company_Name/repository_name.git (fetch)
    gitlab https://gitlab.com/Company_Name/repository_name.git (push)
    
  4. Como você envia para vários repositórios?

    $ git push github && git push gitlab
    

2
Não será apenas $ git pushempurrar para todos os controles remotos?
Water Cooler v2

Temos um problema quando tento empurrar o github e o push automático para o gitlab. Pode me ajudar por favor? Eu quero empurrar uma por uma origem.
Mitul Marsoniya

como eu trabalho com isso se eu tiver dois projetos no gitlab, dois repositórios. eu recebo o código de um projeto e depois o empurro para o outro projeto?
muzi jack 19/09/19

2

você pode adicionar outra conta remota ao seu repositório fornecendo um nome diferente em vez de origem. Você pode usar um nome como origin2. para que seu comando git possa ser modificado como

git remote add origin2 https://github.com/Company_Name/repository_name.git

1
git remote add origin2 https://github.com/Company_Name/repository_name.git

e para uso push:

git push -u origin2 master

1
git remote set-url --add --push origin git@github.com:user/my-project.git
git remote set-url --add --push origin git@bitbucket.org:user/my-project.git

Agora você tem 2 origens.


1
Esta resposta é mais útil / refinada do que outras, graças à --pushopção.
Dmitri Zaitsev
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.