Как найти репозиторий, для которого работают git hooks - PullRequest
0 голосов
/ 28 июня 2018

У меня есть два хранилища A и B.

Я установил следующую конфигурацию git в репозитории A:

git config core.hooksPath <path to repository B>

Перехватчики git в репозитории B теперь запускаются, когда я выполняю команды git в репозитории A.

Из внутреннего репозитория B как мне получить путь к репозиторию A? Это связано с тем, что многие другие репозитории могут устанавливать эту конфигурацию git, и поэтому репозиторию B нужно будет знать, для какого репозитория он выполняет свои перехватчики.

Примечание: мои хуки написаны на python.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Git устанавливает переменную среды, GIT_DIR, которая содержит (обычно относительный!) Путь к хранилищу Git из текущего рабочего каталога. Будучи относительным, этот путь хорош только до тех пор, пока вы не измените каталоги, поэтому вы можете преобразовать его в абсолютный путь, в зависимости от того, что вы собираетесь делать в своем коде.

Git использует эту переменную среды, чтобы найти каталог репозитория Git. Если установлено значение GIT_WORK_TREE, это определяет местонахождение рабочего дерева, в противном случае это текущий каталог или хранилище пустое. Также могут быть установлены другие магические предметы Git, такие как GIT_INDEX_FILE. Лучше не менять каталоги, не убедившись, что каждый из них является абсолютным путем:

for name in ('GIT_INDEX_FILE', 'GIT_OBJECT_DIRECTORY', 'GIT_DIR', 'GIT_WORK_TREE'):
    val = os.environ.get(name, None)
    if val is not None and not os.path.isabs(val):
        os.environ[name] = os.path.abspath(val)
for pathspec in ('GIT_ALTERNATE_OBJECT_DIRECTORIES', 'GIT_CEILING_DIRECTORIES'):
    ...

(я оставляю код для двух последних как упражнение, тем более что один из них ; -ограничен в Windows, согласно документации ). Редактировать: Документ GIT_CEILING_DIRECTORIES задокументирован как уже абсолютный, поэтому только GIT_ALTERNATE_OBJECT_DIRECTORIES может потребоваться настройка. См. Описание на странице руководства о том, как обрабатывается каждое поле.

0 голосов
/ 28 июня 2018

https://git -scm.com / Docs / githooks

«Прежде чем Git вызывает ловушку, он меняет свой рабочий каталог на $ GIT_DIR в пустом хранилище или на корень рабочего дерева в не пустом хранилище. Исключением являются перехваты, запускаемые во время push (предварительное получение, обновление, post-receive, post-update, push-to-checkout), которые всегда выполняются в $ GIT_DIR. »

Т.е., вы можете проверить $GIT_DIR (os.environ['GIT_DIR'] в Python) или текущий каталог (pwd в оболочке, os.getcwd() в Python).

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