Ответ 1
Если вы ищете что-то надежное и простое в обслуживании, я бы посоветовал вам разработать решение для GitHub Webhooks. Да, вам потребуется развернуть HTTP-сервер, скажем, Node.js server, и для этого потребуется небольшая часть разработки ( ваши требования достаточно специфичны), но я думаю, что он окупится, если вам понадобится что-то надежное и малое обслуживание. Если вы решите, что этот подход к зеркалированию файлов по-прежнему остается правильным, рассмотрев подходы и усилия по настройке.
Пусть исходные репозитории (на GitHub) будут S1
, S2
... с (неперекрывающимися) файловыми наборами в зеркало F1
, F2
..., которые будут отправлены в целевую repo T
(также на GitHub), где соответствующие файлы считаются доступными только для чтения. Ваши требования необычны в том, что Sn
и T
звучат так, как будто они не клонированы друг от друга, у них может даже не быть общего коммита, и в этом случае это не сценарий push/fetch. Вы также не гарантировали, что исходные файлы-обновления происходят один-на-фиксацию или даже сгруппированы, но изолированы от нереплицирующих изменений, поэтому это не касается комков фиксации вишни.
Триггер для репликации нажимает определенные файлы на S1
, S2
..., а не на какой-либо клон-разработчик этих репозиториев, поэтому клики на стороне клиента не помогут (и они могут неудобно поддерживать). Разумеется, GitHub не позволяет использовать общие крючки, поэтому Webhooks - ваше лучшее решение. Вы можете рассмотреть другой, опросный клон, который регулярно вытягивается из S1
..., выполняя логику и затем фиксируя T, но это звучит неудобно по сравнению с Webhooks, что даст вам надежную доставку, возможность повторного воспроизведения, достойный аудит и др.
Потенциал роста заключается в том, что существует много уже построенной инфраструктуры для поддержки такого типа настройки, поэтому фактический код, который вам нужно написать, может быть довольно небольшим. Скажите, что вы используете установку типа Node.js
:
- Развернуть github-webhook-handler. Эта прохладная небольшая библиотека представляет собой предварительно построенный обработчик для GitHub Webhooks и обрабатывает проверку HMAC
X-Hub-Signature
и предоставляет простые крючки для прослушивания событий для всех событий Webhooks. У вас может быть одна конечная точка на S, или, возможно, легче включить их. - Имейте локальный файл (сохраните его в репозитории Git), который отображает
Sn
вFn
. - Зарегистрируйте обработчик для
X-GitHub-Event: push
и проверитеrepository/name
иcommits[]/modified[]
для путей, соответствующих вашей локальной карте. - Развернуть node-github, реализация GitHub APIv3 для Node.js.
- Для каждого файла соответствия:
- Вызвать getBlob для чтения копии
utf-8
илиbase64
файла из Sn. - Вызов createBlob для повторного создания этого файла в
T
. - Сделайте серию вызовов T на getReference (текущая фиксация), getTree, createTree (создайте новый из базы и нового блоба), createCommit и, наконец, updateReference. Этот один рабочий процесс - нижний столкновение - это разветвление/слияние.
- Вызвать getBlob для чтения копии
Этот подход позволяет вам делать все, не используя локальный клон T
. Вам может показаться, что лучше использовать локальный клон, я бы посмотрел, как легко начать с метода API.