it-roy-ru.com

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

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

3175
Tim

Если вам нужен только удаленный 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: [email protected]:jaredpar/VsVim.git
  Push  URL: [email protected]:jaredpar/VsVim.git
  HEAD branch: master
  Remote branches:

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

4535
JaredPar

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

git config --get remote.Origin.url
540
Cascabel

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

git remote -v

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

463
Montaro

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

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).

216
Carl Suster

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

git remote get-url Origin

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

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

remote: добавить подкоманду 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]
80
VonC

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

(Следующее было опробовано для официального репозитория 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)
48
太極者無極而生

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

$ git remote show -n Origin

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

$ git config --get remote.Origin.url

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

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

19
Casey

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

16
meder omuraliev

URL Git будет внутри конфигурационного файла Git. Значение соответствует ключу url:

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

Примечание: это будет работать, даже если вы находитесь в автономном режиме или удаленный сервер git был отключен.

8
Harikrishnan

Пульт дистанционного управления не может называться «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
8
cagney

Я никогда не могу вспомнить все параметры команд Git, поэтому я просто помещаю псевдоним в файл ~/.gitconfig, который имеет для меня больше смысла, поэтому я могу его запомнить, и это приводит к меньшему количеству ввода:

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

После перезагрузки терминала вы можете просто набрать:

> git url

Вот еще несколько моих часто используемых:

[alias]
cd = checkout
ls = branch
lsr = branch --remote
lst = describe --tags
8
What Would Be Cool

Чтобы получить 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 ":"
7
Stephen

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

git remote get-url Origin

Он работает для командной консоли Git Bash или командной консоли CMD в Windows. Тем не менее, он работает с версией 2.x Git.

7
maytham-ɯɐɥʇʎɐɯ

С 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.

6
Sedat Kilinc

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

например.

$ git reflog | tail -n 1
f34be46 [email protected]{0}: clone: from https://github.com/git/git
$

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

6
Jeremy

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

cat .git/config

Правка:

vim .git/config или

nano .git/config

6
Omar Makled

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

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

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

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

4
Christopher
#!/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" == [email protected]* ]] \
 && { 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 [email protected]:your-username/your-repository.git
cd your-repository

git-remote-url Origin

Результат:

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

Для меня это более простой способ (меньше печатать):

$ 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'

1
Code Knox
git config --list

Эта команда выдаст всю информацию, связанную с вашим хранилищем.

0
Kasthuri Shravankumar