Як я можу визначити URL-адресу, з якої було спочатку клоновано локальне сховище Git?


4093

Я зняв проект із GitHub кілька днів тому. З того часу я виявив, що на GitHub є кілька вил, і я нехтував зазначити, який з них я взяв спочатку. Як я можу визначити, яку з тих вилок я витягнув?


162
З 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може бути дуже багатослівною) qv git help remote.
NeilG

Відповіді:


5755

Якщо ви хочете лише віддалену URL-адресу або якщо ви не підключені до мережі, яка може дістатися до віддаленого репо, виконайте вказані нижче дії.

git config --get remote.origin.url

Якщо вам потрібен повний вихід і ви знаходитесь у мережі, яка може дістатися до віддаленого репо, де знаходиться джерело:

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, наданим @ Кейсі) або з git remote -vпропозиціями @Montaro та @rodel.
Дивовижний

У який файл написано це? Я думав, що .gitconfigфайл матиме його, але я його не бачив у своєму.
ayjay

1
@ayjay ´~/.gitconfigє глобальним для всіх gitсховищ, це походить від локальної конфігурації, яка зазвичай є .git/config(однак для git-підмодулів відповідь трохи складніше). Зауважте, strace git config --get remote.origin.urlце ваш друг.
Тіно

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: сховище не існує.").
apfelbox

5
Це не зовсім правильна відповідь через параметр config url.<base>.insteadOf. Дивіться мою відповідь - git має для цього команду.
Карл Сустер

2
@arcresu Класно, +1 тобі! На мій захист, ця команда була додана до березня 2011 року, і вона була задокументована до вересня 2012 року.
Cascabel

1
@Catskul Тільки --git-dir є релевантним (конфігурація знаходиться в git dir, незалежно від місця розташування робочого дерева), і це працює для мене. Ви впевнені, що вказали шлях до фактичного .git dir, а не його батьківського каталогу?
Каскабель

553

Ви можете спробувати:

git remote -v

Він надрукує всі ваші віддалені URL-адреси для отримання / натискання.


255

Щоб отримати відповідь:

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

Це краще, ніж читання конфігурації; перегляньте сторінку чоловіка для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.
Майк D

Це найбільш пряма заміна старого remote get-urlваріанту. Це заміна, що випадає.
Клаату фон

111

З Git 2.7 (випуск 5 січня 2015 року) у вас є більш узгоджене рішення, використовуючи git remote:

git remote get-url origin

(приємний кулон git remote set-url origin <newurl>)

Див. Комітет 96f78d3 (16 вересня 2015 р.) Від Бена Бокеля ( mathstuf) .
(Об’єднав Хуніо С Хамано - gitster- у комісії e437cbd , 05 жовтня 2015 р.) :

віддалений: додайте підкоманду get-url

Розширення insteadOfє частиною, ls-remote --urlі немає можливості також розширитись pushInsteadOf.
Додайте get-urlпідкоманду, щоб мати можливість запитувати як і спосіб отримати всі налаштовані URL-адреси.

get-url:

Вилучає URL-адреси для віддаленого.
Тут конфігурації insteadOfта pushInsteadOfрозширення.
За замовчуванням вказана лише перша URL-адреса.

  • З " --push" push-URL-адресами є запит, а не отримання URL-адрес.
  • З ' --all' буде вказано всі URL-адреси для віддаленого пристрою.

До git 2.7 у вас було:

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

4
Через 5 років багато що змінилося, і це має бути прийнятою відповіддю зараз. Але, можливо, також додамо синтаксис pre-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, замість цього він показує відслідковується вгору за течією, тому не вдасться, наприклад, у відірваному стані HEAD.
Тіно

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, тому я просто помістив псевдонім у ~/.gitconfigфайл, який має для мене більше сенсу, так що я можу його запам'ятати, і це призводить до меншого набору тексту:

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

Після перезавантаження терміналу ви можете просто ввести:

> git url

Ось ще кілька моїх часто використовуваних:

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

Я також дуже рекомендую git-extras, який має git info команду, яка надає набагато більш детальну інформацію про віддалені та локальні відділення.


Мені це дуже подобається!
Альфі

15

URL-адреса Git знаходитиметься всередині файлу конфігурації 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

Пульт дистанційного управління не може називатися "початком", тому ось варіант:

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той факт, у відсутності якого переписується ім'я хоста чи псевдонім.
Тіно

9

Для доповнення інших відповідей: Якщо пульт дистанційного управління чомусь змінено і не відображає початкове походження, найперший запис у рефлогу (тобто останній запис, показаний командою git reflog) повинен вказувати, де репо було спочатку клоновано з.

напр

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

(Майте на увазі, що рефлог може бути очищений, тому це не гарантовано спрацює.)


1
Це, мабуть, єдиний реальний спосіб отримати «оригінальний» пульт, якщо він був змінений.
Джастін Омс

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.



7

Друкуйте довільно названі віддалені URL-адреси отримання:

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

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

вона покаже вам URL-адресу, з якої було створено локальне сховище Git.

сподіваюся, що ця допомога

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.