Я вытащил проект из GitHub несколько дней назад. С тех пор я обнаружил, что на GitHub есть несколько вилок, и я забыл отметить, какой из них я взял первоначально. Как я могу определить, какую из этих вилок я вытащил?
Если ссылочная целостность была нарушена:
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, вы должны использовать первую команду, указанную в этом ответе.
git remote show origin
(опционально с -n флаг предоставляется @Casey) или с помощью git remote -v
как предложено @Montaro и @rodel.
Если вы хотите использовать это для сценариев, вы можете получить только URL-адрес с
git config --get remote.origin.url
git remote show origin
просто показывает «conq: repository not Существует.»).
url.<base>.insteadOf
. Смотрите мой ответ - у git есть команда для этой цели.
Вы можете попробовать:
git remote -v
Он выведет все ваши URL-адреса для извлечения/выключения ваших пультов.
Чтобы получить ответ:
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.
origin
.
С 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]
Подводя итог, существует как минимум четыре способа:
(Для официального репозитория 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)
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.
Короткий ответ:
$ 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 для указания этого.
Я думаю, вы можете найти его под .git/config
и remote["origin"]
, если вы не манипулируете этим.
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 ":"
ssh
это работает только при отсутствии ~/.ssh/config
который переписывает имя хоста или псевдоним.
простой способ открыть файл .git/config
cat .git/config
для редактирования
vim .git/config
или
nano .git/config
с 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 ="
в
у вас больше возможностей в использовании:
Пример
На Mac вы можете вызвать open $(giturl)
, чтобы открыть URL-адрес в стандартном браузере.
Или chrome $(giturl)
, чтобы открыть его с помощью браузера Chrome в Linux.
В дополнение к другим ответам: если пульт по какой-то причине был изменен и поэтому не отражает исходное происхождение, самая первая запись в рефлоге (т.е. последняя запись, отображаемая командой git reflog
), должна указывать где первоначально было клонировано репо.
например.
$ git reflog | tail -n 1
f34be46 HEAD@{0}: clone: from https://github.com/git/git
$
(Имейте в виду, что reflog может быть очищен, поэтому это не гарантируется.)
Пульт дистанционного управления не может быть назван "источником", поэтому здесь есть вариант:
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
Распечатайте произвольно названные URL удаленной выборки:
git remote -v | grep fetch | awk '{print $2}'
URL git будет находиться внутри файла конфигурации git. Значение curespnds для ключа url
cd project_dir
cat .git/config | grep url | awk '{print $3}'
git remote get-url origin >> fatal: No such remote 'origin'
, git config --get remote.origin.url >>
Если вы не знаете имя удаленного пула для ветки, вы можете посмотреть это сначала, проверив имя ветки восходящего потока, на которой была построена текущая ветка. Используйте 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)
Теперь следует отметить, что это не обязательно то же самое, что и исходный удаленный репозиторий, который был клонирован. Во многих случаях этого будет достаточно.
В основном я использую:
git remote get-url origin
Он работает для командной консоли git bash или командной консоли cmd в Windows. Он сказал, что работает с версией 2.x Git.
git remote get-url origin
. Смотрите мой ответ ниже