Я пытаюсь настроить что-то подобное, где только hudson фиксирует, поскольку он объединит удаленную ветвь, которую вы фиксируете, с master, а затем вставит их в наш git.сборка ... о, счастливый день.
сценарий предварительного получения (на стороне сервера - не помещать локально) ....
#!/bin/sh
# <oldrev> <newrev> <refname>
# update a blame tree
while read oldrev newrev ref
do
echo "STARTING [$oldrev $newrev $ref]"
if [ $ref == "refs/heads/master" ] && [ $USER != "hudson" ]
then
echo "YOU CANNOT COMMIT STUFF TO MASTER BRANCH"
echo "TO CORRECT THIS run"
echo "git branch -c <branch name> then run"
echo "git push <reponame> <branch name>"
echo "and hudson will take and push to master IF it passes the tests"
exit 1;
else
echo "This is hudson, allowing commit to master"
fi
done
и затем, конечно, я ненавижу опроспоэтому после получения я делаю что-то вроде этого (учтите, что пользователь hudson не может запустить команду curl или вы попадаете в бесконечный цикл, поскольку он продолжает посылать изменения, вносимые в основную ветвь) ...Сценарий получения (на стороне сервера - не размещать локально)
echo "User=$USER"
if [ "hudson" != $USER ]
then
echo "Notifying hudson to build NOW"
curl http://10.222.0.168:8080/job/stserver1/build?delay=0sec
echo "Done notifying"
else
echo "This is hudson, not triggering build now"
fi
ПРИМЕЧАНИЕ: Я пока не нашел способ для разработчика вернуть свой коммит мастеру :(. все еще работаю над этим.