Bagaimana saya bisa menentukan URL tempat repositori Git lokal awalnya dikloning?

4096

Saya menarik sebuah proyek dari GitHub beberapa hari yang lalu. Sejak itu saya menemukan bahwa ada beberapa garpu di GitHub, dan saya lupa untuk mencatat yang mana yang saya ambil semula. Bagaimana saya bisa menentukan garpu mana yang saya tarik?

Tim
sumber
163
Dengan git 2.7 (Q4 2015), git remote get-url originakan dimungkinkan. Lihat jawaban saya di bawah ini
VonC
21
git remote get-url origintidak bekerja untuk saya - mungkin sudah usang? git remote show originbekerja sekalipun.
Klik
47
git remote -vmemberi Anda banyak informasi, termasuk ini.
Thorbjørn Ravn Andersen
git remote get-url origin --pushberfungsi dengan baik, tampaknya tidak disusutkan dan memberikan info singkat yang bagus ( git remote show originbisa sangat verbose) qv git help remote.
NeilG

Jawaban:

5760

Jika Anda hanya menginginkan URL jarak jauh, atau jika Anda tidak terhubung ke jaringan yang dapat mencapai repo jarak jauh:

git config --get remote.origin.url

Jika Anda memerlukan output penuh dan Anda berada di jaringan yang dapat mencapai repo jarak jauh tempat asal berada:

git remote show origin

Saat menggunakan git clone(dari GitHub, atau repositori sumber apa pun dalam hal ini) nama default untuk sumber klon adalah "asal". Menggunakan git remote showakan menampilkan informasi tentang nama jarak jauh ini. Beberapa baris pertama harus menunjukkan:

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:

Jika Anda ingin menggunakan nilai dalam skrip, Anda akan menggunakan perintah pertama yang tercantum dalam jawaban ini.

JaredPar
sumber
2
Gunakan git config seperti yang dijelaskan di bawah ini jika menggunakan jgit dengan amazon-s3.
barryku
6
Meskipun tidak relevan dengan tujuan dari pertanyaan awal, harap dicatat bahwa jika mencoba untuk mendapatkan "Push URL" dan beberapa URL dimasukkan untuk jarak jauh yang ditentukan, Anda juga harus menggunakan git remote show origin(opsional dengan bendera -n yang disediakan oleh @ Casey), atau dengan git remote -vseperti yang disarankan oleh @Montaro dan @rodel.
Amazingant
Untuk apa file ini ditulis? Saya pikir .gitconfigfile itu akan memilikinya, tetapi saya tidak melihatnya di tangan saya.
ayjay
1
@ayjay ´~/.gitconfigbersifat global untuk semua gitrepositori, ini di sini berasal dari konfigurasi lokal yang biasanya ada di .git/config(namun untuk git-submodules jawabannya sedikit lebih sulit). Catat itu strace git config --get remote.origin.urladalah temanmu.
Tino
1
Tetapi URL asli tidak harus berupa URL dari remote yang saat ini digunakan. Untuk menampilkan URL yang digunakan sebenarnya, Anda akan memerlukan solusi ini kemudian: stackoverflow.com/a/40630957/1069083
rubo77
620

Jika Anda menginginkan ini untuk keperluan skrip, Anda hanya bisa mendapatkan URL

git config --get remote.origin.url
Cascabel
sumber
38
Ini jawaban yang benar. Ini jauh lebih cepat dan bahkan berfungsi, jika url jarak jauh tidak tersedia lagi ( git remote show originhanya menunjukkan "conq: repositori tidak ada.").
apfelbox
5
Ini bukan jawaban yang tepat karena opsi konfigurasi url.<base>.insteadOf. Lihat jawaban saya - git memiliki perintah untuk tujuan ini.
Carl Suster
2
@arcresu Keren, +1 untuk Anda! Dalam pembelaan saya, perintah itu tidak ditambahkan sampai Maret 2011, dan itu tidak didokumentasikan sampai September 2012.
Cascabel
1
Hanya @Catskul - git-dir yang relevan (konfigurasi ada di dir git, terlepas dari lokasi tree work), dan tidak berfungsi untuk saya. Yakinkah Anda menentukan path ke direktori .git yang sebenarnya, bukan direktori induknya?
Cascabel
553

Anda dapat mencoba:

git remote -v

Ini akan mencetak semua URL ambil / dorong remote Anda.

Montaro
sumber
255

Untuk mendapatkan jawabannya:

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

Ini lebih baik daripada membaca konfigurasi; lihat halaman manual untukgit-ls-remote :

--get-url

Perluas URL dari repositori jarak jauh yang diberikan dengan mempertimbangkan "url.<base>.insteadOf"pengaturan konfigurasi apa pun (Lihat git-config(1)) dan keluar tanpa berbicara dengan remote.

Seperti yang ditunjukkan oleh @Jefromi, opsi ini ditambahkan dalam v1.7.5 dan tidak didokumentasikan hingga v1.7.12.2 (2012-09).

Carl Suster
sumber
2
bagus: ini juga akan memberikan hal yang sama untuk versi sebelumnya> git remote -v | grep fetch | awk '{print $ 2}'
ravi.zombie
1
Saya pikir sebagian besar jawaban lain lebih menunjukkan dan memberi tahu tentang perintah git dan eksposisi tentang sejarah git. Ini adalah satu-satunya jawaban yang tidak menganggap hulu Anda dipanggil origin.
Mike D
Ini adalah pengganti paling langsung untuk remote get-urlopsi lama . Itu pengganti drop-in.
Klaatu von Schlacker
111

Dengan Git 2.7 (rilis 5 Januari 2015), Anda memiliki solusi yang lebih koheren menggunakan git remote:

git remote get-url origin

(liontin bagus git remote set-url origin <newurl>)

Lihat komit 96f78d3 (16 Sep 2015) oleh Ben Boeckel ( mathstuf) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit e437cbd , 05 Okt 2015) :

remote: tambahkan sub-perintah get-url

Memperluas insteadOfadalah bagian dari ls-remote --urldan tidak ada cara untuk berkembang pushInsteadOfjuga.
Tambahkan get-urlsubperintah untuk dapat meminta keduanya serta cara untuk mendapatkan semua URL yang dikonfigurasi.

get-url:

Mengambil URL untuk remote.
Konfigurasi untuk insteadOfdan pushInsteadOfdiperluas di sini.
Secara default, hanya URL pertama yang terdaftar.

  • Dengan ' --push', URL dorong lebih disukai daripada mengambil URL.
  • Dengan ' --all', semua URL untuk remote akan dicantumkan.

Sebelum git 2.7, Anda memiliki:

 git config --get remote.[REMOTE].url
 git ls-remote --get-url [REMOTE]
 git remote show [REMOTE]
VONC
sumber
4
Setelah 5 tahun, banyak yang berubah dan ini seharusnya menjadi jawaban yang diterima sekarang. Tapi mungkin menambahkan sintaks pra-2.7 juga.
msp
58

Sebagai rangkuman, setidaknya ada empat cara:

(Berikut ini dicoba untuk repositori Linux resmi)

Informasi paling sedikit:

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

dan

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

Informasi lebih lanjut:

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

Informasi lebih lanjut:

$ 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)
nonopolaritas
sumber
4
Catatan git config --get remote.origin.urlmengambil URL asli yang ditetapkan dengan git remote add ...atau git remote set-url ...saat git ls-remote --get-url originmengambil URL yang sebenarnya digunakan untuk mengakses remote - yang mungkin berbeda di hadapan git config --global url.XXX.insteadOf YYY. Jadi kedua output mungkin berbeda! Perhatikan juga bahwa git ls-remote --get-url(tanpa origin) tidak perlu mengambil origin, melainkan menunjukkan hulu yang dilacak, sehingga akan gagal misalnya dalam keadaan HEAD terpisah.
Tino
24

Saya pikir Anda dapat menemukannya di bawah .git/configdan remote["origin"]jika Anda tidak memanipulasinya.

meder omuraliev
sumber
22

Jawaban singkat:

$ git remote show -n origin

atau, alternatif untuk skrip cepat murni:

$ git config --get remote.origin.url

Beberapa info:

  1. $ git remote -vakan mencetak semua remote (bukan yang Anda inginkan). Anda ingin asal bukan?
  2. $ git remote show originjauh lebih baik, hanya menunjukkan origintetapi memakan waktu terlalu lama (diuji pada git versi 1.8.1.msysgit.1).

Saya berakhir dengan $ git remote show -n origin:, yang tampaknya paling cepat. Dengan -nitu tidak akan mengambil remote head (cabang AKA). Anda tidak memerlukan jenis info itu, bukan?

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

Anda dapat menerapkan | grep -i fetchke ketiga versi untuk hanya menampilkan URL yang diambil.

Jika Anda membutuhkan kecepatan murni, maka gunakan:

$ git config --get remote.origin.url

Terima kasih kepada @Jefromi karena menunjukkannya.

Casey
sumber
22

Bagi saya, ini adalah cara yang lebih mudah (kurang mengetik):

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

sebenarnya, saya sudah menjadi yang aliasdisebut syang tidak:

git remote -v
git status

Anda dapat menambahkan ke profil Anda dengan: alias s='git remote -v && git status'

Kode Knox
sumber
17

Saya tidak pernah bisa mengingat semua parameter untuk perintah Git, jadi saya hanya memasukkan alias di ~/.gitconfigfile yang lebih masuk akal bagi saya, jadi saya bisa mengingatnya, dan hasilnya kurang mengetik:

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

Setelah memuat ulang terminal, Anda bisa mengetik:

> git url

Berikut adalah beberapa yang lebih sering saya gunakan:

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

Saya juga sangat merekomendasikan git-ekstra yang memiliki git info perintah yang memberikan informasi lebih rinci tentang cabang-cabang jarak jauh dan lokal.

Apa yang Akan Menjadi Keren
sumber
Saya sangat suka ini!
Alfie
15

URL Git akan berada di dalam file konfigurasi Git. Nilai sesuai dengan kunci url.

Untuk Mac dan Linux gunakan perintah di bawah ini:

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

Untuk Windows, buka file di bawah ini dalam editor teks apa pun dan temukan nilai untuk kunci url.

project_dir/.git/config

Catatan: Ini akan berfungsi bahkan jika Anda sedang offline atau server git jarak jauh telah dihapus.

Harikrishnan
sumber
1
Inilah yang bekerja untuk saya setelah server jauh yang meng-host checkout asli diturunkan. Semua upaya lain gagal: git remote get-url origin >> fatal: No such remote 'origin',git config --get remote.origin.url >>
jxramos
14

Saya pada dasarnya menggunakan:

git remote get-url origin

Ini bekerja untuk konsol perintah Git Bash atau konsol perintah CMD di Windows. Yang mengatakan, ini berfungsi dengan versi 2.x dari Git.

maytham-ɯɐɥʇʎɐɯ
sumber
12
git config --list

Perintah ini akan memberikan semua informasi yang terkait dengan repositori Anda.

Kasthuri Shravankumar
sumber
10

Remote hulu mungkin tidak disebut "asal", jadi inilah variasi:

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

Atau:

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

Untuk variabel yang lebih bermanfaat ada:

$ git config -l
cagney
sumber
9

Untuk mendapatkan alamat IP / nama host dari origin

Untuk ssh://repositori:

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

Untuk git://repositori:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d ":"
Stephen
sumber
4
Untuk sshini hanya berfungsi jika tidak ada ~/.ssh/configyang menulis ulang nama host atau alias.
Tino
9

Untuk melengkapi jawaban lain: Jika remote untuk beberapa alasan telah diubah dan tidak mencerminkan asal aslinya , entri pertama di reflog (yaitu entri terakhir ditampilkan oleh perintahgit reflog ) harus menunjukkan di mana repo awalnya dikloning. dari.

misalnya

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

(Ingatlah bahwa reflog dapat dibersihkan, jadi ini tidak dijamin berfungsi.)

Jeremy
sumber
1
Ini mungkin satu-satunya cara nyata untuk mendapatkan remote "asli" jika telah diubah.
Justin Ohms
8

Dengan git remote show originAnda harus berada di direktori proyek. Tetapi jika Anda ingin menentukan URL dari tempat lain Anda bisa menggunakan:

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

Jika Anda sering membutuhkan perintah ini, Anda bisa mendefinisikan alias di .bashrcatau .bash_profiledengan MacOS Anda.

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

Jadi Anda hanya perlu memanggil giturldi folder root Git untuk mendapatkan URL-nya.


Jika Anda memperpanjang alias ini seperti ini

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

Anda hanya mendapatkan URL biasa tanpa yang sebelumnya

"url ="

di

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

Anda mendapatkan lebih banyak kemungkinan dalam penggunaannya:

Contoh

Di Mac Anda bisa menelepon open $(giturl) untuk membuka URL di peramban standar.

Atau chrome $(giturl)untuk membukanya dengan browser Chrome di Linux.

Sedat Kilinc
sumber
8

Cara sederhana adalah membuka .git/configfile:

cat .git/config

Untuk mengedit:

vim .git/config atau

nano .git/config

Omar Makled
sumber
1
Ini mengandaikan Anda berada di Linux (?).
Peter Mortensen
7

Cetak sembarang nama URL ambil jarak jauh:

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

Jika Anda tidak tahu nama remote hulu untuk cabang, Anda bisa mencarinya terlebih dahulu dengan memeriksa nama cabang hulu tempat cabang saat ini dibangun. Gunakan git rev-parseseperti ini:

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

Ini menunjukkan bahwa cabang hulu yang merupakan sumber untuk cabang saat ini. Ini dapat diuraikan untuk mendapatkan nama jarak jauh seperti ini:

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

Sekarang ambil dan pipa itu ke git ls-remotedan Anda akan mendapatkan URL dari remote upstream yang merupakan sumber dari cabang saat ini:

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

Sekarang harus dicatat, bahwa ini tidak selalu sama dengan repositori sumber jarak jauh yang dikloning. Namun dalam banyak kasus itu sudah cukup.

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

Pemakaian:

# 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

Keluaran:

https://github.com/your-username/your-repository
ecwpz91
sumber
5

Saya lebih suka yang ini karena lebih mudah diingat:

git config -l

Ini akan mencantumkan semua informasi yang berguna seperti:

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
sumber
1

mudah hanya menggunakan perintah ini di mana Anda menempatkan folder .git

git config --get remote.origin.url

jika Anda terhubung ke jaringan

git remote show origin

itu akan menunjukkan kepada Anda URL tempat repositori Git lokal awalnya dikloning.

semoga ini membantu

Ali Raza
sumber