У нас есть двухуровневая настройка.
У нас есть первичный репозиторий (называемый "primary" ниже).
И вторичный репозиторий (называемый ниже "вторичным" ), который был создан следующим образом:
$ git clone --bare --shared $REPO_A/primary secondary.git
Люди, работающие во вторичном репозитории, рассматривают ветки, созданные из первичного репозитория, только как прочитанные, но основывают свои ветки на этих ветвях.
Мы хотим синхронизировать вторичный репозиторий с основным хранилищем один раз в день.
т.е. мы хотим, чтобы коммиты и новые ветки были перенесены в первичный, чтобы они стали видимыми для людей, работающих вне вторичного репозитория (в следующий раз, когда они будут тянуть).
Мы не хотим, чтобы это было симметрично, т.е. активность против вторичного репозитория не станет видимой для тех, кто работает с основным репозиторием.
В идеале я хотел бы запустить задание cron, которое запускается на машине с открытым вторичным репозиторием, который каким-то образом извлекает новые данные из первичного и автоматически включает его во вторичный.
Я надеялся, что может быть простой способ сделать это (и я надеюсь, что кто-то здесь скажет мне, что есть).
Если бы я написал script, чтобы сделать это, это сделало бы:
-
Создайте новый клон вторичного.
$ 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, я не удивлюсь, если я не рассмотрю некоторые фундаментальные проблемы?
И, как я уже сказал, я надеюсь, что есть более простой способ сделать это, то есть кто-то идет "о, не делай этого, просто сделай...".