Wie kann ich die URL ermitteln, von der ein lokales Git-Repository ursprünglich geklont wurde?


4093

Ich habe vor ein paar Tagen ein Projekt von GitHub gezogen. Ich habe seitdem festgestellt, dass es auf GitHub mehrere Gabeln gibt, und ich habe es versäumt zu notieren, welche ich ursprünglich genommen habe. Wie kann ich feststellen, welche dieser Gabeln ich gezogen habe?


163
Mit git 2.7 (Q4 2015) git remote get-url originwird dies möglich sein. Siehe meine Antwort unten
VonC


21
git remote get-url originfunktioniert bei mir nicht - möglicherweise veraltet? git remote show originhat aber funktioniert.
Klik

47
git remote -vGeben Sie viele Informationen, einschließlich dieser.
Thorbjørn Ravn Andersen

git remote get-url origin --pushfunktioniert gut, anscheinend nicht abgeschrieben und bietet nette kurze Informationen ( git remote show originkann sehr ausführlich sein) qv git help remote.
NeilG

Antworten:


5757

Wenn Sie nur die Remote-URL möchten oder wenn Sie nicht mit einem Netzwerk verbunden sind, das das Remote-Repo erreichen kann:

git config --get remote.origin.url

Wenn Sie eine vollständige Ausgabe benötigen und sich in einem Netzwerk befinden, das das Remote-Repo erreichen kann, in dem sich der Ursprung befindet:

git remote show origin

Bei Verwendung git clone(von GitHub oder einem anderen Quell-Repository) lautet der Standardname für die Quelle des Klons "origin". Mit git remote showwird die Information zu diesem Remote-Namen angezeigt. Die ersten Zeilen sollten zeigen:

C:\Users\jaredpar\VsVim> git remote show origin
* remote origin
  Fetch URL: git@github.com:jaredpar/VsVim.git
  Push  URL: git@github.com:jaredpar/VsVim.git
  HEAD branch: master
  Remote branches:

Wenn Sie den Wert im Skript verwenden möchten, verwenden Sie den ersten in dieser Antwort aufgeführten Befehl.


2
Verwenden Sie stattdessen git config wie unten beschrieben, wenn Sie jgit mit amazon-s3 verwenden.
Barryku

6
Obwohl dies für den Zweck der ursprünglichen Frage nicht relevant ist, beachten Sie bitte, dass Sie beim Versuch, die "Push-URL" abzurufen und mehrere URLs für die angegebene Fernbedienung einzugeben, entweder Folgendes verwenden müssen git remote show origin(optional mit dem von @ bereitgestellten Flag -n) Casey) oder mit, git remote -vwie von @Montaro und @rodel vorgeschlagen.
Erstaunlich

In welche Datei wird das geschrieben? Ich dachte, die .gitconfigDatei würde es haben, aber ich habe es in meiner nicht gesehen.
Ayjay

1
@ayjay ´~/.gitconfigist global für alle gitRepositorys, dies kommt von der lokalen Konfiguration, die normalerweise vorhanden ist .git/config(für Git-Submodule ist die Antwort jedoch etwas schwieriger). Beachten Sie, dass dies strace git config --get remote.origin.urlIhr Freund ist.
Tino

1
Die ursprüngliche URL muss jedoch nicht die URL der aktuell verwendeten Fernbedienung sein. Um die tatsächlich verwendete URL anzuzeigen
rubo77

620

Wenn Sie dies für Skriptzwecke wünschen, können Sie nur die URL mit abrufen

git config --get remote.origin.url

38
Dies ist die richtige Antwort. Es ist viel schneller und funktioniert sogar, wenn die Remote-URL nicht mehr verfügbar ist ( git remote show originzeigt nur "conq: repository existiert nicht.").
Apfelbox

5
Dies ist aufgrund der Konfigurationsoption nicht ganz die richtige Antwort url.<base>.insteadOf. Siehe meine Antwort - Git hat einen Befehl für diesen Zweck.
Carl Suster

2
@arcresu Cool, +1 für dich! Zu meiner Verteidigung wurde dieser Befehl erst im März 2011 hinzugefügt und erst im September 2012 dokumentiert.
Cascabel

1
@Catskul Nur --git-dir ist relevant (die Konfiguration befindet sich im Git-Verzeichnis, unabhängig vom Speicherort des Arbeitsbaums) und funktioniert für mich. Sind Sie sicher, dass Sie den Pfad zum tatsächlichen .git-Verzeichnis angegeben haben, nicht das übergeordnete Verzeichnis?
Cascabel

553

Du kannst es versuchen:

git remote -v

Es werden alle Abruf- / Push-URLs Ihrer Fernbedienungen gedruckt.


255

Um die Antwort zu erhalten:

git ls-remote --get-url [REMOTE]

Dies ist besser als das Lesen der Konfiguration. Auf der Manpage finden Siegit-ls-remote :

--get-url

Erweitern Sie die URL des angegebenen Remote-Repositorys unter Berücksichtigung aller "url.<base>.insteadOf"Konfigurationseinstellungen (siehe git-config(1)) und beenden Sie das Programm, ohne mit der Remote zu sprechen.

Wie von @Jefromi hervorgehoben, wurde diese Option in Version 1.7.5 hinzugefügt und erst in Version 1.7.12.2 (2012-09) dokumentiert .


2
gut: dies würde auch das gleiche für frühere Versionen> git remote -v | bieten grep fetch | awk '{print $ 2}'
ravi.zombie

1
Ich denke, die meisten anderen Antworten sind eher ein Show-and-Tell über Git-Befehle und eine Darstellung der Git-Geschichte. Dies ist die einzige Antwort, die nicht davon ausgeht, dass Ihr Upstream aufgerufen wird origin.
Mike D

Dies ist der direkteste Ersatz für die alte remote get-urlOption. Es ist ein Ersatz.
Klaatu von Schlacker

111

Mit Git 2.7 (Veröffentlichung am 5. Januar 2015) haben Sie eine kohärentere Lösung mit git remote:

git remote get-url origin

(schöner Anhänger von git remote set-url origin <newurl>)

Siehe Commit 96f78d3 (16. September 2015) von Ben Boeckel ( mathstuf) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit e437cbd , 05. Oktober 2015) :

remote: Unterbefehl get-url hinzufügen

Erweitern insteadOfist ein Teil von ls-remote --urlund es gibt auch keine Möglichkeit zu erweitern pushInsteadOf.
Fügen Sie einen get-urlUnterbefehl hinzu, um sowohl Abfragen als auch eine Möglichkeit zum Abrufen aller konfigurierten URLs abzufragen.

get-url:

Ruft die URLs für eine Fernbedienung ab.
Konfigurationen für insteadOfund pushInsteadOfwerden hier erweitert.
Standardmäßig wird nur die erste URL aufgelistet.

  • Mit ' --push' werden Push-URLs abgefragt, anstatt URLs abzurufen.
  • Mit ' --all' werden alle URLs für die Fernbedienung aufgelistet.

Vor Git 2.7 hatten Sie:

 git config --get remote.[REMOTE].url
 git ls-remote --get-url [REMOTE]
 git remote show [REMOTE]

4
Nach 5 Jahren hat sich viel geändert und dies sollte jetzt die akzeptierte Antwort sein. Fügen Sie aber möglicherweise auch die Syntax vor 2.7 hinzu.
MSP

58

Zusammenfassend gibt es mindestens vier Möglichkeiten:

(Folgendes wurde für das offizielle Linux-Repository versucht)

Am wenigsten Informationen:

$ git config --get remote.origin.url
https://github.com/torvalds/linux.git

und

$ git ls-remote --get-url
https://github.com/torvalds/linux.git

Mehr Informationen:

$ git remote -v
origin    https://github.com/torvalds/linux.git (fetch)
origin    https://github.com/torvalds/linux.git (push)

Noch mehr Informationen:

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/torvalds/linux.git
  Push  URL: https://github.com/torvalds/linux.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

4
Hinweis git config --get remote.origin.urlruft die ursprüngliche URL ab, die mit git remote add ...oder git remote set-url ...während git ls-remote --get-url origindes Abrufs der URL festgelegt wurde, die tatsächlich für den Zugriff auf die Fernbedienung verwendet wird - was bei Vorhandensein von anders sein kann git config --global url.XXX.insteadOf YYY. Beide Ausgänge können also unterschiedlich sein! Beachten Sie auch, dass git ls-remote --get-url(ohne origin) nicht unbedingt abgerufen wird origin, sondern der verfolgte Upstream angezeigt wird , sodass er beispielsweise im getrennten HEAD-Status fehlschlägt.
Tino

24

Ich denke, Sie können es unter finden .git/configund remote["origin"]wenn Sie das nicht manipuliert haben.


22

Kurze Antwort:

$ git remote show -n origin

oder eine Alternative für reine Schnellskripte:

$ git config --get remote.origin.url

Einige Infos:

  1. $ git remote -vdruckt alle Fernbedienungen (nicht das, was Sie wollen). Du willst den richtigen Ursprung?
  2. $ git remote show originviel besser, zeigt nur origin, dauert aber zu lange (getestet auf Git-Version 1.8.1.msysgit.1).

Am Ende hatte ich : $ git remote show -n origin, was am schnellsten zu sein scheint. Damit -nwerden keine entfernten Köpfe (AKA-Zweige) abgerufen. Sie brauchen diese Art von Informationen nicht, oder?

http://www.kernel.org/pub//software/scm/git/docs/git-remote.html

Sie können | grep -i fetchauf alle drei Versionen anwenden , um nur die Abruf-URL anzuzeigen.

Wenn Sie reine Geschwindigkeit benötigen, verwenden Sie:

$ git config --get remote.origin.url

Vielen Dank an @Jefromi für den Hinweis.


22

Für mich ist dies der einfachere Weg (weniger Tippen):

$ git remote -v
origin    https://github.com/torvalds/linux.git (fetch)
origin    https://github.com/torvalds/linux.git (push)

Eigentlich habe ich das in ein aliasgenanntes s, das tut:

git remote -v
git status

Sie können Ihrem Profil Folgendes hinzufügen: alias s='git remote -v && git status'


17

Ich kann mich nie an alle Parameter von Git-Befehlen erinnern, daher habe ich einfach einen Alias ​​in die ~/.gitconfigDatei eingefügt, der für mich sinnvoller ist, damit ich mich daran erinnern kann und weniger tippt:

[alias]
url = ls-remote --get-url

Nach dem erneuten Laden des Terminals können Sie einfach Folgendes eingeben:

> git url

Hier sind noch einige meiner häufig verwendeten:

[alias]
cd = checkout
ls = branch
lsr = branch --remote
lst = describe --tags

Ich empfehle auch git-extras mit einem git info Befehl, der viel detailliertere Informationen zu den Remote- und lokalen Zweigen enthält.


Ich mag das sehr!
Alfie

15

Die Git-URL befindet sich in der Git-Konfigurationsdatei. Der Wert entspricht dem Schlüssel url.

Verwenden Sie für Mac und Linux die folgenden Befehle:

 cd project_dir
 cat .git/config | grep url | awk '{print $3}'

Öffnen Sie unter Windows die folgende Datei in einem beliebigen Texteditor und suchen Sie den Wert für key url.

project_dir/.git/config

Hinweis: Dies funktioniert auch, wenn Sie offline sind oder der Remote-Git-Server heruntergefahren wurde.


1
Dies hat bei mir funktioniert, nachdem der Remote-Server, auf dem sich die ursprüngliche Kaufabwicklung befand, heruntergefahren wurde. Alle anderen Versuche schlugen fehl: git remote get-url origin >> fatal: No such remote 'origin',git config --get remote.origin.url >>
jxramos

14

Ich benutze grundsätzlich:

git remote get-url origin

Es funktioniert für die Git Bash-Befehlskonsole oder die CMD-Befehlskonsole unter Windows. Das heißt, es funktioniert mit Version 2.x von Git.



10

Die Fernbedienung des Upstreams darf nicht als "Ursprung" bezeichnet werden. Hier ist eine Variation:

remote=$(git config --get branch.master.remote)
url=$(git config --get remote.$remote.url)
basename=$(basename "$url" .git)
echo $basename

Oder:

basename $(git config --get remote.$(git config --get branch.master.remote).url) .git

Für nützlichere Variablen gibt es:

$ git config -l

9

Um die IP-Adresse / den Hostnamen von zu erhalten origin

Für ssh://Repositories:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d "/"

Für git://Repositories:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d ":"

4
Für sshdiese nur in Abwesenheit funktionieren ~/.ssh/configdie umschreibt die Hostnamen oder Alias.
Tino

9

Um die anderen Antworten zu ergänzen: Wenn die Fernbedienung aus irgendeinem Grund geändert wurde und daher nicht den ursprünglichen Ursprung widerspiegelt , sollte der allererste Eintrag im Reflog (dh der letzte vom Befehl angezeigte Eintrag git reflog) angeben, wo das Repo ursprünglich geklont wurde von.

z.B

$ git reflog | tail -n 1
f34be46 HEAD@{0}: clone: from https://github.com/git/git
$

(Denken Sie daran, dass das Reflog möglicherweise gelöscht wird, sodass dies garantiert nicht funktioniert.)


1
Dies ist wahrscheinlich der einzige wirkliche Weg, um die "ursprüngliche" Fernbedienung zu erhalten, wenn sie geändert wurde.
Justin Ohms

8

Mit muss git remote show originman sich im Projektverzeichnis befinden. Wenn Sie die URLs jedoch von einem anderen Ort aus ermitteln möchten, können Sie Folgendes verwenden:

cat <path2project>/.git/config | grep url

Wenn Sie diesen Befehl häufig benötigen, können Sie in Ihrem .bashrcoder .bash_profileunter MacOS einen Alias ​​definieren .

alias giturl='cat ./.git/config | grep url'

Sie müssen also nur giturlden Git-Stammordner aufrufen , um einfach die URL zu erhalten.


Wenn Sie diesen Alias ​​so erweitern

alias giturl='cat .git/config | grep -i url | cut -d'=' -f 2'

Sie erhalten nur die einfache URL ohne die vorhergehende

"url ="

im

url = http://example.com/repo.git

Sie erhalten mehr Möglichkeiten in seiner Verwendung:

Beispiel

Auf einem Mac können Sie anrufen open $(giturl), um die URL im Standardbrowser zu öffnen.

Oder chrome $(giturl)um es mit dem Chrome-Browser unter Linux zu öffnen.


8

Eine einfache Möglichkeit besteht darin, die .git/configDatei zu öffnen :

cat .git/config

Bearbeiten:

vim .git/config oder

nano .git/config


1
Dies setzt voraus, dass Sie unter Linux (?) Sind.
Peter Mortensen

7

Drucken Sie beliebig benannte Remote-Abruf-URLs:

git remote -v | grep fetch | awk '{print $2}'

6

Wenn Sie den Namen der Upstream-Fernbedienung für einen Zweig nicht kennen, können Sie diesen zuerst nachschlagen, indem Sie den Namen des Upstream-Zweigs überprüfen, auf dem der aktuelle Zweig aufgebaut wurde. Verwenden Sie git rev-parsewie folgt:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream}

Dies zeigt den Upstream-Zweig, der die Quelle für den aktuellen Zweig war. Dies kann analysiert werden, um den Remote-Namen wie folgt zu erhalten:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1

Nehmen Sie das und leiten Sie es weiter, git ls-remoteund Sie erhalten die URL der Upstream-Fernbedienung, die die Quelle des aktuellen Zweigs ist:

git ls-remote --get-url \
  $(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1)

Nun sollte beachtet werden, dass dies nicht unbedingt dasselbe ist wie das Remote-Quell-Repository, aus dem geklont wurde. In vielen Fällen wird es jedoch ausreichen.


5
#!/bin/bash

git-remote-url() {
 local rmt=$1; shift || { printf "Usage: git-remote-url [REMOTE]\n" >&2; return 1; }
 local url

 if ! git config --get remote.${rmt}.url &>/dev/null; then
  printf "%s\n" "Error: not a valid remote name" && return 1
  # Verify remote using 'git remote -v' command
 fi

 url=`git config --get remote.${rmt}.url`

 # Parse remote if local clone used SSH checkout
 [[ "$url" == git@* ]] \
 && { url="https://github.com/${url##*:}" >&2; }; \
 { url="${url%%.git}" >&2; };

 printf "%s\n" "$url"
}

Verwendungszweck:

# Either launch a new terminal and copy `git-remote-url` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

# Create a local clone of your repo with SSH, or HTTPS
git clone git@github.com:your-username/your-repository.git
cd your-repository

git-remote-url origin

Ausgabe:

https://github.com/your-username/your-repository

5

Ich bevorzuge dieses, da es leichter zu merken ist:

git config -l

Es werden alle nützlichen Informationen aufgelistet, wie zum Beispiel:

user.name=Your Name
user.email=your.name@notexisting.com
core.autocrlf=input
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=https://github.com/mapstruct/mapstruct-examples
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

1

Verwenden Sie einfach diesen Befehl, in dem Sie den Ordner .git abgelegt haben

git config --get remote.origin.url

wenn Sie mit dem Netzwerk verbunden sind

git remote show origin

Es zeigt Ihnen die URL, von der ein lokales Git-Repository ursprünglich geklont wurde.

Ich hoffe das hilft

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.