Как получить доступ к файлу репозитория с помощью GIT в обработчике post-receive - PullRequest
3 голосов
/ 20 ноября 2011

У меня есть такой сценарий с GIT:

Я хочу «сделать что-то» с конкретным файлом, когда он изменяется в толчке.Например, файл .sql должен быть выгружен в БД, если он изменился.

Я использую ловушку 'post-receive' в GIT с таким выражением:

DUMP=$(git diff-tree --name-only -r -z master dump.sql);

if [ -n "$DUMP" ]; then
  // using the new dump.sql
fi

Какя могу получить доступ к новому dump.sql, только что сдвинутому с крючка?

1 Ответ

7 голосов
/ 20 ноября 2011

Вы можете извлечь файл dump.sql из ревизии $ rev, используя:

git cat-file blob $rev:dump.sql

Хук post-receive также вызывается для других вещей, помимо нажатия master ... надеюсь, у вас есть проверка где-то, что выобрабатываешь обновленный мастер реф.В качестве стиля я бы использовал значение новой ревизии, передаваемое хуку, вместо того, чтобы ссылаться на мастера непосредственно из хука.

Обычно я пишу хук после получения, например:

while read oldrev newrev refname; do
    if [ "$refname" = "refs/heads/master" ]; then
        # definitely updating master; $oldrev and $newrev encompass the changes
        if git diff-tree --name-only -r -z $oldrev $newrev dump.sql; then
            # dump.sql changed...
        fi
    fi
done

Важно, что это также справляется с одним нажатием, посылая несколько коммитов мастеру за один раз - команда, показанная в вопросе, смотрела только на последний коммит на мастере.

...