Как я могу определить URL, с которого изначально был клонирован локальный репозиторий Git?

2301

Я вытащил проект из GitHub несколько дней назад. С тех пор я обнаружил, что на GitHub есть несколько вилок, и я забыл отметить, какой из них я взял первоначально. Как я могу определить, какую из этих вилок я вытащил?

  • 105
    В git 2.7 (четвертый квартал 2015 года) возможно git remote get-url origin . Смотрите мой ответ ниже
  • 3
    codingaffairs.blogspot.com/2017/01/...
Показать ещё 2 комментария
Теги:
github
git-remote

17 ответов

3252
Лучший ответ

Если ссылочная целостность была нарушена:

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: [email protected]:jaredpar/VsVim.git
  Push  URL: [email protected]:jaredpar/VsVim.git
  HEAD branch: master
  Remote branches:

Если вы хотите использовать значение в script, вы должны использовать первую команду, указанную в этом ответе.

  • 2
    Вместо этого используйте git config, как описано ниже, если используете jgit с amazon-s3.
  • 3
    Хотя это и не относится к цели исходного вопроса, имейте в виду, что если вы пытаетесь получить «Push URL» и вводить несколько URL для указанного удаленного, вам нужно будет либо использовать git remote show origin (опционально с -n флаг предоставляется @Casey) или с помощью git remote -v как предложено @Montaro и @rodel.
Показать ещё 10 комментариев
431

Если вы хотите использовать это для сценариев, вы можете получить только URL-адрес с

git config --get remote.origin.url
  • 32
    Это правильный ответ. Это намного быстрее и даже работает, если удаленный URL больше не доступен ( git remote show origin просто показывает «conq: repository not Существует.»).
  • 2
    Это не совсем правильный ответ из-за параметра конфигурации url.<base>.insteadOf . Смотрите мой ответ - у git есть команда для этой цели.
Показать ещё 4 комментария
371

Вы можете попробовать:

git remote -v

Он выведет все ваши URL-адреса для извлечения/выключения ваших пультов.

187

Чтобы получить ответ:

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

Это лучше, чем чтение конфигурации; обратитесь к странице руководства для git-ls-remote:

- получить-URL

Разверните URL-адрес данного удаленного репозитория с учетом любая настройка конфигурации "url.<base>.insteadOf" (см. git-config(1)) и выход без разговора с пультом дистанционного управления.

Как отметил @Jefromi, этот параметр был добавлен в v1.7.5 и не документирован до v1.7.12. 2.

  • 2
    хороший: это также обеспечило бы то же самое для предыдущих версий> git remote -v | grep fetch | awk '{print $ 2}'
  • 0
    Я думаю, что большинство других ответов - это скорее шоу-и-рассказ о командах git и описание истории git. Это единственный ответ, который не предполагает, что ваш апстрим называется origin .
Показать ещё 1 комментарий
51

С Git 2.7 (выпуск 5 января 2015 г.) у вас есть более последовательное решение с использованием git remote:

git remote get-url origin

(хороший кулон git remote set-url origin <newurl>)

См. commit 96f78d3 (16 сентября 2015 г.) Бен Беккель (mathstuf).
(слияние Junio ​​C Hamano - gitster - в совершить e437cbd, 05 октября 2015)

remote: добавить подкоманду get-url

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

get-url:

Получает URL-адреса для удаленного устройства.
Конфигурации для insteadOf и pushInsteadOf здесь расширены. По умолчанию указан только первый URL.

  • С '--push' запрашиваются URL-адреса push, а не URL-адреса.
  • С "--all" будут указаны все URL-адреса для пульта.

До Git 2.7 у вас было:

 git config --get remote.[REMOTE].url
 git ls-remote --get-url [REMOTE]
 git remote show [REMOTE]
  • 3
    Через 5 лет многое изменилось, и теперь это должен быть принятый ответ. Но, возможно, также добавьте синтаксис pre-2.7.
36

Подводя итог, существует как минимум четыре способа:

(Для официального репозитория 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.
16

Короткий ответ:

$ git remote show -n origin

или, альтернатива для чистых быстрых скриптов:

$ git config --get remote.origin.url

Некоторая информация:

  • $ git remote -v будет печатать все пульты (не то, что вы хотите). Вы хотите право происхождения?
  • $ 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 для указания этого.

9

Я думаю, вы можете найти его под .git/config и remote["origin"], если вы не манипулируете этим.

6

Чтобы получить 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 ":"
  • 3
    Для ssh это работает только при отсутствии ~/.ssh/config который переписывает имя хоста или псевдоним.
5

простой способ открыть файл .git/config

cat .git/config

для редактирования

vim .git/config или

nano .git/config

  • 0
    Это предполагает, что вы работаете в Linux (?).
5

с git начало удаленного шоу вы должны быть в каталоге проектов. Но если вы хотите определить URL-адреса из другого места вы можете использовать

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

Если вам понадобится эта команда часто, вы можете определить псевдоним в .bashrc или .bash_profile с помощью MacOS.

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

Поэтому вам просто нужно вызвать giturl в корневую папку git, чтобы получить просто его URL.


EDIT:

Если вы расширите этот псевдоним следующим образом

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.

5

В дополнение к другим ответам: если пульт по какой-то причине был изменен и поэтому не отражает исходное происхождение, самая первая запись в рефлоге (т.е. последняя запись, отображаемая командой git reflog), должна указывать где первоначально было клонировано репо.

например.

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

(Имейте в виду, что reflog может быть очищен, поэтому это не гарантируется.)

  • 1
    Это, вероятно, единственный реальный способ получить «оригинальный» пульт, если он был изменен.
5

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

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
5

Распечатайте произвольно названные URL удаленной выборки:

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

URL git будет находиться внутри файла конфигурации git. Значение curespnds для ключа url

 cd project_dir
 cat .git/config | grep url | awk '{print $3}'
  • 1
    Это то, что сработало для меня после того, как удаленный сервер, на котором размещалась исходная проверка, был отключен. Все остальные попытки потерпели неудачу: git remote get-url origin >> fatal: No such remote 'origin' , git config --get remote.origin.url >>
1

Если вы не знаете имя удаленного пула для ветки, вы можете посмотреть это сначала, проверив имя ветки восходящего потока, на которой была построена текущая ветка. Используйте 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)

Теперь следует отметить, что это не обязательно то же самое, что и исходный удаленный репозиторий, который был клонирован. Во многих случаях этого будет достаточно.

0

В основном я использую:

git remote get-url origin

Он работает для командной консоли git bash или командной консоли cmd в Windows. Он сказал, что работает с версией 2.x Git.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню