Как подключить тэг git на пульте дистанционного управления?

Есть ли способ подключиться, когда на пульте дистанционного управления происходит трюк git (аналогично предварительному или пост-приему). В основном я бы хотел, чтобы удаленный сервер мог совершить все, что имеет место, когда есть pull.

В моей ситуации все, что живет на пульте дистанционного управления, является авторитетным источником, который может быть изменен без фиксации git. Я хочу убедиться, что когда я потяну, я всегда могу получить последнюю информацию о том, что есть вживую.

Ответ 1

Во-первых, чтобы ответить на ваш реальный вопрос: на удаленной стороне нет крючков, когда кто-то выбирает. (Когда кто-то тянет, все пульт знает, что они извлекли из него - он не знает, побежали ли они git pull, git fetch, git remote update...)

Что касается вашей реальной ситуации: я согласен с Магнусом в том, что было бы лучше просто совершать коммиты после внесения изменений или, если это не так, иметь какую-то периодическую задачу (cronjob?), которая проверяет изменения и совершает, если это находит любой. Если вам не нравится какой-либо из этих вариантов, вы остаетесь с оптимизацией вещей, чтобы вам было легко и быстро инициировать фиксацию в удаленном репозитории непосредственно перед тем, как вытащить.

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

Ответ 2

К сожалению, git не создает для этого крючки, поскольку это идеальный случай использования, чтобы что-то проверить, прежде чем разрешить pull/fetch.

Я не знаю, находится ли ваш 'remote' на локальной машине, но если это не так, посмотрите на gitolite, у которого есть крючки, которые предназначены именно для этого:

Из v2 gitolite docs:

"gl-pre- git" hook

Хотя git имеет много хороших крючков, к которым вы можете подключиться, все они запускаются только на толчок. Там ничего не работает на выборке или клоне, и нет возможности запустить что-то до git -receive-pack или git -upload-pack (в зависимости от случая) вызывается.

Для чего нужен hook-pre- git. Если исполняемый крючок называется gl-pre-git, он будет вызываться с текущим каталогом set to repo.git и с одним аргументом, который будет либо R, либо W в зависимости от того, что клиент пытается сделать.

Для гитолита v3 здесь документы о триггерах. Документация немного загадочна, но вот как это работает:

  • в ~/.gitolite.rc add (в глобальном масштабе):

    PRE_GIT => [ '<pre_git_trigger_script_name>' ]

  • в том же файле посмотрите на строку, позволяющую установить LOCAL_CODE и установить ее там, где вам нравится

  • В каталоге, который вы установили для LOCAL_CODE, создайте подкаталог под названием "триггеры" и создайте script с именем <pre_git_trigger_script_name> с тем, что вы хотите сделать в этот момент... (убедитесь, что выполните следующие действия: chmod +x <pre_git_trigger_script_name>

  • run gitolite setup

  • test && иметь хороший день

update. На самом деле, используя gitolite, я думаю, что у вас может быть триггер pre- git сделать что-то вроде нажатия на неиспользуемую ветку, а затем подключиться к предварительному получению в вашем не-голом репозитории отклонить нажатие, но сделать git add --all . && git commit -m"autocommit" && push gitolite в этом процессе. Это удобно, если вы не хотите разрешать пользователям привилегий хостинга gitolite запускать команды непосредственно в вашем не-голом репозитории.

Ответ 3

У меня нет прямого опыта с git hooks, а эта страница может помочь, но это не похоже на то, что вы собираюсь это сделать.

Более простым (и лучшим решением IMO) было бы использование репо, отличного от производственной среды, в качестве авторитетного источника. Ты можешь сделать это? Производственная среда очень редко используется в качестве авторитетного источника, потому что последние и самые стабильные две разные вещи...

FYI, я только когда-либо выполняю git pull или git статус в рабочей среде. Любые изменения производятся на моем локальном репо, тестируются, совершаются, помещаются в github, а затем приводятся в производственную среду.

UPDATE
Я должен отметить, что одна из сильных сторон и функций git заключается в том, что это система управления распределенными источниками. Таким образом, на самом деле нет такого понятия, как авторитетный источник.

Ответ 4

Я думаю, что вы не можете сделать это с помощью крючков, потому что я понимаю, что чтение документа hooks не содержит никакого крючка, который бы соответствовал вашим требованиям.

Если мне нужно что-то вроде того, что вы хотите, я бы создал script в 'remote', который запускается каждый час и проверяет, был ли какой-либо файл изменен (git status) и совершить все (git commit -a -m "Автоматическое совершение" ).

Ответ 5

Это не то, что я когда-либо делал раньше, но вы можете запускать скрипты bash изнутри php:

http://www.devx.com/opensource/Article/40785
http://us2.php.net/function.exec

Что должно позволить вам совершать и нажимать набор изменений через PHP script. Чак интерфейс над ним или интегрировать его в ваш текущий процесс редактирования, и вы должны хорошо идти.

Ответ 6

Кто/что редактирует этот файл? Если это что-то меняется, когда кто-то что-то меняет на сайте, это должно быть вызвано чем-то, что означает, что вы можете автоматизировать это. Когда это произойдет, и файл будет сохранен, вы должны запустить коммит. Конец должен быть выполнен когда-то, и он может быть в то время.