Un progetto può avere più origini?


188

Un progetto può avere due (o più) "origini" in Git?

Vorrei inviare un singolo progetto sia a github che a un server Heroku .

In particolare, questo errore appare quando si aggiunge il repository github:

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

8
Puoi avere tutti i repository remoti che vuoi, ma devi dare loro nomi diversi.
Felix Kling,

Il nome del repository è diverso in questo caso. La parola "origine" è un nome che può essere cambiato?
Chris Dutrow,

4
Sì, git remote rename <old> <new>: linux.die.net/man/1/git-remote . Ma puoi anche nominare il repository Github in modo diverso ...
Felix Kling

1

È possibile impostare uno dei telecomandi come predefinito, quindi non mi viene chiesto di scrivere esplicitamente il nome di quel telecomando ogni volta che spingo?
40 detective

Risposte:


275

Puoi avere tutti i telecomandi che vuoi, ma puoi avere solo un telecomando chiamato "origine". Il telecomando chiamato "origine" non è speciale in alcun modo, tranne per il fatto che è il telecomando predefinito creato da Git quando si clona un repository esistente. È possibile configurare un secondo telecomando, premere / estrarre da quel telecomando e impostare alcuni rami per tenere traccia dei rami da quel telecomando invece che dall'origine.

Prova invece ad aggiungere un telecomando chiamato "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
Come indicato dalla risposta con il voto più alto per la domanda che questo può eventualmente duplicare, un telecomando può fare riferimento a più repository. Pertanto è possibile passare a un telecomando e aggiornare due o più repository, ma non è chiaro se questo è l'obiettivo dell'OP.
AD7,

Quali sono alcuni esempi pratici del perché vorresti farlo, però? Perché dovresti avere una directory indirizzata a più repository? Ogni repository di solito ha il suo dir dedicato
dspacejs

4
@mightyspaj Praticamente tutti coloro che distribuiscono su Heroku hanno un telecomando chiamato origine un telecomando chiamato heroku.
meagar

@mightyspaj, oppure se il tuo team utilizza le forcelle e a volte vuoi accedervi. Lo facciamo nel nostro team lavorando con team in diversi UTC in modo che quando approviamo i PR, possiamo riformulare / spingere lì per conto usando lì fork e siamo in grado di unire il codice ora, non domani).
Benoit Drapeau,

C'è un modo per spingere tutte le filiali locali contemporaneamente sul nuovo telecomando?
Tanasis,

89

Come nota a margine per chiunque inciampare in questa domanda in seguito, è possibile avere l'origine push su più di un server di repository git alla volta.

È possibile ottenere ciò utilizzando il seguente comando per aggiungere un altro URL al telecomando di origine.

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

8
Per ulteriori riflessioni su questo, vedi questa domanda .
moi,

3
Ok, quindi come posso eliminare una di queste origini senza eliminarle tutte?
Michael,

@Michael Puoi modificare il ./git/configfile e rimuovere il file url nella sezione [remote "origin"]
Pini Cheyni

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

Tutti i telecomandi devono avere la stessa cronologia di commit? E se volessi spingere determinati commit su un telecomando e non sull'altro
Qasim

44

Ecco un progetto di esempio con più telecomandi, GitHub e GitLab:

  1. Aggiungi repository remoto per GitHub

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Aggiungi repository remoto per GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Ora hai più telecomandi nel progetto. Ricontrolla congit 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. Come si spinge in più repository?

    $ git push github && git push gitlab
    

2
Non $ git pushspingerà solo verso tutti i telecomandi?
Water Cooler v2,

Abbiamo un problema quando provo a spingere github e poi a push automatico su gitlab. Potete per favore aiutarmi? Voglio spingere uno alla volta l'origine.
Mitul Marsoniya,

come posso lavorare con questo se ho due progetti in gitlab, due repository. ottengo il codice da un progetto e poi lo spingo nell'altro progetto?
muzi jack,

2

è possibile aggiungere un altro account remoto al repository fornendo un nome diverso anziché l'origine. Puoi usare un nome come origin2. così il tuo comando git può essere modificato come

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 per 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

Ora hai 2 origini.


1
Questa risposta è più utile / raffinata di altre grazie --pushall'opzione.
Dmitri Zaitsev, il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.