Как определить URL-адрес, из которого был первоначально клонирован локальный репозиторий Git?
Я вытащил проект из GitHub несколько дней назад. С тех пор я обнаружил, что на GitHub есть несколько вилок, и я забыл отметить, какой из них я взял изначально. Как я могу определить, какую из вилок я вытащил?
19 ответов
если вы хотите только удаленный URL, или ссылочная целостность была нарушена:
git config --get remote.origin.url
Если вам требуется полный вывод или ссылочная целостность не повреждена:
git remote show origin
при использовании git clone
(из GitHub или любого исходного репозитория) имя по умолчанию для источника клона - "origin". Используя 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:
если вы хотите использовать значение в сценарий, вы бы использовали первую команду, указанную в этом ответе.
Если вы хотите это для сценариев, вы можете получить только URL с
git config --get remote.origin.url
получить ответ:
git ls-remote --get-url [REMOTE]
это лучше, чем Чтение конфигурации; см. man-страницы git-ls-remote
:
--get-url
разверните URL данного удаленного репозитория с учетом любой
"url.<base>.insteadOf"
config параметр (см.git-config(1)
) и выйдите, не разговаривая с пультом.
как указал @Jefromi, эта опция была добавлена в В1.7.5 и не документально пока В1.7.12.2 (2012-09).
С Git 2.7 (выпуск 5 января 2015 года) у вас есть более согласованное решение с использованием git remote
:
git remote get-url origin
(Ницца кулон git remote set-url origin <newurl>
)
посмотреть совершить 96f78d3 (16 Sep 2015) by Бен Boeckel (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
', Push URLs запрашиваются скорее чем fetch URLs.- С
--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 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
он не будет получать удаленные головки (АКА филиал.) Тебе не нужна такая информация, верно?
http://www.kernel.org/pub//software/scm/git/docs/git-remote.html
вы можете подать заявку | grep -i fetch
для всех трех версий, чтобы показать только URL выборки.
Если вам нужна чистая скорость, используйте:
$ git config --get remote.origin.url
спасибо @Jefromi за указание на это.
пульт вверх по течению не может называться "origin", поэтому вот вариант:
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
получить 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 ":"
URL Git будет находиться внутри файла конфигурации Git. Значение соответствует ключу url
:
cd project_dir
cat .git/config | grep url | awk '{print }'
чтобы дополнить другие ответы: если пульт по какой-то причине был изменен и поэтому не отражает оригинал происхождения, самая первая запись в reflog (т. е. последняя запись отображается с помощью команды git reflog
) должно указывать, откуда было первоначально клонировано РЕПО.
например
$ git reflog | tail -n 1
f34be46 HEAD@{0}: clone: from https://github.com/git/git
$
(имейте в виду, что reflog могут быть очищены, так что это не гарантирует работу.)
Я никогда не могу вспомнить все параметры команд Git, поэтому я просто поместил псевдоним в ~/.gitconfig
файл, который имеет больше смысла для меня, поэтому я могу его запомнить, и это приводит к меньшему набору текста:
[alias]
url = ls-remote --get-url
после перезагрузки терминала вы можете просто ввести:
> git url
вот еще несколько моих часто используемых:
[alias]
cd = checkout
ls = branch
lsr = branch --remote
lst = describe --tags
печать произвольно именованных удаленных URL-адресов выборки:
git remote -v | grep fetch | awk '{print }'
С 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="
на
вы получаете больше возможностей в его использовании:
пример
на Mac вы можете позвонить open $(giturl)
чтобы открыть URL-адрес в стандартном браузере.
или chrome $(giturl)
чтобы открыть его с помощью браузера Chrome на Linux.
Я в основном использовать:
git remote get-url origin
он работает для командной консоли Git Bash или командной консоли CMD в Windows. Тем не менее, он работает с версией 2.х ЖКТ.
если вы не знаете имя восходящего пульта ДУ для ветви, вы можете сначала посмотреть это, проверив имя восходящей ветви, на которой была построена текущая ветвь. Использовать 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)
следует отметить, что это не обязательно то же самое как удаленный репозиторий, который был клонирован. Однако во многих случаях этого будет достаточно.#!/bin/bash
git-remote-url() {
local rmt=; 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