Как вам имя репозитория 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
632   12  

12 ответов:

Ну, если для имени репозитория вы имеете в виду имя корневого каталога Git (тот, который содержит .каталог ЖКТ) можно выполнить следующим образом:

basename `git rev-parse --show-toplevel`

The git rev-parse --show-toplevel часть дает вам путь к этому каталогу и basename удаляет первую часть пути.

В общем, вы не можете сделать это. Git не заботится о том, как называется ваш репозиторий git. Например, вы можете переименовать каталог, содержащий ваш репозиторий (один с .git подкаталог), а git даже не заметит этого - все будет продолжать работать.

однако, если вы клонировали его, вы можете использовать команду:

git remote show origin

чтобы отобразить много информации об исходном удаленном устройстве, из которого вы клонировали свой репозиторий, и он будет содержать исходный клон URL-АДРЕС.

Если, однако, вы удалили ссылку на оригинальный пульт с помощью git remote rm origin, или если вы создали этот репозиторий, используя git init, такую информацию просто невозможно получить - ее нигде нет.

нет необходимости связываться с репозиторием, чтобы получить имя, и имя папки не обязательно будет отражать удаленное имя.

я обнаружил, что это самый точный и эффективный способ, чтобы получить текущее имя репозитория:

basename -s .git `git config --get remote.origin.url`

Это должно работать с Git 1.8.1.5. До этого, теперь устарели git-repo-config команда работала бы (уже в Git 1.7.5).

другие ответы по-прежнему не будут работать, когда имя вашего каталога не соответствует имени удаленного репозитория (и это может быть). Вы можете получить реальные имя репозитория с чем-то вроде этого:

git remote show origin -n | grep "Fetch URL:" | sed -E "s#^.*/(.*)$##" | sed "s#.git$##"

в основном, вы звоните git remote show origin, возьмите URL репозитория из поля" Fetch URL: "и регулярное выражение его, чтобы получить часть с именем: https://github.com/dragn/neat-vimrc. git

Я думаю, что это лучший способ, чтобы однозначно идентифицировать клон репозитория.

git config --get remote.origin.url и проверка, чтобы убедиться, что происхождение соответствует ssh://your/repo.

вот функция 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!"

сообщите пользователю, что РЕПО было безымянным.


нечто подобное реализовано в этот скрипт.

к сожалению, кажется, что у Git нет такой встроенной команды. Но вы можете легко добавить его самостоятельно с помощью псевдонимов Git и некоторой магии оболочки.

как указал ответ, вы можете использовать git rev-parse --show-toplevel чтобы показать корень текущей папки Git.

если вы хотите использовать это регулярно, вероятно, удобнее определить его как псевдоним. Для этого используется git config alias.root '!echo "$(git rev-parse --show-toplevel)"'. После этого, вы можете использовать git root чтобы увидеть корневую папку репозитория, в котором вы находитесь в настоящее время.

если вы хотите использовать другое имя подкоманды, чем root, просто замените вторую часть alias.root в приведенной выше команде, что вы хотите.

для получения дополнительной информации о псевдонимах в Git см. также git config на странице.

Если вы хотите, чтобы все имя репозитория GitHub ('полное имя') - пользователь/репозиторий, и вы хотите сделать это с помощью Ruby...

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

на git v2.7. 0+, подкоманды get-url была представлена .

POSIX:

basename (git remote get-url origin)

PowerShell:

Split-Path -Leaf (git remote get-url origin)

этот подход с помощью git-remote хорошо работал для меня для HTTPS пультов:

$ git remote -v | grep "(fetch)" | sed 's/.*\/\([^ ]*\)\/.*//'
                                                |  |        | |
                                                |  |        | +---------------+
                                                |  |        | Extract capture |
                                                |  +--------------------+-----+
                                                |Repository name capture|
                                                +-----------------------+

пример

вот мой:

git remote --verbose | grep origin | grep fetch | cut -f2 | cut -d' ' -f1

не лучше, чем другие, но я сделал его функцией bash, чтобы я мог удалить удаленное имя, если это не origin.

grurl () {
  xx_remote=
  [ -z "$xx_remote" ] && xx_remote=origin
  git remote --verbose | grep "" | grep fetch | cut -f2 | cut -d' ' -f1
  unset xx_remote
}

вы можете использовать: git remote-v

документация: https://git-scm.com/docs/git-remote

управление набором репозиториев ("пультов"), ветви которых вы отслеживаете. -в -- подробный быть немного более подробным и показать удаленный url после имени. Примечание: это должно быть помещено между удаленным и подкомандой.

Comments

    Ничего не найдено.