Как определить 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 remote -v

он будет печатать URL-адреса выборки/push всех ваших пультов.


получить ответ:

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

информация:

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


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


пульт вверх по течению не может называться "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="

на

url=http://example.com/repo.git

вы получаете больше возможностей в его использовании:

пример

на Mac вы можете позвонить open $(giturl) чтобы открыть URL-адрес в стандартном браузере.

или chrome $(giturl) чтобы открыть его с помощью браузера Chrome на Linux.


простой способ-открыть :

cat .git/config

изменить:

vim .git/config или

nano .git/config


Я в основном использовать:

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