git post-receive перехватчик в php

Я хочу иметь возможность выполнять php-перехватчик на post-receive перехватчике, чтобы копировать файлы из репозитория git в веб-папку на том же сервере и запускать только в том случае, если он был отправлен, был сделан в основной ветке, игнорируя другие ветки. Ниже то, что у меня есть на данный момент.

!/usr/bin/php
<?php

exec("git archive master | tar -x -C /var/www/", $output);

?>

В принципе, я не уверен, как получить доступ к аргументам git с помощью php.


person madphp    schedule 24.01.2012    source источник
comment
+1, потому что git потрясающий, и мне не хочется вдаваться в подробности. надеюсь, кто-то другой позаботится об этом быстро, и мы все сможем стать умнее :)   -  person rdlowrey    schedule 24.01.2012
comment
а) возьмите библиотеку git по своему выбору б) изучите немного bash   -  person Reactormonk    schedule 24.01.2012
comment
В порядке. Я бы хотел использовать php, если вам все равно.   -  person madphp    schedule 24.01.2012
comment
Бит, в котором я не уверен, - это доступ к аргументу, поэтому я могу игнорировать все ветки, кроме мастера.   -  person madphp    schedule 24.01.2012
comment
Посмотрите параметры, переданные ловушке на странице руководства или где-нибудь еще, используйте $ argv [] для доступа к ним.   -  person Timothy Meade    schedule 24.01.2012


Ответы (1)


Не забывайте, что ловушка после получения не принимает аргументов: она считывает данные на стандартный ввод.

Сценарий «post-receive» запускается после того, как receive-pack принял пакет и репозиторий был обновлен. Аргументы передаются через стандартный ввод в форме:

<oldrev> <newrev> <refname>

Поэтому вам нужно будет прочитать указанные аргументы, чтобы извлечь ветку (пример находится в bash, но вы можете его адаптировать)

person VonC    schedule 24.01.2012
comment
При чтении из stdin из php-скрипта: stackoverflow.com/questions/554760/php-standard-input или stackoverflow.com/questions/2390604/, если php://stdin - неподходящий поток для чтения. - person VonC; 24.01.2012