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.)
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:
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.
git remote show originđể xem nhiều thông tin hơn về điều khiển từ xa đó.
git remote -vchỉ đọc và viết .git/config.
git config --get remote.origin.url
git remote show origingọi ra mạng.
Đâ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.
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.
git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'
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'