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.
Chris Dutrow
fonte
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
1
possível duplicata de puxar / empurrar a partir de vários locais remotos
AD7six
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
magro
fonte
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://[email protected]/user/myproject.git
Josh_at_Savings_Champion
fonte
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://[email protected]/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
    
dihardmg
fonte
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
dinith jayabodhi
fonte
1
git remote add origin2 https://github.com/Company_Name/repository_name.git

e para uso push:

git push -u origin2 master
Lovepreet Kaur
fonte
1
git remote set-url --add --push origin [email protected]:user/my-project.git
git remote set-url --add --push origin [email protected]:user/my-project.git

Agora você tem 2 origens.

Ostap B.
fonte
1
Esta resposta é mais útil / refinada do que outras, graças à --pushopção.
Dmitri Zaitsev