Какая хорошая модель использования Mercurial для этой настройки?

У нас есть два разработчика в одной закрытой (тьфу, глупые gov) сети, еще один разработчик пару минут проезжает по дороге, а четвертый разработчик на полпути по всей стране. E-Mail, ftp и средства удаления - все возможные способы передачи для людей, не входящих в одну сеть.

Я один из двух закрытых сетевых разработчиков, считаю нас "хозяином".

Какая лучшая настройка/шаблон Mercurial для группы? Каков наилучший способ перевести изменения в/от удаленных разработчиков? Поскольку я отвечаю за это, я решил, что мне придется держать по крайней мере одно основное репо с другим местным репо, в котором я могу развиваться. Каждому другому человеку нужно просто клонировать мастера. Это правильно? Думаю, это также заставляет меня отвечать за слияние?

Как вы можете видеть, я все еще пытаюсь обернуть голову вокруг распределенного контроля версий. Я не думаю, что есть другие способы сделать это с ситуацией подключения.

Ответ 1

Пользователи вне сети могут сделать патчи и/или использовать email, чтобы отправлять обновления основному репо или кому-то, например, самому себе, чтобы объединить их. Другие внутренние люди могут иметь локальные копии, например, вы сами и сливаются, - но если у вас есть эти сетевые патчи, может быть, лучше, чтобы один человек имел дело с ними, поэтому никто не путается, но что-то, что вам нужно считайте себя.

Синхронизируя другим способом, вы должны создать патч, и они отправят электронную почту или получат флеш-диск для удаленных разработчиков, чтобы исправить их систему. Вам понадобится хорошее общение в команде, я благодарен, что я не в ваших силах.

Это мои единственные предложения - ну, очевидно, получите им VPN-соединение! Мне бы хотелось услышать, как это происходит, какие планы стабилизируются в еженедельный паз и т.д.

Ответ 2

Патчи - это простое и универсальное решение.

Для перемещения больших групп изменений (особенно двоичных изменений и слияний) Mercurial предлагает бинарные пакеты. Пакет в основном представляет собой двоичный файл, который отправляется в сети, когда вы выполняете hg push, но здесь он записывается в файл.

Предположим, что я каким-то образом получил клон (флеш-накопителем, DVD и т.д.). Назовите его upstream. Затем я делаю второй клон, назовите его devel. Я делаю все свое развитие в devel и делаю много коммитов, слияний и т.д. Поскольку Mercurial распространяется, я могу делать все это в автономном режиме.

Чтобы узнать, какие изменения отсутствуют в upstream, я делаю

% hg outgoing ../upstream

Когда мне есть что отправить, я могу использовать

% hg bundle changes.hg ../upstream

чтобы получить двоичный сжатый файл, содержащий набор изменений, включая все их метаданные. Затем я могу записать этот файл на компакт-диск и отправить его по почте...

Получатель пакета может выполнять

% hg incoming changes.hg

чтобы увидеть список изменений и

% hg pull changes.hg

чтобы распаковать и добавить изменения в свой репозиторий. Тогда ему, скорее всего, придется объединиться - это точно так, как если бы он вытащил прямо из вашего репозитория через HTTP или SSH.

Примечание. Репозиторий upstream используется только как удобный способ запомнить, какие изменения уже найдены в восходящем репозитории. Вы также можете просто записать идентификатор набора изменений и использовать hg bundle --base при наборе, чтобы указать базовый (общий) набор изменений. См. hg help bundle или посмотреть в вики.

Ответ 3

Правильно. Единственный способ сделать это на закрытой сети - с помощью флеш-накопителя.