Вот мой текущий крючок в голом репо, который находится на сервере компании:
git push origin master
Эти хуки подталкивают к Assembla. Мне нужно нажимать только одну ветку (в идеале - главную), когда кто-то отправляет изменения в эту ветку на нашем сервере, и игнорировать отправку в другие ветки. Можно ли выбрать ветку из чистого репо и отправить только эту ветку в Assembla?
git
repository
hook
git-bare
Хорхе Губерте
источник
источник
git push origin master
будет только отправлятьmaster
ветку наorigin
удаленный компьютер, который, как я полагаю, определен как Assembla. Вы говорите, что вам нужно активировать крючок только тогда, когда кто-то толкаетmaster
, а неfeature1
что-то в этом роде?Ответы:
Ловушка post-receive получает свои аргументы из stdin в форме
<oldrev> <newrev> <refname>
. Поскольку эти аргументы поступают из стандартного ввода, а не из аргумента командной строки, вам нужно использоватьread
вместо$1 $2 $3
.Хук post-receive может получать сразу несколько веток (например, если кто-то делает
git push --all
), поэтому нам также нужно обернуть егоread
вwhile
цикл.Рабочий фрагмент выглядит примерно так:
источник
#!/bin/sh
вместо#!/bin/bash
?refs/heads/master
вместоrefs/tags/master
вас, все будет в порядке. Хотя могут быть и другие крайние случаи, о которых я не могу думать. Это может быть хороший вопрос по StackOverflow сам по себе.if branch=$(git rev-parse --symbolic --abbrev-ref $refname 2>/dev/null); then
чтобы git не жаловался, когда я удаляю ветку.Последний параметр, который ловушка post-receive получает на stdin, - это то, что ref было изменено, поэтому мы можем использовать это, чтобы проверить, было ли это значение «refs / Heads / master». Немного рубина, похожего на то, что я использую в хуке после получения:
Обратите внимание, что он получает строку для каждой отправленной ссылки, поэтому, если вы нажали больше, чем просто master, она все равно будет работать.
источник
Ответ Стефана не сработал для меня, но это сработало :
источник
Ни одно из вышеперечисленных решений не помогло мне. После долгой отладки выясняется, что использование команды 'read' не работает - вместо этого обычный способ анализа аргументов командной строки работает нормально.
Вот точный хук после обновления, который я только что успешно протестировал на CentOS 6.3.
ОБНОВЛЕНИЕ: на еще более странной ноте, хук pre-receive принимает ввод через stdin, поэтому читается с 'read' (вау, никогда не думал, что я скажу это). Хук после обновления по-прежнему работает для меня с 1 долларом.
источник
post-receive
крючков, а не дляpost-update
крючков. Они принимают свой вклад по-разному.post-receive
принимает stdin, как указано здесь: git-scm.com/book/en/v2/Customizing-Git-Git-HooksОтвет от @pauljz отлично работает для некоторых хуков git
pre-push
, ноpre-commit
не имеет доступа к этим переменнымoldrev newrev refname
Итак, я создал эту альтернативную версию, которая работает для предварительной фиксации, или на самом деле и для перехвата. Это
pre-commit
ловушка, которая запускаетhusky
скрипт, если мы НЕ наmaster
ветке.Надеюсь, это кому-то поможет. Вы можете легко изменить для ваших потребностей, ничего между
if
иfi
отчетности.источник
Я написал для себя PHP-скрипт, чтобы реализовать эту функцию.
https://github.com/fotuzlab/githubdump-php
Разместите этот файл на своем сервере, предпочтительно в корне репозитория, и определите URL-адрес в github webhooks. Замените allcommit в строке 8 именем своей ветки и добавьте свой код / функцию в строку 18.
например
источник
Простой подход в
git hook
письменной формеПросто - больше информации об этой замечательной системе перехвата ссылок
источник