Kann ein Projekt mehrere Ursprünge haben?

187

Kann ein Projekt zwei (oder mehr) "Ursprünge" in Git haben?

Ich möchte ein einzelnes Projekt sowohl auf Github als auch auf einen Heroku- Server übertragen.

Insbesondere tritt dieser Fehler beim Hinzufügen des Github-Repositorys auf:

$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.
Chris Dutrow
quelle
8
Sie können so viele Remote-Repositorys haben, wie Sie möchten, aber Sie müssen ihnen unterschiedliche Namen geben.
Felix Kling
Der Repository-Name ist in diesem Fall unterschiedlich. Ist das Wort "Ursprung" ein Name, der geändert werden kann?
Chris Dutrow
4
Ja , git remote rename <old> <new>: linux.die.net/man/1/git-remote . Sie können das Github-Repository aber auch anders benennen ...
Felix Kling
1
Mögliches Duplikat von Pull / Push von mehreren entfernten Standorten
AD7six
Und ist es möglich, eine der Fernbedienungen als Standard festzulegen, damit ich nicht jedes Mal, wenn ich drücke, explizit aufgefordert werde, den Namen dieser Fernbedienung explizit zu schreiben?
40 Detectives

Antworten:

275

Sie können so viele Fernbedienungen haben, wie Sie möchten, aber Sie können nur eine Fernbedienung mit dem Namen "Ursprung" haben. Die als "Ursprung" bezeichnete Fernbedienung ist in keiner Weise speziell, außer dass es sich um die Standardfernbedienung handelt, die von Git erstellt wurde, wenn Sie ein vorhandenes Repository klonen. Sie können eine zweite Fernbedienung konfigurieren, auf diese Fernbedienung drücken / von dieser abziehen und einige Zweige einrichten, um Zweige von dieser Fernbedienung anstelle des Ursprungs zu verfolgen.

Versuchen Sie stattdessen, eine Fernbedienung namens "github" hinzuzufügen:

$ 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
meagar
quelle
4
Wie aus der Antwort mit den höchsten Stimmen für die Frage hervorgeht, die diese möglicherweise dupliziert, kann eine Fernbedienung auf mehrere Repositorys verweisen. Daher können Sie auf eine Fernbedienung pushen und zwei oder mehr Repositorys aktualisieren. Dabei ist nicht klar, ob dies das Ziel des OP ist.
AD7six
Was sind einige praktische Beispiele dafür, warum Sie dies tun möchten? Warum sollte ein Verzeichnis auf mehrere Repositorys verweisen? Jedes Repository hat normalerweise ein eigenes
Verzeichnis
4
@mightyspaj So ziemlich jeder, der Heroku einsetzt, hat eine Fernbedienung originund eine Fernbedienung heroku.
Meagar
@mightyspaj, oder wenn Ihr Team Gabeln verwendet und Sie manchmal darauf zugreifen möchten. Wir tun dies in unserem Team, indem wir mit Teams in verschiedenen UTC zusammenarbeiten, damit wir, wenn wir PRs genehmigen, in diesem Namen mithilfe der dortigen Abzweigung eine Neugründung durchführen und den Code jetzt und nicht morgen zusammenführen können.
Benoit Drapeau
Gibt es eine Möglichkeit, alle lokalen Niederlassungen gleichzeitig auf die neue Fernbedienung zu übertragen?
Tanasis
89

Als Randnotiz für alle, die später über diese Frage stolpern, ist es möglich, Origin-Push gleichzeitig auf mehr als einen Git-Repository-Server zu übertragen.

Sie können dies erreichen, indem Sie den folgenden Befehl verwenden, um der Ursprungsfernbedienung eine weitere URL hinzuzufügen.

git remote set-url --add origin ssh://[email protected]/user/myproject.git
Josh_at_Savings_Champion
quelle
8
Weitere Gedanken dazu finden Sie in dieser Frage .
Moi
3
Ok, wie lösche ich einen dieser Ursprünge, ohne alle zu löschen?
Michael
@ Michael Sie können die ./git/configDatei bearbeiten und die URL-Datei im Abschnitt [Remote "Ursprung"] entfernen
Pini Cheyni
8
@ Michaelgit remote set-url --delete origin ssh://[email protected]/user/myproject.git
Afrig Aminuddin
Müssen alle Fernbedienungen dieselbe Festschreibungshistorie haben? Was ist, wenn ich bestimmte Commits auf eine Fernbedienung und nicht auf die andere übertragen möchte
Qasim,
44

Hier ist ein Beispielprojekt mit mehreren Fernbedienungen, GitHub & GitLab:

  1. Remote-Repo für GitHub hinzufügen

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Remote-Repo für GitLab hinzufügen

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Jetzt haben Sie mehrere Fernbedienungen im Projekt. Überprüfen Sie mitgit 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. Wie können Sie auf mehrere Repositorys zugreifen?

    $ git push github && git push gitlab
    
dihardmg
quelle
2
Wird nicht nur $ git pushauf alle Fernbedienungen pushen?
Wasserkühler v2
Wir haben ein Problem, wenn ich versuche, Github und dann automatisch auf Gitlab zu drücken. Können Sie mir bitte helfen? Ich möchte einen nach dem anderen schieben.
Mitul Marsoniya
Wie arbeite ich damit, wenn ich zwei Projekte in Gitlab habe, zwei Repositories. Ich bekomme Code von einem Projekt und schiebe ihn dann auf das andere Projekt.
Muzi Jack
2

Sie können Ihrem Repository ein weiteres Remote-Konto hinzufügen, indem Sie anstelle des Ursprungs einen anderen Namen angeben. Sie können Namen wie origin2 verwenden. So kann Ihr git-Befehl als geändert werden

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

und für den Push-Einsatz:

git push -u origin2 master
Lovepreet Kaur
quelle
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

Jetzt hast du 2 Ursprünge.

Ostap B.
quelle
1
Diese Antwort ist dank der --pushOption hilfreicher / verfeinert als andere .
Dmitri Zaitsev