it-swarm.com.de

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

Ich habe vor ein paar Tagen ein Projekt von GitHub heruntergeladen. Ich habe seitdem herausgefunden, dass es mehrere Gabeln auf GitHub gibt und ich habe nicht beachtet, welche ich ursprünglich genommen habe. Wie kann ich feststellen, welche der Gabeln ich gezogen habe?

3175
Tim

Wenn Sie nur die Remote-URL verwenden möchten oder die referentielle Integrität beschädigt wurde:

git config --get remote.Origin.url

Wenn Sie eine vollständige Ausgabe benötigen oder die referentielle Integrität intakt ist:

git remote show Origin

Wenn Sie git clone (von GitHub oder einem beliebigen Quell-Repository für diese Angelegenheit) verwenden, lautet der Standardname für die Quelle des Klons "Origin". Wenn Sie git remote show verwenden, werden die Informationen zu diesem Namen angezeigt. Die ersten Zeilen sollten zeigen:

C:\Users\jaredpar\VsVim> git remote show Origin
* remote Origin
  Fetch URL: [email protected]:jaredpar/VsVim.git
  Push  URL: [email protected]: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.

4535
JaredPar

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

git config --get remote.Origin.url
540
Cascabel

Du kannst es versuchen:

git remote -v

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

463
Montaro

Um die Antwort zu erhalten:

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

Dies ist besser als das Lesen der Konfiguration. beziehen Sie sich auf die man-Seite für git-ls-remote :

--get-url

Erweitern Sie die URL des angegebenen Remote-Repositorys unter Berücksichtigung von Beliebige "url.<base>.insteadOf" config-Einstellung (Siehe git-config(1)) und Beenden, ohne mit der Fernbedienung zu sprechen.

Wie von @Jefromi ausgeführt, wurde diese Option in v1.7.5 hinzugefügt und erst in v1.7.12.2 (2012-09) dokumentiert.

216
Carl Suster

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

git remote get-url Origin

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

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

remote: fügt den Unterbefehl get-url hinzu

Das Erweitern von insteadOf ist ein Teil von ls-remote --url und es gibt keine Möglichkeit um auch pushInsteadOf zu erweitern.
Fügen Sie einen get-url-Unterbefehl hinzu, um beide abzufragen und alle konfigurierten URLs abzurufen.

get-url:

Ruft die URLs für ein Remote ab.
Konfigurationen für insteadOf und pushInsteadOf werden 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 das Remote aufgelistet.

Vor git 2.7 hatten Sie:

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

Zusammenfassend gibt es mindestens vier Möglichkeiten:

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

Wenigste Information:

$ 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)
48

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 -v druckt alle Fernbedienungen (nicht was Sie möchten). Sie wollen Origin richtig?
  2. $ git remote show Origin viel besser, zeigt nur Origin, dauert aber zu lange (getestet mit git Version 1.8.1.msysgit.1).

Ich endete mit: $ git remote show -n Origin, das scheint am schnellsten zu sein. Mit -n werden keine Remote-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 fetch auf alle drei Versionen anwenden, um nur die Abruf-URL anzuzeigen.

Wenn Sie reine Geschwindigkeit benötigen, verwenden Sie:

$ git config --get remote.Origin.url

Danke an @Jefromi für den Hinweis.

19
Casey

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

16
meder omuraliev

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

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

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

8
Harikrishnan

Die Fernbedienung des Upstreams wird möglicherweise nicht als "Origin" bezeichnet. Hier 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 weitere nützliche Variablen gibt es:

$ git config -l
8
cagney

Ich kann mich nie an alle Parameter von Git-Befehlen erinnern, also füge ich einfach einen Aliasnamen in die ~/.gitconfig-Datei ein, der für mich mehr Sinn macht, also kann ich mich daran erinnern, und das führt zu weniger Schreibarbeit:

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

Nachdem Sie das Terminal neu geladen haben, können Sie einfach Folgendes eingeben:

> git url

Hier sind noch ein paar meiner häufig verwendeten:

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

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

Für ssh://-Repositorys:

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

Für git://-Repositorys:

git ls-remote --get-url Origin | cut -f 2 -d @ | cut -f 1 -d ":"
7
Stephen

Ich verwende grundsätzlich:

git remote get-url Origin

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

Mit git remote show Origin müssen Sie 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 einen Alias ​​in Ihrem .bashrc oder .bash_profile mit MacOS definieren.

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

Sie müssen also nur giturl im Git-Root-Ordner aufrufen, um einfach dessen 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 das Vorhergehende 

"url ="

im 

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

sie erhalten mehr Möglichkeiten bei der Nutzung:

Beispiel

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

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

6
Sedat Kilinc

Um die anderen Antworten zu ergänzen: Wenn die Fernbedienung aus irgendeinem Grund geändert wurde und somit nicht das Original Origin widerspiegelt, sollte der allererste Eintrag im Reflog (dh der letzte mit dem Befehl git reflog angezeigte Eintrag) angeben, wo Das Repo wurde ursprünglich aus geklont.

z.B.

$ git reflog | tail -n 1
f34be46 [email protected]{0}: clone: from https://github.com/git/git
$

(Denken Sie daran, dass der Reflog möglicherweise gereinigt wird, so dass dies nicht garantiert funktioniert.)

6
Jeremy

Eine einfache Möglichkeit ist das Öffnen der .git/config-Datei:

cat .git/config

Bearbeiten:

vim .git/config oder

nano .git/config

6
Omar Makled

Willkürlich benannte Remote-Hol-URLs drucken:

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

Wenn Sie den Namen des Upstream-Remote-Standorts für einen Zweig nicht kennen, können Sie zunächst nachschlagen, indem Sie den Namen des Upstream-Zweigs prüfen, auf dem der aktuelle Zweig basiert. Verwenden Sie git rev-parse wie folgt:

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

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

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

Nehmen Sie das jetzt und leiten Sie es an git ls-remote, und Sie erhalten die URL des Upstream-Remote, der 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 mit dem Quell-Remote-Repository identisch ist, aus dem geklont wurde. In vielen Fällen reicht es jedoch aus.

4
Christopher
#!/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" == [email protected]* ]] \
 && { 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 [email protected]:your-username/your-repository.git
cd your-repository

git-remote-url Origin

Ausgabe:

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

Für mich ist das 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 eine alias namens s, die das tut:

git remote -v
git status

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

1
Code Knox
git config --list

Dieser Befehl enthält alle Informationen zu Ihrem Repository.