У нас есть двухуровневая настройка.
У нас есть основной репозиторий (называемый ниже «основной»).
И вторичный репозиторий (называемый ниже «вторичный»), который был создан следующим образом:
$ git clone --bare --shared $REPO_A/primary secondary.git
Люди, работающие во вторичном хранилище, рассматривают ветви, которые исходили из первичного хранилища, только для чтения, но основывают свои собственные ветви на этих ветвях.
Мы хотим синхронизировать вторичный репозиторий с первичным репозиторием один раз в день.
т.е. мы хотим, чтобы коммиты и новые ветки, которые были перенесены на первичный сервер, стали видимыми для людей, работающих вне вторичного репозитория (в следующий раз, когда они выполнят извлечение).
Мы не хотим, чтобы это было симметричным, то есть работа с вторичным хранилищем не станет видимой для тех, кто работает с первичным хранилищем.
В идеале я хотел бы запустить задание cron, которое запускается на машине с пустым вторичным хранилищем, которое каким-то образом извлекает новые данные из первичного и автоматически включает его во вторичный.
Я надеялся, что может быть простой способ сделать это (и я надеюсь, что кто-то здесь скажет мне, что есть).
Если бы я написал скрипт для этого, он бы сделал:
Создайте свежий клон вторичного объекта.
$ git clone $REPO_B/secondary
$ cd secondary
Получить все его ветви.
$ git branch -r | sed 's?.*origin/??'
Получить все филиалы в первичном репо.
$ git ls-remote --heads $REPO_A/primary | sed 's?.*refs/heads/??'
Для каждой первичной ветви, для которой у меня еще нет соответствующей вторичной ветви:
$ git fetch $REPO_A/primary $BRANCHNAME:$BRANCHNAME
$ git push origin $BRANCHNAME:refs/heads/$BRANCHNAME
Для каждой первичной ветви, для которой у меня уже есть соответствующая вторичная ветвь:
$ git checkout -b $BRANCHNAME --track origin/$BRANCHNAME
$ git pull $REPO_A/primary $BRANCHNAME
$ git push
Поскольку я новичок в git, я не удивлюсь, если не рассмотрю некоторые фундаментальные проблемы?
И, как я уже сказал, я надеюсь, что есть более простой способ сделать это, то есть кто-то говорит: «О, не делай всего этого, просто делай ...».