Tìm ra tên của kho lưu trữ ban đầu mà bạn đã nhân bản trong Git


118

Khi bạn thực hiện bản sao đầu tiên của mình bằng cú pháp

git clone username@server:gitRepo.git

Có thể sử dụng kho lưu trữ cục bộ của bạn để tìm tên của bản sao ban đầu đó không?

(Vì vậy, trong ví dụ trên, tìm gitRepo.git.)


Câu trả lời:


91

Trong kho lưu trữ gốc, .git/configtệp chứa tất cả thông tin về các kho và chi nhánh từ xa. Trong ví dụ của bạn, bạn nên tìm kiếm một cái gì đó như:

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

Ngoài ra, lệnh Git git remote -vhiển thị tên và URL kho lưu trữ từ xa. Kho lưu trữ từ xa "gốc" thường tương ứng với kho lưu trữ ban đầu, từ đó bản sao cục bộ được sao chép.


16
Bạn cũng có thể sử dụng git remote show originđể xem nhiều thông tin hơn về điều khiển từ xa đó.
Cascabel

1
Có vẻ như hai phương thức này trong Câu trả lời là tương đương - có vẻ như git remote -vchỉ đọc và viết .git/config.
Flow2k

103
git config --get remote.origin.url

2
Đã đồng ý; điều này là tốt nhất bởi vì nó không yêu cầu kết nối / auth đến máy chủ từ xa git. OP đã hỏi "sử dụng kho lưu trữ cục bộ của bạn" nhưng git remote show origingọi ra mạng.
Travis Wilson

1
Điều này được bao bọc trong một tên cơ sở như câu trả lời của Casey hoạt động tốt
Jonathan Drapeau

29

Đây là lệnh Bash nhanh, mà có lẽ bạn đang tìm kiếm, sẽ chỉ in một tên cơ sở của kho lưu trữ từ xa:

Nơi bạn lấy từ :

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

Ngoài ra, nơi bạn đẩy đến :

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

Đặc biệt là -ntùy chọn làm cho lệnh nhanh hơn nhiều.


11

Tôi sử dụng cái này:

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

Mà trả về một cái gì đó như gitRepo. (Xóa phần .gitcuối của lệnh để trả về một cái gì đó như gitRepo.git.)

(Lưu ý: Nó yêu cầu Git phiên bản 2.7.0 trở lên)


2

Tôi vấp phải câu hỏi này khi cố gắng lấy organization/repochuỗi từ máy chủ git như github hoặc gitlab.

Điều này làm việc cho tôi:

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

Nó sử dụng sedđể thay thế đầu ra của git configlệnh chỉ bằng tên tổ chức và repo.

Một cái gì đó giống như github/scientistđược khớp với lớp nhân vật [[:graph:]]trong biểu thức chính quy.

Các \1sed nói thay thế mọi thứ chỉ với các nhân vật phù hợp.


typo the end nói .get thay vì .git ---- git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'
MSillence

Cảm ơn @MSillence, đã sửa.
jhnstn

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

Nó đã được thử nghiệm với ba kiểu URL khác nhau:

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
giải thích những gì bạn đã làm, cách trả lời
Maher

Có lẽ thêm nhiều thông tin hơn, ví dụ về sự phụ thuộc của Ruby và nền tảng này đã được thử nghiệm trên (bao gồm thông tin phiên bản).
Peter Mortensen

0

Điều này sẽ làm việc để có được giá trị.

#!/usr/bin/env bash
repoSlug="$(git config --get remote.origin.url | cut -d/ -f5 | cut -d. -f1)"
echo ${repoSlug}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.