У меня есть проект с использованием подмодуля, который мне нужно синхронизировать между двумя серверами, каждый из которых имеет полный набор репозиториев. Самое простое решение, конечно же, состоит в том, чтобы каждый разработчик добавлял оба пульта в каждый репо и всегда нажимал на оба. Но неизбежно это подвержено ошибкам, и они забывают удалить ветви, и кто знает, какие другие ошибки сделаны.Синхронизация двух размещенных репозиториев git
Разветвления не нужно синхронизировать сразу, поэтому я думал о том, чтобы использовать какое-то задание cron для извлечения из одного и нажатия на другое (все разработки сделаны одно, второе - в настоящее время используется почти как резервная копия).
Я думал об использовании что-то вроде:
for b in `git branch -r | grep <get only one remote's branches>`
do
git update-ref refs/heads/$b origin/$b
done
git push --all origin2
в git submodule foreach
, но я не уверен, что это лучший способ сделать это.
я не нашел простой способ, чтобы убедиться, что удаленные филиалы в origin
также удаляются в origin2
(для этой цели, любая отрасль, которая не присутствует в origin
можно считать, были удалены).
Это также немного осложняется случаем того, что произойдет, если/когда кто-то добавит новый подмодуль в ветвь суперпроекта, но эти случаи достаточно редки, что я могу обрабатывать их вручную, я полагаю.
Я признаю, что я не совсем понимаю разницу в голом репозитории и клоне; Я подозреваю, что голое репо может мне помочь как-то здесь, но если я буду клонировать суперпроект в качестве голого репо, я не вижу, как самим получать подмодули (хотя, возможно, это связано с абзацем выше, не находясь на ветке, есть никакого значения для подмодулей).
Может ли разумнее просто зеркально отражать каждое репо индивидуально, не пытаясь сделать это, используя подмодуль foreach?
Любые предложения?
Это удалит локальную ветвь, когда удаленный удаляется, но не удалит удаление на удаленный компьютер. Как я могу сказать, во время push, «сделать удаленный взгляд в точности похожим на локальный», а не просто «обновлять удаленные ветви, соответствующие локальным ветвям». – Mikeage
Кроме того, я не понял ваш комментарий о тяге вместо толчка. Я не могу ничего запускать на втором сервере (или вы имели в виду что-то еще?) – Mikeage
@Mikeage Я имел в виду «git pull» с локально. В сочетании с 'fetch.prune', удаление ветки локально будет удалено на удаленном компьютере, когда другой разработчик (на втором сервере) выполнит свою собственную« git pull ». Короче, тянуть, не толкать. – VonC