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

Как протестировать крючки git

Поскольку "тестирование" является общим для крюка Git, мой вопрос трудно найти.

Я пишу довольно привлекательный Git пост-приемный крючок и хочу знать, что лучший способ проверить его. В настоящее время мой процесс:

  • внести изменения в post-receive в манекене "remote" repo
  • внести изменения в фиктивное локальное репо
  • зафиксировать изменение в фиктивном локальном репо
  • нажмите кнопку "Изменить" на "манекен" удаленного репо.

Есть ли более простой способ проверить это? В идеале это выглядело бы так:

  • внести изменения в пост-прием в фиктивном репо
  • выдать команду "magic" для тестирования post-receive

Возможно, я смогу "переиздать" предыдущий push или выполнить операцию удаленного репо, как если бы он получил только push с определенным хешем?

4b9b3361

Ответ 1

Напишите крючок, который просто записывает свои аргументы/среду и дампы в файл. Затем вы можете просто повторно использовать реальный крюк на досуге с той же средой/аргументами, и он будет действовать так, как если бы вы просто перепечатали тот же самый толчок.

Ответ 2

Отвечайте на этот четырехлетний вопрос.

Если вы хотите проверить привязку в локальной среде, я даю подробные команды для выполнения, используйте post-receive как образец:

$ mkdir /tmp/hook_test
$ cd /tmp/hook_test

# set local git repo, where you put hooks in it.
$ git clone --bare https://github.com/git/git.git

# set develop environment which is cloned from the new created repo. 
$ git clone git.git repo 

# copy and rename the hook you need test to "post-receive"
$ cd git.git/hooks
$ cp ~/post-receive-test post-receive

# suppose the hook script is bash script.
# edit "post-receive" and add "set -x" to second line in it to active debug

$ cd /tmp/hook_test/repo
# emulate a hook trigger, do some changes, "git add" and "git commit" it 

$ git push

# Now you should see the script "post-receive" runs automatically with debug details.

Вы должны иметь возможность запускать git push, чтобы обновления переносились только на локальное репо /tmp/hook_test/git.git

Ответ 3

Мой подход заключается в том, чтобы набрать HEAD на удаленном репо обратно на один фиксатор, а затем снова нажать:

ssh <repo> 'cd /<repo_path>; git update-ref refs/heads/master HEAD^' && git push origin master