Pytanie Jak mogę określić adres URL, z którego pierwotnie sklonowano lokalne repozytorium Git?


Kilka dni temu wyciągnąłem projekt z GitHub. Odkąd odkryłem, że na GitHubie jest kilka widelców, nie zauważyłem, który wziąłem pierwotnie. Jak mogę określić, które z tych rozwidleń wyciągnąłem?


2777
2017-11-03 16:47


pochodzenie


Z git 2.7 (Q4 2015), git remote get-url origin będzie możliwe. Widzieć moja odpowiedź poniżej - VonC
Jestem pewien, że miałeś na myśli git remote get-url origin. - shiri
codingaffairs.blogspot.com/2017/01/... - Hammad Tariq
git remote get-url origin nie działa dla mnie - być może przestarzałe? git remote show origin pracował jednak. - Klik
git remote -v daje wiele informacji, w tym również. - Thorbjørn Ravn Andersen


Odpowiedzi:


Jeśli chcesz usunąć tylko zdalny adres URL lub integralność referencyjną:

git config --get remote.origin.url

Jeśli potrzebujesz pełnej wydajności lub integralności referencyjnej jest nienaruszona:

git remote show origin

Podczas używania git clone (z GitHub lub z jakiegokolwiek repozytorium źródłowego) domyślną nazwą źródła jest "origin". Za pomocą git remote show wyświetli informację o tej zdalnej nazwie. Pierwsze kilka linii powinno pokazywać:

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:

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


3939
2017-11-03 16:50



Użyj git config, jak opisano poniżej, jeśli używasz jgit z amazon-s3. - barryku
Chociaż nie jest to zgodne z celem pierwotnego pytania, pamiętaj, że jeśli spróbujesz uzyskać "Push URL" i wiele adresów URL dla określonego pilota, musisz albo użyć git remote show origin (opcjonalnie z flagą -n dostarczoną przez @Casey) lub z git remote -v zgodnie z sugestią @Montaro i @rodel. - Amazingant
Co oznacza "jeśli integralność referencyjna została złamana"? W komentarzu do innej odpowiedzi znajduje się przypadek, w którym zdalny URL jest "już niedostępny": czy to jest to? gdzie "niedostępny" oznacza "nieosiągalny" ?? - Eric Lebigot
@JaredPar Co masz na myśli przez integralność referencyjną? - Akshayraj Kore
Uważam to za oszałamiające, że to pytanie było wielokrotnie poddawane pod głosowanie i oglądane przez szaloną ilość razy. Pozytywny testament do przepełnienia stosu i negatywny do Gita - Mads Boyd-Madsen


Jeśli chcesz tego do skryptów, możesz uzyskać tylko adres URL

git config --get remote.origin.url

498
2017-11-03 19:35



To jest. O wiele szybciej niż powyższe rozwiązanie. - K-RAN
To jest poprawna odpowiedź. Jest szybszy i działa nawet, jeśli zdalny adres URL nie jest już dostępny (git remote show origin po prostu pokazuje "conq: repozytorium nie istnieje."). - apfelbox
To nie jest właściwa odpowiedź z powodu opcji konfiguracji url.<base>.insteadOf. Zobacz moją odpowiedź - git ma polecenie do tego celu. - arcresu
@arcresu Cool, +1 do Ciebie! W mojej obronie to polecenie zostało dodane dopiero w marcu 2011 r. I nie zostało udokumentowane do września 2012 r. - Cascabel
Wydaje się nie działać z --git-dir lub --work-tree - Catskul


Możesz spróbować:

git remote -v

Wyświetli wszystkie adresy URL pobierania / przekazywania twoich pilotów.


422
2018-01-29 12:01





Aby uzyskać odpowiedź:

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

To jest lepsze niż czytanie konfiguracji; odwołać się do strona podręcznika dla git-ls-remote:

--get-url

Rozwiń adres URL danego zdalnego repozytorium, biorąc pod uwagę   każdy "url.<base>.insteadOf" konfiguracja (patrz git-config(1)) i   wyjdź bez rozmowy z pilotem.

Jak wskazał @Jefromi, ta opcja została dodana w v1.7.5 i nieudokumentowane do v1.7.12.2 (2012-09).


196
2018-06-02 05:15



dobry: to zapewniłoby to samo dla poprzednich wersji> git remote -v | grep fetch | awk '{print $ 2}' - ravi.zombie


Z Git 2.7 (wydanie 5 stycznia 2015 r.) Masz bardziej spójne rozwiązanie z wykorzystaniem git remote:

git remote get-url origin

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

Widzieć zatwierdzić 96f78d3 (16 września 2015) przez Ben Boeckel (mathstuf).
(Scalone przez Junio ​​C Hamano - gitster - w commit e437cbd, 05 października 2015 r.):

remote: dodaj podkomendę get-url

Rozszerzanie insteadOf jest częścią ls-remote --url i nie ma mowy   rozszerzać pushInsteadOf także.
  Dodać get-url podkomunikat, aby móc wysyłać zapytania zarówno w taki sposób, jak i sposób uzyskania wszystkich skonfigurowanych adresów URL.

get-url:

Pobiera adresy URL zdalnego.
  Konfiguracje dla insteadOf i pushInsteadOf są rozwijane tutaj.
  Domyślnie wyświetlany jest tylko pierwszy adres URL.

  • Z '--push", adresowane URL-e są wyszukiwane, a nie pobierane adresy URL.
  • Z '--all", zostaną wyświetlone wszystkie adresy URL zdalnego.

Przed git 2.7 miałeś:

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

63
2017-10-07 12:07



Po 5 latach wiele się zmieniło i teraz powinno to być zaakceptowaną odpowiedzią. Ale może dodać także składnię przed wersją 2.7. - msparer
@msparer Zaktualizowałem odpowiedź. - VonC


Podsumowując, istnieją co najmniej cztery sposoby:

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

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)

43
2018-05-15 15:28



Uwaga git config --get remote.origin.url pobiera pierwotny adres URL, który został ustawiony git remote add ... lub git remote set-url ... podczas git ls-remote --get-url origin pobiera adres URL, który jest rzeczywiście używany do uzyskania dostępu do zdalnego - który może być inny w obecności git config --global url.XXX.insteadOf YYY. Więc oba wyjścia mogą się różnić!  Zwróć też uwagę na to git ls-remote --get-url (bez origin) nie jest konieczne pobieranie originzamiast tego pokazuje śledzone w górę, więc nie powiedzie się na przykład w stanie odłączenia HEAD. - Tino


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 -v wypisze wszystkie piloty (nie tego, co chcesz). Chcesz właściwego pochodzenia?
  2. $ git remote show origin o wiele lepiej, tylko pokazy origin ale 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óry wydaje się być najszybszy. Z -n nie będzie pobierał 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 aplikować | grep -i fetch do wszystkich trzech wersji, aby wyświetlić tylko URL pobierania.

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

$ git config --get remote.origin.url

Dzięki @Jefromi za wskazanie tego.


16
2018-02-27 18:11





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


15
2017-11-03 16:50





Nadrzędny pilot zdalnego sterowania nie może być nazywany "origin", a więc jest to wariacja:

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

Więcej użytecznych zmiennych:

$ git config -l

8
2018-04-19 20:49





Aby uzyskać adres IP / nazwę hosta origin

Dla ssh:// repozytoria:

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

Dla git:// repozytoria:

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

6
2018-06-24 20:54



Dla sshdziała to tylko pod nieobecność ~/.ssh/config który przepisuje nazwę hosta lub alias. - Tino