ค้นหาชื่อของที่เก็บดั้งเดิมที่คุณโคลนจาก Git


118

เมื่อคุณทำการโคลนครั้งแรกโดยใช้ไวยากรณ์

git clone username@server:gitRepo.git

เป็นไปได้ไหมที่จะใช้ที่เก็บในเครื่องของคุณเพื่อค้นหาชื่อของโคลนเริ่มต้นนั้น

(ในตัวอย่างด้านบนให้ค้นหาgitRepo.git)


คำตอบ:


91

ในรูทที่เก็บ.git/configไฟล์จะเก็บข้อมูลทั้งหมดเกี่ยวกับที่เก็บระยะไกลและสาขา ในตัวอย่างของคุณคุณควรมองหาสิ่งต่างๆเช่น:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = server:gitRepo.git

นอกจากนี้คำสั่ง Git ยังgit remote -vแสดงชื่อที่เก็บแบบรีโมตและ URL ที่เก็บระยะไกล "ต้นกำเนิด" มักจะสอดคล้องกับที่เก็บต้นฉบับซึ่งสำเนาในเครื่องถูกโคลน


16
คุณยังสามารถใช้git remote show originเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับรีโมทนั้นได้อีกด้วย
Cascabel

1
ดูเหมือนว่าทั้งสองวิธีในการหาคำตอบจะเทียบเท่า - ดูเหมือนว่าเพียงแค่อ่านและเขียนgit remote -v .git/config
flow2k

103
git config --get remote.origin.url

2
ตกลงกัน; วิธีนี้ดีที่สุดเพราะไม่ต้องการการเชื่อมต่อ / รับรองความถูกต้องกับเซิร์ฟเวอร์ระยะไกล git OP ถามว่า "ใช้ที่เก็บในเครื่องของคุณ" แต่git remote show originโทรออกไปยังเครือข่าย
Travis Wilson

1
สิ่งนี้ถูกห่อด้วยชื่อฐานเป็นคำตอบของ Casey ที่ใช้งานได้ดี
Jonathan Drapeau

29

นี่คือคำสั่ง Bash ด่วนที่คุณอาจค้นหาจะพิมพ์เฉพาะชื่อฐานของที่เก็บระยะไกล:

คุณดึงข้อมูลจากที่ไหน:

basename $(git remote show -n origin | grep Fetch | cut -d: -f2-)

อีกทางเลือกหนึ่งที่คุณกดไปที่ :

basename $(git remote show -n origin | grep Push | cut -d: -f2-)

โดยเฉพาะตัว-nเลือกทำให้คำสั่งเร็วขึ้นมาก


11

ฉันใช้สิ่งนี้:

basename $(git remote get-url origin) .git

gitRepoซึ่งผลตอบแทนบางอย่างเช่น (ลบส่วน.gitท้ายของคำสั่งเพื่อส่งคืนสิ่งที่ต้องการgitRepo.git)

(หมายเหตุ: ต้องใช้ Git เวอร์ชัน 2.7.0 หรือใหม่กว่า)


2

ฉันสะดุดกับคำถามนี้ที่พยายามดึงไฟล์ organization/repoสตริงจากโฮสต์คอมไพล์เช่น github หรือ gitlab

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'

ใช้sedเพื่อแทนที่ผลลัพธ์ของgit configคำสั่งด้วยชื่อองค์กรและ repo

สิ่งที่ต้องการgithub/scientistจะถูกจับคู่โดยคลาสอักขระ[[:graph:]]ในนิพจน์ทั่วไป

ตัว\1บอก sed จะแทนที่ทุกอย่างด้วยอักขระที่ตรงกันเท่านั้น


พิมพ์ท้ายบอกว่า. get แทน. git ---- git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'
MSillence

ขอบคุณ @MSillence แก้ไข
jhnstn

0
git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'

ได้รับการทดสอบด้วยรูปแบบ URL ที่แตกต่างกันสามแบบ:

echo "Fetch URL: http://user@pass:gitservice.org:20080/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: Fetch URL: git@github.com:home1-oss/oss-build.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: https://github.com/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'

1
อธิบายสิ่งที่คุณทำวิธีตอบ
Maher

อาจเพิ่มข้อมูลเพิ่มเติมเช่นเกี่ยวกับการพึ่งพา Ruby และแพลตฟอร์มที่ทดสอบบน (รวมถึงข้อมูลเวอร์ชัน)
Peter Mortensen

0

ซึ่งจะทำงานเพื่อให้ได้ค่า

#!/usr/bin/env bash
repoSlug="$(git config --get remote.origin.url | cut -d/ -f5 | cut -d. -f1)"
echo ${repoSlug}

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