Yerel bir Git deposunun orijinal olarak kopyalandığı URL'yi nasıl belirleyebilirim?


4093

Birkaç gün önce GitHub'dan bir proje çektim. O zamandan beri GitHub'da birkaç çatal olduğunu keşfettim ve hangisini aldığımı not etmeyi ihmal ettim. Bu çatallardan hangisini çektiğimi nasıl belirleyebilirim?


163
Git 2.7 (4. Çeyrek 2015) git remote get-url originile mümkün olacak. Aşağıdaki cevabımı
VonC


21
git remote get-url originbenim için çalışmıyor - muhtemelen kullanımdan kaldırıldı mı? git remote show originolsa çalıştı.
Klik

47
git remote -vbuna dahil olmak üzere size çok fazla bilgi verin.
Thorbjørn Ravn Andersen

git remote get-url origin --pushGörünüşe göre amortismana tabi git remote show origintutulmayan iyi çalışır ve güzel kısa bilgi sağlar ( çok ayrıntılı olabilir) qv git help remote.
NeilG

Yanıtlar:


5757

Yalnızca uzak URL'yi istiyorsanız veya uzak repoya erişebilecek bir ağa bağlı değilseniz:

git config --get remote.origin.url

Eğer tam çıkışı gerektiren ve varsa vardır kökeni bulunduğu yere uzak repo ulaşabileceği bir ağ üzerinde:

git remote show origin

Kullanırken git clone(GitHub'dan veya bu konudaki herhangi bir kaynak havuzundan) klon kaynağının varsayılan adı "orijin" olur. Kullanıldığında git remote showbu uzak adla ilgili bilgiler görüntülenir. İlk birkaç satır şunları göstermelidir:

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:

Koddaki değeri kullanmak isterseniz, bu cevapta listelenen ilk komutu kullanırsınız.


2
Amazon-s3 ile jgit kullanılıyorsa bunun yerine git config komutunu kullanın.
barryku

6
Orijinal sorunun amacı ile ilgili olmasa da, belirtilen uzaktan kumanda için "Push URL" ve birden fazla URL girilmeye çalışılırsa, kullanmanız gerekeceğini lütfen unutmayın git remote show origin(isteğe bağlı olarak @ tarafından sağlanan -n bayrağı ile Casey) veya git remote -v@Montaro ve @rodel tarafından önerildiği gibi.
Amazingant

Bu hangi dosyaya yazılır? .gitconfigDosyanın sahip olacağını düşündüm , ama benimkinde görmedim.
ayjay

1
@ayjay ´~/.gitconfigtüm gitdepolar için küreseldir , bu genellikle yerel yapılandırmadan gelir .git/config(git-submodules için cevap biraz daha zordur). Bu strace git config --get remote.origin.urlsenin arkadaşın.
Tino

1
Ancak orijinal URL'nin şu anda kullanılan uzaktan kumandanın URL'si olması gerekmez. Kullanılan gerçek URL'yi göstermek için şu çözüme ihtiyacınız olacaktır: stackoverflow.com/a/40630957/1069083
rubo77 16:30 '

620

Komut dosyası oluşturma amacıyla bunu isterseniz, yalnızca URL'yi

git config --get remote.origin.url

38
Bu doğru cevap. Uzak url artık mevcut değilse çok daha hızlıdır ve hatta çalışır ( git remote show originsadece "conq: depo mevcut değil" ifadesini gösterir).
apfelbox

5
Bu, config seçeneği nedeniyle doğru cevap değildir url.<base>.insteadOf. Cevabım bak - git'in bu amaçla bir komutu var.
Carl Suster

2
@arcresu Havalı, +1 sana! Savunmamda, bu komut Mart 2011'e kadar eklenmedi ve Eylül 2012'ye kadar belgelenmedi.
Cascabel

1
@Catskul Only --git-dir önemlidir (yapılandırma git ağacında, çalışma ağacının konumundan bağımsızdır) ve benim için çalışır. Üst dizinine değil, gerçek .git dizinine giden yolu belirttiğinizden emin misiniz?
Cascabel

553

Deneyebilirsin:

git remote -v

Tüm uzaktan kumandalarınızın getirme / gönderme URL'lerini yazdıracaktır.


255

Cevabı almak için:

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

Bu yapılandırmayı okumaktan daha iyidir; için man sayfasınagit-ls-remote bakınız :

--get-url

Herhangi bir "url.<base>.insteadOf"yapılandırma ayarını (Bkz. git-config(1)) Dikkate alarak verilen uzak deponun URL'sini genişletin ve uzaktan kumanda ile konuşmadan çıkın.

@Jefromi tarafından belirtildiği gibi, bu seçenek v1.7.5'e eklenmiş ve v1.7.12.2'ye (2012-09) kadar belgelenmemiştir .


2
iyi bir: bu önceki sürümleri için de aynı şeyi sağlar> git remote -v | grep fetch | awk '{print $ 2}'
ravi.zombie

1
Diğer cevapların çoğunun git komutları ve git geçmişi hakkında anlatımlarından daha çok olduğunu düşünüyorum. Yukarı akışınızın çağrılmadığını varsaymayan tek cevap budur origin.
Mike D

Bu, eski remote get-urlseçeneğin en doğrudan yerine geçer . Bu bir yedek yedek.
Klaatu von Schlacker

111

Git 2.7 (5 Ocak 2015 sürümü) ile şunları kullanarak daha tutarlı bir çözümünüz var git remote:

git remote get-url origin

(güzel kolye ucu git remote set-url origin <newurl>)

Bakınız Ben Boeckel ( ) tarafından 96f78d3 (16 Eyl 2015) taahhüdü . (Göre Birleştirilmiş - Junio Cı Hamano - içinde e437cbd tamamlama 2015 Ekim 5) :mathstuf
gitster

uzak: get-url alt komutunu ekle

Genişleme insteadOfbir parçasıdır ls-remote --urlve genişlemenin pushInsteadOfde bir yolu yoktur . Yapılandırılan tüm URL'leri almanın yanı sıra hem sorgulamak için
bir get-urlalt komut ekleyin.

get-url:

Uzaktan kumandanın URL'lerini alır.
İçin yapılandırmalar insteadOfve pushInsteadOfburada genişletilir.
Varsayılan olarak, yalnızca ilk URL listelenir.

  • ' --push' İle push URL'ler, URL'leri almak yerine sorgulanır.
  • ' --all' İle uzaktan kumandanın tüm URL'leri listelenir.

Git 2.7'den önce:

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

4
5 yıl sonra çok şey değişti ve bu şimdi kabul edilen cevap olmalı. Ama belki 2.7 öncesi sözdizimini de ekleyin.
msp

58

Özetlemek gerekirse, en az dört yol vardır:

(Aşağıdaki resmi Linux deposu için denendi)

En az bilgi:

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

ve

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

Daha fazla bilgi:

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

Daha fazla bilgi:

$ 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
Not git config --get remote.origin.urlile ayarlanan özgün URL'sini alır git remote add ...ya git remote set-url ...da git ls-remote --get-url originvarlığında farklı olabilir - aslında erişmek için uzaktan kullanılan URL Geri alma git config --global url.XXX.insteadOf YYY. Yani her iki çıkış da farklı olabilir! Ayrıca git ls-remote --get-url(olmadan origin) gerekli şekilde geri almadığını origin, bunun yerine izlenen yukarı akışı gösterdiğini, bu nedenle örneğin ayrılmış HEAD durumunda başarısız olacağını unutmayın.
Tino

24

Bence altında bulabilirsiniz .git/configve remote["origin"]eğer manipüle etmedi.


22

Kısa cevap:

$ git remote show -n origin

veya saf hızlı komut dosyalarına alternatif:

$ git config --get remote.origin.url

Bazı bilgiler:

  1. $ git remote -vtüm uzaktan kumandaları basacaktır (ne istediğinizi değil). Kökeni istiyorsun değil mi?
  2. $ git remote show originçok daha iyi, sadece gösterir originama çok uzun sürer (git sürüm 1.8.1.msysgit.1 üzerinde test edilmiştir).

En $ git remote show -n originhızlı gibi görünen : ile sona erdi . Bununla -nbirlikte uzak kafaları (AKA şubeleri) getirmeyecek. Bu tip bilgiye ihtiyacınız yok, değil mi?

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

| grep -i fetchYalnızca getirme URL'sini göstermek için üç sürüme de başvurabilirsiniz .

Saf hıza ihtiyacınız varsa, şunu kullanın:

$ git config --get remote.origin.url

@Jefromi'ye bunu işaret ettiği için teşekkürler .


22

Benim için bu daha kolay bir yol (daha az yazarak):

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

aslında, ben bunu bir aliasdenilen içine yaptım s:

git remote -v
git status

Profilinize aşağıdakilerle ekleyebilirsiniz: alias s='git remote -v && git status'


17

Git komutlarının tüm parametrelerini asla hatırlayamıyorum, bu yüzden ~/.gitconfigdosyaya benim için daha anlamlı bir takma ad koydum , bu yüzden hatırlayabiliyorum ve daha az yazmayla sonuçlanıyor:

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

Terminali yeniden yükledikten sonra şunu yazabilirsiniz:

> git url

İşte benim sık kullanılanlarımdan birkaç tane daha:

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

Ayrıca uzak ve yerel şubeler hakkında çok daha ayrıntılı bilgi sağlayan bir komut içeren git-extras'ı da şiddetle tavsiye ederim .git info


Bunu çok beğendim!
Alfie

15

Git URL'si Git yapılandırma dosyasının içinde olacaktır. Değer anahtara karşılık gelir url.

Mac ve Linux için aşağıdaki komutları kullanın:

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

Windows için aşağıdaki dosyayı herhangi bir metin düzenleyicisinde açın ve anahtarın değerini bulun url.

project_dir/.git/config

Not: Bu, çevrimdışı olsanız veya uzak git sunucusu kaldırılmış olsa bile çalışır.


1
Orijinal kasayı barındıran uzak sunucu kaldırıldıktan sonra bu benim için çalıştı. : Diğer tüm girişimleri başarısız git remote get-url origin >> fatal: No such remote 'origin',git config --get remote.origin.url >>
jxramos

14

Temelde kullanıyorum:

git remote get-url origin

Windows'ta Git Bash komut konsolu veya CMD komut konsolu için çalışır. Bununla birlikte, Git'in 2.x sürümü ile çalışır.



10

Yukarı akışın uzaktan kumandası "orijin" olarak adlandırılamayabilir, bu yüzden bir varyasyon:

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

Veya:

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

Daha kullanışlı değişkenler için:

$ git config -l

9

IP adresini / ana bilgisayar adını almak için origin

İçin ssh://depoları:

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

İçin git://depoları:

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

4
Bunun için sshsadece ~/.ssh/configana bilgisayar adını veya diğer adı yeniden yazan yokluğunda çalışır .
Tino

9

Diğer cevapları desteklemek için: Uzaktan kumanda bir nedenden dolayı değiştirildiyse ve bu nedenle orijinal orijini yansıtmıyorsa , reflogdaki ilk giriş (yani komut tarafından görüntülenen son giriş), repo'nun git reflogorijinal olarak klonlandığı yeri belirtmelidir. dan.

Örneğin

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

(Reflogun temizlenebileceğini unutmayın, bu yüzden çalışacağı garanti edilmez.)


1
Değiştirilmişse "orijinal" uzaktan kumandayı almanın tek gerçek yolu budur.
Justin Ohms

8

Bununla birlikte git remote show originprojeler dizininde olmalısınız. Ancak, URL'leri başka herhangi bir yerden belirlemek istiyorsanız kullanabilirsiniz:

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

Bu komuta sık sık ihtiyacınız olursa , MacOS'unuzda .bashrcveya .bash_profileMacOS'unuzda bir takma ad tanımlayabilirsiniz .

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

giturlURL'sini almak için Git kök klasörünü aramanız yeterlidir.


Bu takma adı bu şekilde genişletirseniz

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

öncekiler olmadan yalnızca düz URL alırsınız

"Url ="

içinde

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

kullanımında daha fazla olanak elde edersiniz:

Misal

Mac'te open $(giturl)URL'yi standart tarayıcıda açmak için arayabilirsiniz .

Veya chrome $(giturl)Linux'ta Chrome tarayıcısıyla açmak için.


8

Basit bir yol .git/configdosyayı açmaktır:

cat .git/config

Düzenlemek için:

vim .git/config veya

nano .git/config


1
Bu Linux (?) Üzerinde olduğunu varsayar.
Peter Mortensen

7

İsteğe bağlı olarak adlandırılmış uzaktan getirme URL'lerini yazdırın:

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

6

Bir dal için yukarı akış uzaktan kumandasının adını bilmiyorsanız, önce geçerli dalın üzerine inşa edildiği yukarı akış dal adını inceleyerek bunu görebilirsiniz. Bunun git rev-parsegibi kullanın :

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

Bu, geçerli dalın kaynağı olan yukarı akış dalını gösterir. Bu, uzak adı şu şekilde almak için ayrıştırılabilir:

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

Şimdi git ls-remotebunu alın ve yönlendirin ve geçerli dalın kaynağı olan yukarı akış uzaktan kumandasının URL'sini alırsınız:

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

Şimdi, bunun klonlanan kaynak uzak depo ile aynı olması gerekmediğine dikkat edilmelidir. Ancak çoğu durumda bu yeterli olacaktır.


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"
}

Kullanımı:

# 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

Çıktı:

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

5

Bunu hatırlamak daha kolay olduğu için tercih ederim:

git config -l

Aşağıdaki gibi tüm yararlı bilgileri listeler:

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

kolay sadece .git klasörü yerleştirilmiş bu komutu kullanın

git config --get remote.origin.url

ağa bağlıysanız

git remote show origin

size yerel bir Git deposunun orijinal olarak kopyalandığı URL'yi gösterir.

umarım bu yardım

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.