Làm cách nào tôi có thể xác định URL mà kho lưu trữ Git cục bộ ban đầu được sao chép từ?


4094

Tôi đã lấy một dự án từ GitHub vài ngày trước. Kể từ đó tôi đã phát hiện ra rằng có một số nhánh trên GitHub và tôi đã bỏ qua việc lưu ý cái nào tôi đã lấy ban đầu. Làm thế nào tôi có thể xác định được cái dĩa nào tôi đã kéo?


163
Với git 2.7 (Q4 2015), git remote get-url originsẽ có thể. Xem câu trả lời của tôi dưới đây
VonC


21
git remote get-url originkhông làm việc cho tôi - có thể không dùng nữa? git remote show originlàm việc mặc dù.
Klik

47
git remote -vcung cấp cho bạn rất nhiều thông tin, bao gồm cả điều này.
Thorbjørn Ravn Andersen

git remote get-url origin --pushhoạt động tốt, dường như không được khấu hao và cung cấp thông tin ngắn gọn đẹp ( git remote show origincó thể rất dài dòng) qv git help remote.
NeilG

Câu trả lời:


5760

Nếu bạn chỉ muốn URL từ xa hoặc nếu bạn không được kết nối với mạng có thể truy cập repo từ xa:

git config --get remote.origin.url

Nếu bạn yêu cầu đầu ra đầy đủ và bạn đang ở trên một mạng có thể tiếp cận repo từ xa nơi gốc tọa lạc:

git remote show origin

Khi sử dụng git clone(từ GitHub hoặc bất kỳ kho lưu trữ nguồn nào cho vấn đề đó), tên mặc định cho nguồn của bản sao là "origin". Sử dụng git remote showsẽ hiển thị thông tin về tên từ xa này. Một vài dòng đầu tiên sẽ hiển thị:

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:

Nếu bạn muốn sử dụng giá trị trong tập lệnh, bạn sẽ sử dụng lệnh đầu tiên được liệt kê trong câu trả lời này.


2
Sử dụng cấu hình git như được mô tả dưới đây thay vì sử dụng jgit với amazon-s3.
barryku

6
Mặc dù không liên quan đến mục đích của câu hỏi ban đầu, xin lưu ý rằng nếu cố gắng lấy "URL đẩy" và nhiều URL được nhập cho từ xa được chỉ định, bạn sẽ cần phải sử dụng git remote show origin(tùy chọn với cờ -n được cung cấp bởi @ Casey), hoặc với git remote -vđề xuất của @Montaro và @rodel.
Tuyệt vời

Tập tin này được viết cho cái gì? Tôi nghĩ rằng .gitconfigtập tin sẽ có nó, nhưng tôi đã không nhìn thấy nó trong tôi.
ayjay

1
@ayjay ´~/.gitconfiglà toàn cầu cho tất cả các gitkho lưu trữ, điều này ở đây xuất phát từ cấu hình cục bộ thường có .git/config(tuy nhiên đối với các mô đun con git, câu trả lời khó hơn một chút). Lưu ý đó strace git config --get remote.origin.urllà bạn của bạn.
Tino

1
Nhưng URL ban đầu không phải là URL của điều khiển từ xa hiện đang được sử dụng. Để hiển thị URL được sử dụng thực tế, bạn sẽ cần giải pháp này sau đó: stackoverflow.com/a/40630957/1069083
rubo77

620

Nếu bạn muốn điều này cho các mục đích kịch bản, bạn chỉ có thể nhận được URL với

git config --get remote.origin.url

38
Đây là câu trả lời chính xác. Đó là cách nhanh hơn và thậm chí nó hoạt động, nếu url từ xa không còn nữa ( git remote show originchỉ hiển thị "conq: repository không tồn tại.").
apfelbox

5
Đây không phải là câu trả lời đúng vì tùy chọn cấu hình url.<base>.insteadOf. Xem câu trả lời của tôi - git có một lệnh cho mục đích này.
Carl Suster

2
@arcresu Tuyệt vời, +1 cho bạn! Để bảo vệ tôi, lệnh đó đã không được thêm vào cho đến tháng 3 năm 2011 và nó không được ghi nhận cho đến tháng 9 năm 2012.
Cascabel

1
@Catskul Chỉ --git-dir có liên quan (cấu hình nằm trong git dir, độc lập với vị trí cây công việc) và nó hoạt động với tôi. Bạn có chắc chắn đã chỉ định đường dẫn đến thư mục .git thực tế, không phải thư mục mẹ của nó không?
Cascabel

553

Bạn co thể thử:

git remote -v

Nó sẽ in tất cả các URL tìm nạp / đẩy từ xa của bạn.


255

Để có câu trả lời:

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

Điều này tốt hơn là đọc cấu hình; tham khảo trang người đàn ông chogit-ls-remote :

--get-url

Mở rộng URL của kho lưu trữ từ xa đã cho có tính đến bất kỳ "url.<base>.insteadOf"cài đặt cấu hình nào (Xem git-config(1)) và thoát mà không cần nói chuyện với điều khiển từ xa.

Như @Jefromi đã chỉ ra, tùy chọn này đã được thêm vào v1.7.5 và không được ghi lại cho đến v1.7.12.2 (2012-09).


2
tốt: điều này cũng sẽ cung cấp tương tự cho các phiên bản trước> git remote -v | grep fetch | awk '{print $ 2}'
ravi.zombie

1
Tôi nghĩ rằng hầu hết các câu trả lời khác là nhiều hơn một câu chuyện hiển thị về các lệnh git và giải thích về lịch sử git. Đây là câu trả lời duy nhất không cho rằng ngược dòng của bạn được gọi origin.
Mike D

Đây là sự thay thế trực tiếp nhất cho remote get-urltùy chọn cũ . Đó là một sự thay thế thả trong.
Klaatu von Schlacker

111

Với Git 2.7 (phát hành ngày 5 tháng 1 năm 2015), bạn có một giải pháp mạch lạc hơn bằng cách sử dụng git remote:

git remote get-url origin

(mặt dây chuyền đẹp của git remote set-url origin <newurl>)

Xem cam kết 96f78d3 (16 tháng 9 năm 2015) của Ben Boeckel ( mathstuf) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết e437cbd , ngày 05 tháng 10 năm 2015) :

từ xa: thêm tiểu ban get-url

Mở rộng insteadOflà một phần của ls-remote --urlvà không có cách nào để mở rộng pushInsteadOfcả.
Thêm một get-urltiểu ban để có thể truy vấn cả hai cũng như một cách để có được tất cả các URL được định cấu hình.

get-url:

Lấy các URL cho một điều khiển từ xa.
Cấu hình cho insteadOfpushInsteadOfđược mở rộng ở đây.
Theo mặc định, chỉ có URL đầu tiên được liệt kê.

  • Với ' --push', các URL đẩy được truy vấn thay vì tìm nạp URL.
  • Với ' --all', tất cả các URL cho điều khiển từ xa sẽ được liệt kê.

Trước git 2.7, bạn đã có:

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

4
Sau 5 năm rất nhiều thay đổi và đây sẽ là câu trả lời được chấp nhận ngay bây giờ. Nhưng có thể thêm cú pháp trước 2.7 là tốt.
msp

58

Tóm lại, có ít nhất bốn cách:

(Sau đây đã được thử cho kho Linux chính thức)

Thông tin ít nhất:

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

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

Thêm thông tin:

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

Thậm chí nhiều thông tin:

$ 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
Lưu ý git config --get remote.origin.urltruy xuất URL ban đầu được đặt cùng git remote add ...hoặc git remote set-url ...trong khi git ls-remote --get-url origintruy xuất URL thực sự được sử dụng để truy cập từ xa - có thể khác với sự hiện diện của git config --global url.XXX.insteadOf YYY. Vì vậy, cả hai đầu ra có thể khác nhau! Cũng lưu ý rằng git ls-remote --get-url(không có origin) không truy xuất không cần thiết origin, thay vào đó, nó hiển thị ngược dòng được theo dõi, do đó, nó sẽ thất bại trong trạng thái CHÍNH tách rời.
Tino

24

Tôi nghĩ bạn có thể tìm thấy nó bên dưới .git/configremote["origin"]nếu bạn không thao túng điều đó.


22

Câu trả lời ngắn:

$ git remote show -n origin

hoặc, một thay thế cho các tập lệnh nhanh thuần túy:

$ git config --get remote.origin.url

Một số thông tin:

  1. $ git remote -vsẽ in tất cả các điều khiển từ xa (không phải những gì bạn muốn). Bạn muốn nguồn gốc phải không?
  2. $ git remote show origintốt hơn nhiều, chỉ hiển thị originnhưng mất quá nhiều thời gian (đã thử nghiệm trên phiên bản git 1.8.1.msysgit.1).

Tôi đã kết thúc với : $ git remote show -n origin, dường như là nhanh nhất. Với -nnó sẽ không lấy các đầu từ xa (các nhánh AKA). Bạn không cần loại thông tin đó, phải không?

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

Bạn có thể áp dụng | grep -i fetchcho cả ba phiên bản để chỉ hiển thị URL tìm nạp.

Nếu bạn yêu cầu tốc độ thuần túy, thì hãy sử dụng:

$ git config --get remote.origin.url

Cảm ơn @Jefromi đã chỉ ra điều đó.


22

Đối với tôi, đây là cách dễ dàng hơn (ít gõ):

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

Trên thực tế, tôi đã tham gia vào một cuộc aliasgọi sđó:

git remote -v
git status

Bạn có thể thêm vào hồ sơ của bạn với: alias s='git remote -v && git status'


17

Tôi không bao giờ có thể nhớ tất cả các tham số cho các lệnh Git, vì vậy tôi chỉ cần đặt bí danh trong ~/.gitconfigtệp có ý nghĩa hơn với tôi, vì vậy tôi có thể nhớ nó và kết quả là ít gõ hơn:

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

Sau khi tải lại thiết bị đầu cuối, bạn có thể chỉ cần gõ:

> git url

Dưới đây là một vài trong số những người thường xuyên sử dụng của tôi:

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

Tôi cũng rất khuyến khích git-bổ sunggit info lệnh cung cấp thông tin chi tiết hơn nhiều về các chi nhánh từ xa và cục bộ.


Tôi thích nó rất nhiều!
Alfie

15

URL Git sẽ nằm trong tệp cấu hình Git. Giá trị tương ứng với khóa url.

Đối với Mac và Linux, sử dụng các lệnh bên dưới:

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

Đối với Windows, mở tệp dưới đây trong bất kỳ trình soạn thảo văn bản nào và tìm giá trị cho khóa url.

project_dir/.git/config

Lưu ý: Điều này sẽ hoạt động ngay cả khi bạn ngoại tuyến hoặc máy chủ git từ xa đã bị gỡ xuống.


1
Đây là những gì làm việc cho tôi khi máy chủ từ xa lưu trữ kiểm tra ban đầu đã bị gỡ xuống. Tất cả các nỗ lực khác đều thất bại : git remote get-url origin >> fatal: No such remote 'origin',git config --get remote.origin.url >>
jxramos

14

Tôi về cơ bản sử dụng:

git remote get-url origin

Nó hoạt động cho bảng điều khiển lệnh Git Bash hoặc bảng điều khiển lệnh CMD trong Windows. Điều đó nói rằng, nó hoạt động với phiên bản 2.x của Git.


12
git config --list

Lệnh này sẽ cung cấp cho tất cả các thông tin liên quan đến kho lưu trữ của bạn.


10

Điều khiển từ xa ngược dòng có thể không được gọi là "nguồn gốc", vì vậy đây là một biến thể:

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

Hoặc là:

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

Đối với các biến hữu ích hơn có:

$ git config -l

9

Để lấy địa chỉ IP / tên máy chủ của origin

Đối với ssh://kho lưu trữ:

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

Đối với git://kho lưu trữ:

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

4
Đối với sshđiều này chỉ hoạt động trong trường hợp không ~/.ssh/configviết lại tên máy chủ hoặc bí danh.
Tino

9

Để bổ sung cho các câu trả lời khác: Nếu điều khiển từ xa vì một số lý do đã bị thay đổi và do đó không phản ánh nguồn gốc ban đầu , mục nhập đầu tiên trong reflog (tức là mục cuối cùng được hiển thị bởi lệnh git reflog) sẽ chỉ ra nơi repo ban đầu được sao chép từ.

ví dụ

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

(Hãy nhớ rằng việc từ chối có thể bị thanh trừng, vì vậy điều này không được đảm bảo để hoạt động.)


1
Đây có lẽ là cách thực sự duy nhất để có được điều khiển từ xa "gốc" nếu nó đã được thay đổi.
Justin Ohms

8

Với git remote show originbạn phải có trong thư mục dự án. Nhưng nếu bạn muốn xác định URL từ bất kỳ nơi nào khác bạn có thể sử dụng:

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

Nếu bạn cần lệnh này thường xuyên, bạn có thể xác định bí danh trong .bashrchoặc .bash_profilevới MacOS.

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

Vì vậy, bạn chỉ cần gọi giturltrong thư mục gốc Git để có được URL của nó.


Nếu bạn mở rộng bí danh như thế này

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

bạn chỉ nhận được URL đơn giản mà không có trước

"url ="

trong

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

bạn có nhiều khả năng hơn trong việc sử dụng nó:

Thí dụ

Trên Mac, bạn có thể gọi open $(giturl)để mở URL trong trình duyệt tiêu chuẩn.

Hoặc chrome $(giturl)để mở bằng trình duyệt Chrome trên Linux.


8

Một cách đơn giản là mở .git/configtệp:

cat .git/config

Chỉnh sửa:

vim .git/config hoặc là

nano .git/config


1
Điều này giả sử bạn đang dùng Linux (?).
Peter Mortensen

7

In các URL tìm nạp từ xa được đặt tên tùy ý:

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

6

Nếu bạn không biết tên của điều khiển từ xa ngược dòng cho một nhánh, bạn có thể tìm nó trước bằng cách kiểm tra tên nhánh ngược dòng mà nhánh hiện tại được tạo. Sử dụng git rev-parsenhư thế này:

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

Điều này cho thấy nhánh ngược dòng là nguồn cho nhánh hiện tại. Điều này có thể được phân tích cú pháp để có được tên từ xa như thế này:

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

Bây giờ hãy lấy nó và dẫn nó đến git ls-remotevà bạn sẽ nhận được URL của điều khiển từ xa ngược dòng là nguồn của nhánh hiện tại:

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

Bây giờ cần lưu ý rằng điều này không nhất thiết giống như kho lưu trữ từ xa nguồn được sao chép từ đó. Trong nhiều trường hợp tuy nhiên nó sẽ là đủ.


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

Sử dụng:

# 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

Đầu ra:

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

5

Tôi thích cái này vì nó dễ nhớ hơn:

git config -l

Nó sẽ liệt kê tất cả các thông tin hữu ích như:

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

dễ dàng chỉ cần sử dụng lệnh này nơi bạn đặt thư mục .git

git config --get remote.origin.url

nếu bạn được kết nối với mạng

git remote show origin

nó sẽ hiển thị cho bạn URL mà kho lưu trữ Git cục bộ ban đầu được sao chép từ đó.

hy vọng điều này giúp đỡ

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.