Подтвердить что ты не робот

Как вы получаете имя хранилища 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
4b9b3361

Ответ 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-адрес после имени. ПРИМЕЧАНИЕ. Это должно быть установлено между удаленным и подкомандой.