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