Определение имени исходного репозитория, из которого вы клонировали в 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-адрес удаленного репозитория. "Исходный" удаленный репозиторий обычно соответствует исходному репозиторию, из которого была клонирована локальная копия.

allait
источник
16
Вы также можете использовать, git remote show originчтобы увидеть больше информации только об этом пульте.
Cascabel
1
Похоже, эти два метода в ответе эквивалентны - кажется, git remote -vпросто читает и записывает .git/config.
flow2k
103
git config --get remote.origin.url
Straff
источник
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опция делает команду намного быстрее.

Casey
источник
11

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

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

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

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

adzenith
источник
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 сообщает, что нужно заменить все только совпадающими символами.

jhnstn
источник
опечатка в конце говорит .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'
haolun
источник
1
объясните, что вы сделали, как ответить
Maher
Возможно, добавьте дополнительную информацию, например, о зависимости Ruby и на какой платформе она тестировалась (включая информацию о версии).
Питер Мортенсен
0

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

#!/usr/bin/env bash
repoSlug="$(git config --get remote.origin.url | cut -d/ -f5 | cut -d. -f1)"
echo ${repoSlug}
joehep
источник
0

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

(git config --get remote.origin.url) -replace '.*/' -replace '.git'
Виктор
источник