как git post-receive hook может получить имя репо, на котором он работает? - PullRequest
24 голосов
/ 07 апреля 2011

У меня есть ловушка для git post, которая запускает сборку в моей системе сборки.Мне нужно создать строку вида "$ repo-name + $ branch" в скрипте ловушек.

Я могу разобрать ветку, но как я могу получить имя хранилища из git?

Спасибо!

Ответы [ 4 ]

38 голосов
/ 07 апреля 2011

Я думаю, что «имя хранилища» не является четко определенной идеей в git.Возможно, что было бы наиболее полезным, это вернуть whatever.git в случае пустого хранилища или whatever в случае хранилища с рабочим деревом.Я проверил, что этот бит оболочки Bourne правильно обрабатывает оба случая из хука post-receive:

if [ $(git rev-parse --is-bare-repository) = true ]
then
    REPOSITORY_BASENAME=$(basename "$PWD") 
else
    REPOSITORY_BASENAME=$(basename $(readlink -nf "$PWD"/..))
fi
echo REPOSITORY_BASENAME is $REPOSITORY_BASENAME

Обновление: , если вы хотите удалить расширение .gitв случае с пустым хранилищем вы можете добавить строку в первый, чтобы удалить ее:

    REPOSITORY_BASENAME=$(basename "$PWD")
    REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git}
1 голос
/ 07 апреля 2011

Вы можете проверить $ GIT_DIR или $ GIT_WORK_TREE и получить оттуда имя репо.

0 голосов
/ 21 марта 2017

Если используется Gitolite , переменная GL_REPO доступна в среде post-receive по умолчанию.

0 голосов
/ 07 апреля 2011

Вы можете сделать git rev-parse --show-toplevel, который даст вам путь к каталогу верхнего уровня и извлечь из него имя (reponame.git является обычным для удаленно доступных репозиториев).

$PWD может также иметь ту же информацию, но я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...