Как вы получаете имя хранилища Git в каком-то хранилище Git?
Когда вы работаете в каком-то каталоге Git, как вы можете получить имя хранилища Git в каком-то хранилище Git? Есть ли какие-нибудь команды Git?
# I did check out bar repository and working in somewhere
# under bar directory at this moment such as below.
$ git clone git://github.com/foo/bar.git
$ cd bar/baz/qux/quux/corge/grault # and I am working in here!
$ git xxx # <- ???
bar
Ответы
Ответ 1
Хорошо, если для имени хранилища вы имеете в виду имя корневого каталога Git (которое содержит каталог .git), вы можете запустить это:
basename 'git rev-parse --show-toplevel'
Часть git rev-parse --show-toplevel
дает вам путь к этому каталогу, а basename
удаляет первую часть пути.
Ответ 2
В общем, вы не можете этого сделать. Git не волнует, как назван ваш репозиторий Git. Например, вы можете переименовать каталог, содержащий ваш репозиторий (один с подкаталогом .git
), а Git даже не заметит его - все будет работать.
Однако, если вы клонировали его, вы можете использовать команду:
git remote show origin
чтобы отобразить много информации об исходном удалении, с которого вы клонировали ваш репозиторий, и он будет содержать исходный URL-адрес клона.
Если, однако, вы удалили ссылку на оригинальный пульт с помощью git remote rm origin
, или если вы создали этот репозиторий с помощью git init
, такую информацию просто невозможно получить - она нигде не существует.
Ответ 3
Нет необходимости связываться с хранилищем, чтобы получить имя, и имя папки не обязательно будет отражать удаленное имя.
Я нашел, что это самый точный и эффективный способ получить имя текущего хранилища:
basename -s .git 'git config --get remote.origin.url'
Это должно работать с Git 1.8.1.5. До этого теперь устаревшая команда git-repo-config
работала (уже в Git 1.7.5).
Ответ 4
Другие ответы по-прежнему не будут работать, если имя вашего каталога не соответствует имени удаленного репозитория (и оно может).
Вы можете получить реальное имя репозитория с чем-то вроде этого:
git remote show origin -n | grep "Fetch URL:" | sed -E "s#^.*/(.*)$#\1#" | sed "s#.git$##"
В принципе, вы вызываете git remote show origin
, берете URL-адрес репозитория из поля "Fetch URL:" и повторно выражаете его, чтобы получить часть с именем:
https://github.com/dragn/ neat-vimrc.git
Ответ 5
В git v2.7. 0+ подкоманда get-url
была введена в команду git-remote
.
POSIX оболочка:
basename $(git remote get-url origin)
PowerShell:
Split-Path -Leaf (git remote get-url origin)
Ответ 6
Я думаю, что это лучший способ однозначно идентифицировать клон репозитория.
git config --get remote.origin.url
и проверка, чтобы убедиться, что источник соответствует ssh://your/repo
.
Ответ 7
Немного опоздал на этот вопрос, но если вы:
cat /path/to/repo/.git/config
Вы увидите URL репозитория, который будет включать в себя переименование:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://github.com/your_git_user_name/your_git_repo_name.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
Ответ 8
К сожалению, похоже, что в Git такой встроенной команды нет. Но вы можете легко добавить ее самостоятельно с помощью псевдонимов Git и некоторой магии оболочки.
Как указано в этом ответе, вы можете использовать git rev-parse --show-toplevel
чтобы показать корень вашей текущей папки Git.
Если вы хотите использовать это регулярно, возможно, удобнее определить его как псевдоним. Для этого используется git config alias.root '!echo "$(git rev-parse --show-toplevel)"'
. После этого вы можете использовать git root
чтобы увидеть корневую папку репозитория, в котором вы сейчас находитесь.
Если вы хотите использовать другое имя подкоманды, alias.root
от root
, просто замените вторую часть alias.root
в приведенной выше команде на то, что вы хотите.
Подробнее о псевдонимах в Git см. Также git config
страницу git config
.
Ответ 9
Если вам нужно полное имя репозитория GitHub ("полное имя") - пользователь/репозиторий, и вы хотите сделать это с Ruby...
git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*:(.*).git/.match($_)[1] rescue nil'
Ответ 10
Здесь функция bash, которая будет печатать имя репозитория (если оно было правильно настроено):
__get_reponame ()
{
local gitdir=$(git rev-parse --git-dir)
if [ $(cat ${gitdir}/description) != "Unnamed repository; edit this file 'description' to name the repository." ]; then
cat ${gitdir}/description
else
echo "Unnamed repository!"
fi
}
Пояснение:
local gitdir=$(git rev-parse --git-dir)
Выполняется git rev-parse --git-dir
, который печатает полный путь к каталогу .git
репозитория currrent. Он сохраняет путь в $gitdir
.
if [ $(cat ${gitdir}/description) != "..." ]; then
Выполняет cat ${gitdir}/description
, который печатает содержимое .git/description
вашего текущего репозитория. Если вы правильно назвали свой репозиторий, он напечатает имя. В противном случае он напечатает Unnamed repository; edit this file 'description' to name the repository.
cat ${gitdir}/description
Если репо было правильно названо, распечатайте его.
else
В противном случае...
echo "Unnamed repository!"
Сообщите пользователю, что репо было неназванным.
Что-то подобное реализовано в этот script.
Ответ 11
Этот подход с использованием git-remote
работал хорошо для меня для удаленных HTTPS-пультов:
$ git remote -v | grep "(fetch)" | sed 's/.*\/\([^ ]*\)\/.*/\1/'
| | | |
| | | +---------------+
| | | Extract capture |
| +--------------------+-----+
|Repository name capture|
+-----------------------+
Пример
Ответ 12
Здесь моя:
git remote --verbose | grep origin | grep fetch | cut -f2 | cut -d' ' -f1
не лучше остальных, но я сделал его функцией bash, поэтому я могу удалить удаленное имя, если оно не является источником.
grurl () {
xx_remote=$1
[ -z "$xx_remote" ] && xx_remote=origin
git remote --verbose | grep "$1" | grep fetch | cut -f2 | cut -d' ' -f1
unset xx_remote
}
Ответ 13
Также я просто нахожу, что в каталоге .git
есть некоторая информация о репо. Так что вы можете просто посмотреть файл FETCH_HEAD
в терминале, чтобы увидеть имя репо:
Пример:
cd your_project_folder/.git
more FETCH_HEAD
Выход:
672e38391557a192ab23a632d160ef37449c56ac https://bitbucket.org/fonjeekay/some_repo
И https://bitbucket.org/somebituser/some_repo.git
- это имя вашего хранилища.
Ответ 14
Полное имя репо:
git config --get remote.origin.url | grep -Po "(?<[email protected]\.com:)(.*?)(?=.git)"
Ответ 15
Вы можете использовать: git удаленный -v
Документация:
https://git-scm.com/docs/git-remote
Управление набором репозиториев ( "пультов" ), чьи ветки вы отслеживаете. -v --verbose Будьте немного более подробными и показывайте удаленный URL-адрес после имени. ПРИМЕЧАНИЕ. Это должно быть установлено между удаленным и подкомандой.