ฉันจะกำหนด URL ที่ที่เก็บ Git ในท้องที่นั้นถูกโคลนได้อย่างไร


4093

ฉันดึงโครงการจาก GitHub ไม่กี่วันที่ผ่านมา ตั้งแต่ฉันค้นพบว่ามีหลายส้อมใน GitHub และฉันละเลยที่จะสังเกตว่าฉันใช้อันไหน ฉันจะกำหนดได้อย่างไรว่าส่วนไหนของส้อมที่ฉันดึงออกมา?


163
ด้วย git 2.7 (Q4 2015) git remote get-url originจะเป็นไปได้ ดูคำตอบของฉันด้านล่าง
VonC


21
git remote get-url originใช้งานไม่ได้สำหรับฉัน - เลิกใช้แล้วหรือไม่ git remote show originทำงานแม้ว่า
คลิกที่

47
git remote -vให้ข้อมูลกับคุณมากมายรวมถึงสิ่งนี้
Thorbjørn Ravn Andersen

git remote get-url origin --pushทำงานได้ดีเห็นได้ชัดไม่คิดค่าเสื่อมราคาและให้ข้อมูลสั้น ๆ ดี ( git remote show originอาจจะมาก verbose) git help remoteคิวโวลต์
NeilG

คำตอบ:


5757

หากคุณต้องการเฉพาะ URL ระยะไกลหรือหากคุณไม่ได้เชื่อมต่อกับเครือข่ายที่สามารถเข้าถึง repo ระยะไกล:

git config --get remote.origin.url

หากคุณต้องการเอาต์พุตเต็มและคุณอยู่ในเครือข่ายที่สามารถเข้าถึง repo ระยะไกลที่มีต้นกำเนิดอยู่:

git remote show origin

เมื่อใช้git clone(จาก GitHub หรือแหล่งเก็บข้อมูลใด ๆ สำหรับเรื่องนั้น) ชื่อเริ่มต้นสำหรับแหล่งที่มาของการโคลนคือ "ต้นกำเนิด" การใช้git remote showจะแสดงข้อมูลเกี่ยวกับชื่อระยะไกลนี้ สองสามบรรทัดแรกควรแสดง:

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:

หากคุณต้องการใช้ค่าในสคริปต์คุณจะใช้คำสั่งแรกที่ระบุไว้ในคำตอบนี้


2
ใช้ git config ตามที่อธิบายไว้ด้านล่างแทนหากใช้ jgit กับ amazon-s3
barryku

6
แม้ว่าจะไม่เกี่ยวข้องกับวัตถุประสงค์ของคำถามเดิมโปรดทราบว่าหากพยายามรับ "Push URL" และป้อน URL หลายรายการสำหรับระยะไกลที่ระบุคุณจะต้องใช้git remote show origin(เป็นทางเลือกด้วยแฟล็ก -n ที่ @ Casey) หรือgit remote -vตามที่ @Montaro และ @rodel แนะนำ
ประหลาดใจ

ไฟล์นี้เขียนถึงอะไร? ฉันคิดว่า.gitconfigไฟล์จะมี แต่ฉันไม่เห็นมันในของฉัน
ayjay

1
@ayjay ´~/.gitconfigเป็นส่วนกลางสำหรับที่gitเก็บข้อมูลทั้งหมดนี่มาจากการกำหนดค่าท้องถิ่นซึ่งโดยปกติจะอยู่ใน.git/config(อย่างไรก็ตามสำหรับ git-submodules คำตอบนั้นยากกว่าเล็กน้อย) โปรดทราบว่าstrace git config --get remote.origin.urlเป็นเพื่อนของคุณ
Tino

1
แต่ URL ดั้งเดิมไม่จำเป็นต้องเป็น URL ของรีโมตที่ใช้ในปัจจุบัน ในการแสดง URL ที่ใช้จริงคุณจะต้องใช้วิธีแก้ไขปัญหานี้แล้ว: stackoverflow.com/a/40630957/1069083
rubo77

620

หากคุณต้องการสิ่งนี้เพื่อวัตถุประสงค์ในการเขียนสคริปต์คุณจะได้รับเฉพาะ URL ด้วย

git config --get remote.origin.url

38
นี่คือคำตอบที่ถูกต้อง มันเป็นวิธีที่เร็วกว่าและใช้งานได้แม้ว่า URL ระยะไกลจะไม่สามารถใช้ได้อีกต่อไป ( git remote show originเพียงแสดง "conq: repository ไม่มีอยู่")
apfelbox

5
นี่ไม่ใช่คำตอบที่ถูกต้องเนื่องจากตัวเลือกการurl.<base>.insteadOfกำหนดค่า ดูคำตอบของฉัน - คอมไพล์มีคำสั่งสำหรับวัตถุประสงค์นี้
Carl Suster

2
@arcresu เจ๋ง +1 กับคุณ! ในการป้องกันของฉันคำสั่งนั้นจะไม่ถูกเพิ่มจนถึงมีนาคม 2011 และจะไม่มีการบันทึกไว้จนกว่าจะถึงเดือนกันยายน 2012
Cascabel

1
@Catskul เท่านั้น - git-dir มีความเกี่ยวข้อง (การกำหนดค่าที่อยู่ใน git dir เป็นอิสระจากที่ตั้งต้นไม้ทำงาน) และมันทำงานสำหรับฉัน คุณแน่ใจหรือไม่ว่าคุณระบุเส้นทางไปยัง. git dir ที่แท้จริงไม่ใช่ไดเรกทอรีหลัก
Cascabel

553

คุณสามารถลอง:

git remote -v

มันจะพิมพ์ URL การเรียก / ผลักดันรีโมทของคุณทั้งหมด


255

เพื่อให้ได้คำตอบ:

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

สิ่งนี้ดีกว่าการอ่านการกำหนดค่า อ้างถึงman page สำหรับgit-ls-remote :

--get-URL

ขยาย URL ของพื้นที่เก็บข้อมูลระยะไกลที่กำหนดโดยคำนึงถึง"url.<base>.insteadOf"การตั้งค่าคอนฟิกใด ๆ(ดูgit-config(1)) และออกโดยไม่พูดคุยกับรีโมท

ตามที่ระบุโดย @Jefromi ตัวเลือกนี้จะถูกเพิ่มในv1.7.5และไม่มีการบันทึกไว้จนถึงv1.7.12.2 (2012-09)


2
สิ่งที่ดี: สิ่งนี้จะให้เหมือนกันสำหรับรุ่นก่อนหน้า> git remote -v | grep fetch | awk '{print $ 2}'
ravi.zombie

1
ฉันคิดว่าคำตอบอื่น ๆ ส่วนใหญ่เป็นการแสดงและบอกเล่าเกี่ยวกับคำสั่ง git และคำอธิบายเกี่ยวกับประวัติ git originนี่คือคำตอบเดียวที่ไม่ถือว่าต้นน้ำของคุณเรียกว่า
Mike D

นี่คือการแทนที่โดยตรงที่สุดสำหรับremote get-urlตัวเลือกเก่า เป็นการแทนที่แบบหล่น
Klaatu von Schlacker

111

ด้วย Git 2.7 (เผยแพร่เมื่อวันที่ 5 มกราคม 2015) คุณมีทางออกที่สอดคล้องกันมากขึ้นโดยใช้git remote:

git remote get-url origin

(จี้ที่ดีของgit remote set-url origin <newurl>)

ดูการกระทำ 96f78d3 (16 ก.ย. 2558) โดยBen Boeckel (mathstuf )
(ผสานโดยJunio ​​C Hamano - gitster- in e437cbd , 05 Oct 2015) :

รีโมต: เพิ่มคำสั่งย่อย get-url

ที่ขยาย insteadOfเป็นส่วนหนึ่งls-remote --urlและไม่มีวิธีการขยายpushInsteadOfเช่นกัน
เพิ่มคำget-urlสั่งย่อยเพื่อให้สามารถสืบค้นทั้งสองรวมทั้งวิธีรับ URL ที่กำหนดค่าทั้งหมด

get-url:

ดึง URL สำหรับรีโมต
การกำหนดค่าสำหรับinsteadOfและpushInsteadOfถูกขยายที่นี่
ตามค่าเริ่มต้นจะมีการแสดงเฉพาะ URL แรกเท่านั้น

  • ด้วย ' --push' การกด URL จะถูกสอบถามแทนการดึง URL
  • ด้วย ' --all' URL ทั้งหมดสำหรับรีโมตจะถูกแสดงรายการ

ก่อนที่จะคอมไพล์ 2.7 คุณมี:

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

4
หลังจาก 5 ปีมีการเปลี่ยนแปลงมากมายและนี่ควรเป็นคำตอบที่ยอมรับได้ในขณะนี้ แต่อาจเพิ่มไวยากรณ์ก่อน 2.7 เช่นกัน
msp

58

เพื่อสรุปมีอย่างน้อยสี่วิธี:

(พยายามต่อไปนี้สำหรับที่เก็บ Linux อย่างเป็นทางการ)

ข้อมูลน้อยที่สุด:

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

และ

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

ข้อมูลมากกว่านี้:

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

ข้อมูลเพิ่มเติม:

$ 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
หมายเหตุgit config --get remote.origin.urlดึง URL เดิมที่ถูกกำหนดด้วยgit remote add ...หรือgit remote set-url ...ในขณะที่git ls-remote --get-url originดึงข้อมูล URL ที่ถูกนำมาใช้จริงในการเข้าถึงระยะไกล - git config --global url.XXX.insteadOf YYYซึ่งอาจจะแตกต่างกันในการปรากฏตัวของ ดังนั้นเอาต์พุตทั้งสองอาจแตกต่างกัน! นอกจากนี้โปรดทราบว่าgit ls-remote --get-url(ไม่มีorigin) จะไม่ถูกเรียกคืนโดยไม่จำเป็นoriginซึ่งจะแสดง upstream ที่ถูกติดตามดังนั้นมันจะล้มเหลวตัวอย่างเช่นในสถานะ HEAD ที่แยกออกมา
Tino

24

ฉันคิดว่าคุณสามารถค้นหาได้ภายใต้.git/configและremote["origin"]ถ้าคุณไม่ได้จัดการกับมัน


22

คำตอบสั้น ๆ :

$ git remote show -n origin

หรือทางเลือกอื่นสำหรับสคริปต์ด่วนบริสุทธิ์:

$ git config --get remote.origin.url

ข้อมูลบางส่วน:

  1. $ git remote -vจะพิมพ์รีโมททั้งหมด (ไม่ใช่สิ่งที่คุณต้องการ) คุณต้องการต้นกำเนิดใช่ไหม
  2. $ git remote show originดีกว่ามากแสดงoriginแต่ใช้เวลานานเกินไป (ทดสอบกับ git เวอร์ชัน 1.8.1.msysgit.1)

ฉันลงเอยด้วย: $ git remote show -n originซึ่งดูเหมือนจะเร็วที่สุด กับ-nมันจะไม่ดึงหัวระยะไกล (สาขา AKA) คุณไม่ต้องการข้อมูลประเภทนั้นใช่ไหม

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

คุณสามารถสมัคร | grep -i fetchกับทั้งสามเวอร์ชันเพื่อแสดงเฉพาะการดึง URL

หากคุณต้องการความเร็วที่บริสุทธิ์ให้ใช้:

$ git config --get remote.origin.url

ขอบคุณ@Jefromi ที่ชี้ให้เห็นว่า


22

สำหรับฉันนี่เป็นวิธีที่ง่ายกว่า (พิมพ์น้อยลง):

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

อันที่จริงฉันเป็นคนที่ถูกaliasเรียกsว่า:

git remote -v
git status

คุณสามารถเพิ่มในโปรไฟล์ของคุณด้วย: alias s='git remote -v && git status'


17

ฉันไม่สามารถจำพารามิเตอร์ทั้งหมดให้กับคำสั่ง Git ได้ดังนั้นฉันจึงใส่ alias ใน~/.gitconfigไฟล์ที่เหมาะสมกับฉันมากขึ้นดังนั้นฉันจึงจำได้และมันส่งผลให้พิมพ์น้อยลง:

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

หลังจากโหลดเทอร์มินัลใหม่จากนั้นคุณสามารถพิมพ์:

> git url

นี่คือตัวอย่างที่ฉันใช้บ่อยอีกสองสามรายการ:

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

ฉันขอแนะนำgit-extrasซึ่งมีgit info คำสั่งที่ให้ข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับสาขาระยะไกลและท้องถิ่น


ฉันชอบสิ่งนี้มาก!
Alfie

15

Git URL จะอยู่ในไฟล์กำหนดค่าของ Git ค่าสอดคล้องกับคีย์urlค่าสอดคล้องกับการที่สำคัญ

สำหรับ Mac และ Linux ให้ใช้คำสั่งด้านล่าง:

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

สำหรับ Windows เปิดไฟล์ดังต่อไปนี้ในการแก้ไขข้อความใด ๆ urlและหาค่าสำหรับคีย์

project_dir/.git/config

หมายเหตุ: สิ่งนี้จะทำงานแม้ว่าคุณจะออฟไลน์หรือเซิร์ฟเวอร์ git ระยะไกลถูกลบ


1
นี่คือสิ่งที่ใช้งานได้สำหรับฉันเมื่อเซิร์ฟเวอร์ระยะไกลที่โฮสต์การชำระเงินดั้งเดิมถูกนำออก ความพยายามอื่น ๆ ทั้งหมดล้มเหลว: git remote get-url origin >> fatal: No such remote 'origin',git config --get remote.origin.url >>
jxramos

14

ฉันใช้โดยทั่วไป:

git remote get-url origin

ใช้งานได้กับคอนโซลคำสั่ง Git Bash หรือคอนโซลคำสั่ง CMD ใน Windows ที่กล่าวว่าจะทำงานกับรุ่น 2.x ของ Git



10

รีโมตของ upstream อาจไม่ถูกเรียกว่า "origin" ดังนั้นนี่คือการเปลี่ยนแปลง:

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

หรือ:

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

สำหรับตัวแปรที่มีประโยชน์เพิ่มเติมมี:

$ git config -l

9

เพื่อรับที่อยู่ IP / ชื่อโฮสต์ของ origin

สำหรับที่ssh://เก็บ:

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

สำหรับที่git://เก็บ:

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

4
สำหรับsshสิ่งนี้จะทำงานได้ในกรณีที่ไม่มีการ~/.ssh/configเขียนชื่อโฮสต์หรือชื่อแทน
Tino

9

เพื่อเสริมคำตอบอื่น ๆ : ถ้ารีโมตมีการเปลี่ยนแปลงด้วยเหตุผลบางอย่างและไม่ได้สะท้อนถึงต้นกำเนิดดั้งเดิมรายการแรกใน reflog (เช่นรายการสุดท้ายที่แสดงโดยคำสั่งgit reflog ) ควรระบุที่ซื้อคืนที่ถูกโคลนเดิม จาก.

เช่น

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

(โปรดจำไว้ว่าอาจมีการล้าง reflog ดังนั้นจึงไม่รับประกันว่าจะใช้งานได้)


1
นี่อาจเป็นวิธีเดียวที่จะได้รับรีโมต "ดั้งเดิม" หากมีการเปลี่ยนแปลง
Justin Ohms

8

ด้วยgit remote show originคุณจะต้องอยู่ในไดเรกทอรีโครงการ แต่ถ้าคุณต้องการระบุ URL จากที่อื่นคุณสามารถใช้:

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

หากคุณต้องการคำสั่งนี้บ่อยคุณสามารถกำหนดนามแฝงใน.bashrcหรือ.bash_profileด้วย MacOS

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

ดังนั้นคุณเพียงแค่ต้องโทรgiturlในโฟลเดอร์ราก Git เพื่อรับ URL ของมัน


หากคุณขยายนามแฝงนี้เช่นนี้

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

คุณได้รับ URL ธรรมดาเท่านั้นโดยไม่ต้องดำเนินการก่อนหน้า

"url ="

ใน

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

คุณได้รับความเป็นไปได้มากขึ้นในการใช้งาน:

ตัวอย่าง

ใน Mac คุณสามารถโทรopen $(giturl)เพื่อเปิด URL ในเบราว์เซอร์มาตรฐาน

หรือchrome $(giturl)เพื่อเปิดด้วยเบราว์เซอร์ Chrome บน Linux


8

วิธีง่ายๆในการเปิด.git/configไฟล์:

cat .git/config

วิธีแก้ไข:

vim .git/config หรือ

nano .git/config


1
สิ่งนี้อนุมานว่าคุณอยู่บน Linux (?)
Peter Mortensen


6

หากคุณไม่ทราบชื่อของรีโมตอัพสตรีมสำหรับสาขาคุณสามารถค้นหาอัพนั้นก่อนโดยการตรวจสอบชื่อสาขาอัพสตรีมที่สาขาปัจจุบันถูกสร้างขึ้น ใช้git rev-parseแบบนี้:

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

นี้แสดงให้เห็นว่าสาขาต้นน้ำที่เป็นแหล่งสำหรับสาขาปัจจุบัน สามารถแยกวิเคราะห์เพื่อรับชื่อรีโมตเช่นนี้:

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

ตอนนี้นำสิ่งนั้นไปป์ไลน์แล้วgit ls-remoteคุณจะได้รับ URL ของรีโมตอัปสตรีมที่เป็นที่มาของสาขาปัจจุบัน:

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

ตอนนี้ควรสังเกตว่านี่ไม่จำเป็นต้องเหมือนกับที่เก็บข้อมูลรีโมตต้นทางที่โคลนจาก ในหลายกรณีอย่างไรก็ตามมันจะเพียงพอ


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

การใช้งาน:

# 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

เอาท์พุท:

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

5

ฉันชอบอันนี้เพราะจำง่ายกว่า:

git config -l

มันจะแสดงรายการข้อมูลที่เป็นประโยชน์ทั้งหมดเช่น:

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

ง่ายเพียงใช้คำสั่งนี้เมื่อคุณวาง. git ไว้

git config --get remote.origin.url

หากคุณเชื่อมต่อกับเครือข่าย

git remote show origin

มันจะแสดงให้คุณเห็นว่าที่เก็บ Git ในพื้นที่ถูกโคลนตั้งแต่แรก

หวังว่าความช่วยเหลือนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.