Was ist "Ursprung" in Git?


582

Wenn ich renne:

git push origin branchname

Was genau ist originund warum muss ich es vor dem Filialnamen eingeben?


63
"Ursprung" ist der Name des Remote-Repositorys, in dem Sie Ihre Commits veröffentlichen möchten. Standardmäßig heißt das Standard-Remote-Repository "Ursprung", Sie können jedoch gleichzeitig mit mehreren Fernbedienungen (mit unterschiedlichen Namen) arbeiten. Weitere Informationen hier (zum Beispiel): gitref.org/remotes
Benoit Courtine

1
Beachten Sie auch, dass Origin ein "Upstream" -Repo ist
VonC


Aber dann, wenn git fetch und dann git branch -r verwendet werden, werden lokale Zweige mit origin / ugh vorangestellt: - / atlassian.com/git/tutorials/syncing/git-fetch
brat

Überprüfen Sie die .git \ config-Datei, die die Zuordnungen von Aliasen zu URLs enthält. Der .git-Ordner ist standardmäßig ausgeblendet.
Abhijeet Patel

Antworten:


568

originist ein Alias auf Ihrem System für ein bestimmtes Remote-Repository. Es ist eigentlich keine Eigenschaft dieses Repositorys.

Indem ich es tue

git push origin branchname

Sie sagen, um in das originRepository zu pushen . Es ist nicht erforderlich, das Remote-Repository zu benennen origin: Tatsächlich kann dasselbe Repository einen anderen Alias ​​für einen anderen Entwickler haben.

Fernbedienungen sind einfach ein Alias , in dem die URL von Repositorys gespeichert wird. Mit können Sie sehen, welche URL zu jeder Fernbedienung gehört

git remote -v

Im pushBefehl können Sie Fernbedienungen verwenden oder einfach eine URL direkt verwenden. Ein Beispiel, das die URL verwendet:

git push git@github.com:git/git.git master

1
Kann eine einzelne Fernbedienung ein Alias ​​für mehrere andere Fernbedienungen sein? Was wäre, wenn ich wollte, dass eine Fernbedienung auf mehrere andere Fernbedienungen übertragen wird? Zum Beispiel auf ein primäres Repo und auf ein Backup-Repo pushen? Wäre das in manchen Situationen vernünftig? EDIT: Hier gibt es mehrere Lösungen .
Yankee

1
Was ist, wenn ich das Schlüsselwort "origin" weglasse? Wenn wir "git push" sagen, werden dann nicht trotzdem alle Commits an das Remote-Repository gesendet? Das Hinzufügen des Schlüsselworts "Ursprung" erscheint überflüssig.
Mugen

@Mugen In den Dokumenten für können git pushSie sehen, dass zuerst die Konfiguration für dieses Repository (mit dem Sie überprüfen können git config --list) auf einen Schlüssel namens überprüft wird branch.<branchname>.remote. Wenn dies nicht festgelegt ist, "wird standardmäßig der Ursprung verwendet" - git-scm.com/docs/git-push
Kenmore

156

originist nicht der Name des Remote-Repositorys. Es handelt sich vielmehr um einen lokalen Alias , der anstelle der URL des Remote-Repositorys als Schlüssel festgelegt wurde.

Dadurch wird vermieden, dass der Benutzer die gesamte Remote-URL eingeben muss, wenn er einen Push anfordert.

Dieser Name wird standardmäßig und zur Konvention von Git festgelegt, wenn zum ersten Mal von einer Fernbedienung geklont wird.

Dieser Aliasname ist nicht fest codiert und kann über die folgende Eingabeaufforderung geändert werden:

git remote rename origin mynewalias

Weitere Informationen finden Sie unter http://git-scm.com/docs/git-remote .


1
Was ist, wenn ich das Schlüsselwort "origin" weglasse? Wenn wir "git push" sagen, werden dann nicht trotzdem alle Commits an das Remote-Repository gesendet? Das Hinzufügen des Schlüsselworts "Ursprung" erscheint überflüssig.
Mugen

74

Git hat das Konzept von "Fernbedienungen", die einfach URLs zu anderen Kopien Ihres Repositorys sind. Wenn Sie ein anderes Repository klonen, erstellt Git automatisch eine Fernbedienung mit dem Namen "origin" und zeigt darauf.

Sie können weitere Informationen zur Fernbedienung anzeigen, indem Sie Folgendes eingeben git remote show origin.


1
Git-Befehle sind für Anfänger sehr verwirrend. Ich denke, es hat mit der Geschichte dieses Versionskontrollsystems zu tun. Frage also: git remote show originWarum nicht einfach git show origin? Es muss einen Grund geben, was ist das? Vielen Dank.
Stack0verflow

5
@ Stack0verflow: Dies wird wahrscheinlich besser als neue Frage gestellt, damit die Leute die Recherche durchführen können, wenn Sie neugierig sind. 'git show' ist bereits ein weiterer Befehl, der ein Commit anzeigt, und technisch gesehen würde nichts Sie davon abhalten, einen Zweig namens 'origin' zu haben, zusätzlich zu einer Fernbedienung namens origin ...
Jason Malinowski


24

Einfach! "origin" ist genau das, was Sie Ihr Remote-Repository genannt haben, als Sie einen Befehl wie diesen ausgeführt haben:

git remote add origin git@github.com:USERNAME/REPOSITORY-NAME.git

Von da an weiß Git, dass "origin" auf dieses bestimmte Repository verweist (in diesem Fall ein GitHub-Repository). Sie hätten es "Github" oder "Repo" oder was auch immer Sie wollten nennen können.


19

Das hat mich auch verwirrt, und unten ist, was ich gelernt habe.

Wenn Sie ein Repository klonen, zum Beispiel von GitHub:

  • originist der Alias ​​für die URL, von der Sie das Repository geklont haben. Beachten Sie, dass Sie diesen Alias ​​ändern können.

  • Es gibt einen masterZweig im Remote-Repository (Alias ​​von origin). Es gibt auch einen anderen masterZweig, der lokal erstellt wird.

Weitere Informationen finden Sie in dieser SO-Frage: Git-Verzweigung: Master vs. Ursprung / Master vs. Fernbedienungen / Ursprung / Master


11

Wenn Sie ein Repository mit klonen git clone, wird automatisch eine Remoteverbindung erstellt, origindie auf das geklonte Repository verweist. Dies ist nützlich für Entwickler, die eine lokale Kopie eines zentralen Repositorys erstellen, da es eine einfache Möglichkeit bietet, vorgelagerte Änderungen abzurufen oder lokale Commits zu veröffentlichen. Dieses Verhalten ist auch der Grund, warum die meisten Git-basierten Projekte ihren zentralen Repository-Ursprung nennen.



0

Von https://www.git-tower.com/learn/git/glossary/origin :

In Git ist "origin" eine Abkürzung für das Remote-Repository, aus dem ein Projekt ursprünglich geklont wurde. Genauer gesagt wird es anstelle der URL des ursprünglichen Repositorys verwendet - und erleichtert dadurch die Referenzierung erheblich.

Beachten Sie, dass der Ursprung keineswegs ein "magischer" Name ist, sondern nur eine Standardkonvention. Obwohl es sinnvoll ist, diese Konvention unberührt zu lassen, können Sie sie perfekt umbenennen, ohne die Funktionalität zu verlieren.

Im folgenden Beispiel wird der URL-Parameter zum Befehl "clone" zum "Ursprung" für das geklonte lokale Repository:

git clone https://github.com/gittower/git-crash-course.git

Wenn Sie von anderen geschriebene Inhalte kopieren, müssen Sie klarstellen, dass Sie dies tun, und Sie müssen immer einen Link zur Quelle einfügen. Ansonsten ist es Plagiat und ein Grund, die Antwort zu löschen. Außerdem wurde Ihre Antwort bereits veröffentlicht .
Fabio sagt Reinstate Monica

0

Die anderen Antworten besagen, dass dies originein Alias ​​für die URL eines Remote-Repositorys ist, der nicht ganz korrekt ist. Es ist zu beachten, dass eine Adresse, die mit beginnt, httpeine URL ist, während eine Adresse, die mit beginnt, git@eine URI oder eine universelle Ressourcenkennung ist.

Alle URLs sind URIs, aber nicht alle URIs sind URLs.

Kurz gesagt, wenn Sie tippen git remote add origin <URI>, teilen Sie Ihrem lokalen Git mit, dass Sie, wenn Sie das Wort verwenden origin, tatsächlich den von Ihnen angegebenen URI meinen. Stellen Sie sich das wie eine Variable vor, die einen Wert enthält.

Und genau wie eine Variable, können Sie es nennen , was Sie wollen (zB. github, heroku, destinationUsw.).


0

Remote (Repository-URL-Alias) → Ursprung (Upstream-Alias) → Master (Zweig-Alias);

  • remote, Ebene gleiche wie working directory, index, repository,

  • origin, Zuordnung des lokalen Repository-Zweigs zum Remote-Repository-Zweig

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.