Дізнавшись назву оригінального сховища, з якого ви клонувались у 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набагато більше інформації про саме цей пульт.
Каскабель

1
Схоже, ці два методи у відповіді є рівнозначними - здається, git remote -vпросто читає і пише .git/config.
flow2k

103
git config --get remote.origin.url

2
Домовились; це найкраще, тому що він не вимагає підключення / автентифікації до віддаленого сервера git. ОП запитували "з використанням вашого локального сховища", але 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 host, як github чи gitlab.

Це працює для мене:

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

Він використовує sedдля заміни результату git configкоманди просто назвою організації та репо.

Щось подібне github/scientistбуло б відповідати класу символів [[:graph:]]у звичайному виразі.

\1Розповідає СЕД , щоб замінити всі з тільки що збіглися символів.


помилка в кінці каже .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
поясніть, що ви зробили, як відповісти
Махер

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

0

Це допоможе отримати значення.

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

0

Версія команди Powershell для назви git repo:

(git config --get remote.origin.url) -replace '.*/' -replace '.git'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.