Jak mogę ustalić adres URL, z którego pierwotnie sklonowano lokalne repozytorium Git?

4092

Kilka dni temu ściągnąłem projekt z GitHub. Od tamtej pory odkryłem, że na GitHub jest kilka rozwidleń i zaniedbałem, aby zauważyć, który z nich wybrałem pierwotnie. Jak mogę ustalić, które z widelców wyciągnąłem?

Tim
źródło
162
Z git 2.7 (IV kwartał 2015) git remote get-url originbędzie to możliwe. Zobacz moją odpowiedź poniżej
VonC
21
git remote get-url originnie działa dla mnie - być może przestarzałe? git remote show origindziałało jednak.
Klik
46
git remote -vdaje wiele informacji, w tym również.
Thorbjørn Ravn Andersen
git remote get-url origin --pushdziała dobrze, najwyraźniej nie deprecjonowane i zapewnia ładne krótkie informacje ( git remote show originmoże być bardzo szczegółowe) qv git help remote.
NeilG,

Odpowiedzi:

5754

Jeśli chcesz tylko zdalny adres URL lub nie jesteś podłączony do sieci, która może uzyskać dostęp do zdalnego repozytorium:

git config --get remote.origin.url

Jeśli wymagają pełnej mocy i w sieci, która może dotrzeć do zdalnego repo gdzie rezyduje pochodzenie:

git remote show origin

Gdy używasz git clone(z GitHub lub dowolnego repozytorium źródłowego w tym zakresie) domyślną nazwą źródła klonu jest „origin”. Użycie git remote showspowoduje wyświetlenie informacji o tej zdalnej nazwie. Pierwsze kilka wierszy powinno zawierać:

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:

Jeśli chcesz użyć wartości w skrypcie, użyłbyś pierwszego polecenia wymienionego w tej odpowiedzi.

JaredPar
źródło
2
Zamiast tego użyj git config jak opisano poniżej, jeśli używasz jgit z amazon-s3.
barryku
6
Chociaż nie jest to istotne z punktu widzenia pierwotnego pytania, należy pamiętać, że jeśli próba uzyskania „Push URL” i wielu adresów URL zostanie wprowadzonych dla określonego zdalnego, musisz albo użyć git remote show origin(opcjonalnie z flagą -n dostarczoną przez @ Casey) lub z git remote -vsugestiami @Montaro i @rodel.
Amazingant
Do jakiego pliku jest zapisany? Myślałem, że .gitconfigplik go zawiera, ale nie widziałem go w swoim.
ayjay,
1
@ayjay ´~/.gitconfigjest globalny dla wszystkich gitrepozytoriów, tutaj pochodzi z lokalnej konfiguracji, która zwykle jest w .git/config(jednak dla git-submodules odpowiedź jest nieco trudniejsza). Pamiętaj, że strace git config --get remote.origin.urlto twój przyjaciel.
Tino
1
Ale oryginalny adres URL nie musi być adresem URL aktualnie używanego pilota. Aby wyświetlić aktualnie używany adres URL, potrzebujesz tego rozwiązania: stackoverflow.com/a/40630957/1069083
rubo77
620

Jeśli chcesz tego do celów skryptowych, możesz uzyskać tylko adres URL za pomocą

git config --get remote.origin.url
Cascabel
źródło
38
To jest poprawna odpowiedź. Jest o wiele szybszy, a nawet działa, jeśli zdalny adres URL nie jest już dostępny ( git remote show originpokazuje tylko „conq: repository nie istnieje”).
apfelbox
5
Nie jest to odpowiednia odpowiedź z powodu opcji konfiguracji url.<base>.insteadOf. Zobacz moją odpowiedź - git ma w tym celu polecenie.
Carl Suster
2
@arcresu Cool, +1 dla Ciebie! W mojej obronie polecenie to zostało dodane dopiero w marcu 2011 r. I zostało udokumentowane dopiero we wrześniu 2012 r.
Cascabel,
1
@Catskul Tylko - git-dir jest istotny (konfiguracja znajduje się w git dir, niezależnie od lokalizacji drzewa pracy) i działa dla mnie. Czy na pewno podałeś ścieżkę do rzeczywistego katalogu .git, a nie do jego katalogu nadrzędnego?
Cascabel
553

Możesz spróbować:

git remote -v

Wydrukuje wszystkie adresy URL pobierania / wypychania wszystkich pilotów.

Montaro
źródło
255

Aby uzyskać odpowiedź:

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

Jest to lepsze niż czytanie konfiguracji; zapoznaj się ze stronągit-ls-remote podręcznika dla :

--get-url

Rozwiń adres URL danego zdalnego repozytorium, biorąc pod uwagę dowolne "url.<base>.insteadOf"ustawienie konfiguracji (patrz git-config(1)) i wyjdź bez rozmowy ze zdalnym.

Jak wskazał @Jefromi, ta opcja została dodana w wersji 1.7.5 i udokumentowana dopiero w wersji 1.7.12.2 (2012-09).

Carl Suster
źródło
2
dobry: zapewniłoby to również to samo dla poprzednich wersji> git remote -v | grep fetch | awk '{print $ 2}'
ravi.zombie
1
Myślę, że większość innych odpowiedzi jest bardziej pokazowa na temat poleceń git i wykładu na temat historii git. Jest to jedyna odpowiedź, która nie zakłada, że ​​twój upstream jest nazywany origin.
Mike D,
Jest to najbardziej bezpośredni zamiennik starej remote get-urlopcji. To zamiennik drop-in.
Klaatu von Schlacker,
111

Dzięki Git 2.7 (wersja 5 stycznia 2015 r.) Masz bardziej spójne rozwiązanie, używając git remote:

git remote get-url origin

(ładny wisiorek git remote set-url origin <newurl>)

Zobacz commit 96f78d3 (16 września 2015) autorstwa Ben Boeckel ( mathstuf) .
(Połączone przez Junio ​​C Hamano - gitster- w commit e437cbd , 05 października 2015) :

zdalne: dodaj komendę get-url

Rozszerzanie insteadOfjest częścią ls-remote --urli również nie ma możliwości jego rozszerzenia pushInsteadOf.
Dodaj get-urlpodkomendę, aby móc zarówno wyszukiwać, jak i uzyskiwać wszystkie skonfigurowane adresy URL.

get-url:

Pobiera adresy URL dla pilota.
Konfiguracje insteadOfi pushInsteadOfsą tutaj rozwijane.
Domyślnie wyświetlany jest tylko pierwszy adres URL.

  • Za pomocą „ --push” wypychane adresy URL są odpytywane, a nie pobierane.
  • Za pomocą „ --all” zostaną wyświetlone wszystkie adresy URL pilota.

Przed Git 2.7 miałeś:

 git config --get remote.[REMOTE].url
 git ls-remote --get-url [REMOTE]
 git remote show [REMOTE]
VonC
źródło
4
Po 5 latach wiele się zmieniło i to powinna być teraz akceptowana odpowiedź. Ale może dodać również składnię sprzed wersji 2.7.
msp
58

Podsumowując, istnieją co najmniej cztery sposoby:

(Poniższe wypróbowano dla oficjalnego repozytorium Linux)

Najmniej informacji:

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

i

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

Więcej informacji:

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

Jeszcze więcej informacji:

$ 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)
niepolarność
źródło
4
Uwaga git config --get remote.origin.urlpobiera oryginalny adres URL ustawiony za pomocą git remote add ...lub git remote set-url ...podczas git ls-remote --get-url originpobierania adresu URL, który jest faktycznie używany do uzyskania dostępu do pilota - który może być inny w obecności git config --global url.XXX.insteadOf YYY. Oba wyjścia mogą się różnić! Zauważ również, że git ls-remote --get-url(bez origin) nie musi koniecznie pobierać origin, zamiast tego pokazuje śledzone w górę, więc zawiedzie na przykład w stanie odłączonej HEAD.
Tino
24

Myślę, że możesz to znaleźć pod spodem .git/configi remote["origin"]jeśli nie manipulowałeś tym.

meder omuraliev
źródło
22

Krótka odpowiedź:

$ git remote show -n origin

lub alternatywa dla czystych szybkich skryptów:

$ git config --get remote.origin.url

Niektóre informacje:

  1. $ git remote -vwydrukuje wszystkie piloty (nie to, czego chcesz). Chcesz pochodzenia, prawda?
  2. $ git remote show originznacznie lepiej, pokazuje tylko, originale trwa zbyt długo (testowane na git w wersji 1.8.1.msysgit.1).

Skończyło się na $ git remote show -n origin:, która wydaje się być najszybsza. Dzięki -nniemu nie będzie można pobrać zdalnych głów (oddziałów AKA). Nie potrzebujesz tego rodzaju informacji, prawda?

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

Możesz zastosować | grep -i fetchdo wszystkich trzech wersji, aby wyświetlić tylko adres URL pobierania.

Jeśli potrzebujesz czystej prędkości, użyj:

$ git config --get remote.origin.url

Dzięki @Jefromi za zwrócenie na to uwagi.

Casey
źródło
22

Dla mnie jest to łatwiejszy sposób (mniej pisania):

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

tak naprawdę mam to w aliasnazwie s, która:

git remote -v
git status

Możesz dodać do swojego profilu za pomocą: alias s='git remote -v && git status'

Kod Knox
źródło
17

Nigdy nie pamiętam wszystkich parametrów poleceń Git, więc po prostu umieszczam w ~/.gitconfigpliku alias , który jest dla mnie bardziej sensowny, więc mogę go zapamiętać i powoduje to mniej pisania:

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

Po ponownym załadowaniu terminala możesz po prostu wpisać:

> git url

Oto kilka moich często używanych:

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

Bardzo polecam także git-extras, który ma git info polecenie, które zapewnia znacznie bardziej szczegółowe informacje o zdalnych i lokalnych oddziałach.

Co by było fajne
źródło
Lubię to bardzo!
Alfie
15

Adres URL Git będzie znajdować się w pliku konfiguracyjnym Git. Wartość odpowiada kluczowi url.

W przypadku komputerów Mac i Linux użyj poniższych poleceń:

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

W systemie Windows otwórz poniższy plik w dowolnym edytorze tekstu i znajdź wartość klucza url.

project_dir/.git/config

Uwaga: Działa to nawet wtedy, gdy jesteś offline lub zdalny serwer git został usunięty.

Harikrishnan
źródło
1
To działało dla mnie po usunięciu zdalnego serwera, na którym znajdowała się pierwotna kasa. Wszystkie inne próby nie powiodło się: git remote get-url origin >> fatal: No such remote 'origin',git config --get remote.origin.url >>
jxramos
14

Zasadniczo używam:

git remote get-url origin

Działa w konsoli poleceń Git Bash lub konsoli poleceń CMD w systemie Windows. To powiedziawszy, działa z wersją 2.x Git.

maytham-ɯɐɥʇʎɐɯ
źródło
12
git config --list

To polecenie poda wszystkie informacje związane z Twoim repozytorium.

Kasthuri Shravankumar
źródło
10

Pilot nadrzędny może nie być nazywany „źródłem”, więc oto jego odmiana:

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

Lub:

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

Bardziej przydatne zmienne to:

$ git config -l
Cagney
źródło
9

Aby uzyskać adres IP / nazwę hosta origin

W przypadku ssh://repozytoriów:

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

W przypadku git://repozytoriów:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d ":"
Stephen
źródło
4
Do sshtego działa tylko w przypadku braku ~/.ssh/configktórego przepisuje nazwę hosta lub alias.
Tino
9

W celu uzupełnienia innych odpowiedzi: Jeśli pilot z jakiegoś powodu został zmieniony, a więc nie odzwierciedla oryginalnego pochodzenia, pierwszy wpis w dzienniku reflog (tj. Ostatni wpis wyświetlany przez polecenie git reflog) powinien wskazywać, gdzie repo zostało pierwotnie sklonowane od.

na przykład

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

(Pamiętaj, że dziennik może zostać wyczyszczony, więc nie gwarantuje to, że zadziała).

Jeremy
źródło
1
Jest to prawdopodobnie jedyny prawdziwy sposób na uzyskanie „oryginalnego” pilota, jeśli został zmieniony.
Justin Ohms,
8

Ze git remote show origintrzeba być w katalogu projektów. Ale jeśli chcesz określić adresy URL z dowolnego miejsca, którego możesz użyć:

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

Jeśli będziesz często potrzebować tego polecenia, możesz zdefiniować alias w swoim .bashrclub .bash_profilew systemie MacOS.

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

Musisz tylko zadzwonić giturldo folderu głównego Git, aby po prostu uzyskać jego adres URL.


Jeśli rozszerzysz ten alias w ten sposób

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

otrzymujesz tylko zwykły adres URL bez poprzedzającego

„url =”

w

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

zyskujesz więcej możliwości w jego użyciu:

Przykład

Na komputerze Mac możesz zadzwonić, open $(giturl)aby otworzyć adres URL w standardowej przeglądarce.

Lub chrome $(giturl)otwórz go za pomocą przeglądarki Chrome w systemie Linux.

Sedat Kilinc
źródło
8

Prostym sposobem jest otwarcie .git/configpliku:

cat .git/config

Edytować:

vim .git/config lub

nano .git/config

Omar Makled
źródło
1
Zakłada się, że korzystasz z systemu Linux (?).
Peter Mortensen
7

Wydrukuj dowolnie nazwane adresy URL zdalnego pobierania:

git remote -v | grep fetch | awk '{print $2}'
Aron
źródło
6

Jeśli nie znasz nazwy zdalnego nadrzędnego odgałęzienia, możesz najpierw to sprawdzić, sprawdzając nazwę nadrzędnego odgałęzienia, na którym została zbudowana bieżąca gałąź. Użyj w git rev-parseten sposób:

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

To pokazuje, że gałąź nadrzędna była źródłem bieżącej gałęzi. Można to przeanalizować, aby uzyskać zdalną nazwę w następujący sposób:

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

Teraz weź to i potokuj do, git ls-remotea otrzymasz adres URL zdalnego sterownika, który jest źródłem bieżącej gałęzi:

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

Teraz należy zauważyć, że niekoniecznie jest to to samo, co sklonowane zdalne repozytorium źródłowe. W wielu przypadkach to jednak wystarczy.

Krzysztof
źródło
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"
}

Stosowanie:

# 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

Wynik:

https://github.com/your-username/your-repository
ecwpz91
źródło
5

Wolę ten, ponieważ łatwiej jest zapamiętać:

git config -l

Wyświetli wszystkie przydatne informacje, takie jak:

user.name=Your Name
[email protected]
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
Witold Kaczurba
źródło
1

łatwe wystarczy użyć tego polecenia w folderze .git

git config --get remote.origin.url

jeśli masz połączenie z siecią

git remote show origin

pokaże ci adres URL, z którego zostało pierwotnie sklonowane lokalne repozytorium Git.

Mam nadzieję, że to pomoże

Ali Raza
źródło