Определение имени исходного репозитория, из которого вы клонировали в Git


118

Когда вы делаете свой первый клон, используя синтаксис

git clone username@server:gitRepo.git

Можно ли с помощью локального репозитория найти имя этого исходного клона?

(Так что в приведенном выше примере найдите gitRepo.git.)


Ответы:


91

В корне репозитория .git/configфайл содержит всю информацию об удаленных репозиториях и ветках. В вашем примере вы должны искать что-то вроде:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = server:gitRepo.git

Кроме того, команда Git git remote -vпоказывает имя и URL-адрес удаленного репозитория. "Исходный" удаленный репозиторий обычно соответствует исходному репозиторию, из которого была клонирована локальная копия.


16
Вы также можете использовать, git remote show originчтобы увидеть больше информации только об этом пульте.
Cascabel

1
Похоже, эти два метода в ответе эквивалентны - кажется, git remote -vпросто читает и записывает .git/config.
flow2k

103
git config --get remote.origin.url

2
Согласовано; это лучше всего, потому что не требует подключения / авторизации к удаленному серверу git. OP попросил «использовать ваш локальный репозиторий», но обратился git remote show originк сети.
Трэвис Уилсон,

1
Это завернутый в базовое имя, поскольку ответ Кейси работает хорошо
Джонатан Драпо

29

Это быстрая команда Bash, которую вы, вероятно, ищете, будет печатать только базовое имя удаленного репозитория:

Где вы запрашиваете из :

basename $(git remote show -n origin | grep Fetch | cut -d: -f2-)

В качестве альтернативы , когда вы нажимаете на :

basename $(git remote show -n origin | grep Push | cut -d: -f2-)

Особенно эта -nопция делает команду намного быстрее.


11

Я использую это:

basename $(git remote get-url origin) .git

Что возвращает что-то вроде gitRepo. (Удалите .gitв конце команды, чтобы вернуть что-то вродеgitRepo.git .)

(Примечание: требуется Git версии 2.7.0 или новее)


2

Я наткнулся на этот вопрос, пытаясь понять organization/repo строку с хоста git, такого как github или gitlab.

Это работает для меня:

git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'

Он используется sedдля замены вывода git configкоманды только на название организации и репо.

Что-то вроде github/scientistэтого соответствовало бы классу символов [[:graph:]]в регулярном выражении.

Команда \1sed сообщает, что нужно заменить все только совпадающими символами.


опечатка в конце говорит .get вместо .git ---- git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'
MSillence

Спасибо @MSillence, исправлено.
jhnstn

0
git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'

Он был протестирован с тремя разными стилями URL:

echo "Fetch URL: http://user@pass:gitservice.org:20080/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: Fetch URL: git@github.com:home1-oss/oss-build.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: https://github.com/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'

1
объясните, что вы сделали, как ответить
Maher

Возможно, добавьте дополнительную информацию, например, о зависимости Ruby и на какой платформе она тестировалась (включая информацию о версии).
Питер Мортенсен

0

Это сработает, чтобы получить значение.

#!/usr/bin/env bash
repoSlug="$(git config --get remote.origin.url | cut -d/ -f5 | cut -d. -f1)"
echo ${repoSlug}

0

Версия команды Powershell для имени репозитория git:

(git config --get remote.origin.url) -replace '.*/' -replace '.git'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.