Использование скелета в Mercurial для нескольких похожих проектов - PullRequest
1 голос
/ 19 сентября 2011

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

Каков наилучший способ использовать эту настройку на новом клиенте?

Проблема, с которой я сейчас сталкиваюсь, заключается в следующем: - если я клонирую скелет, а затем добавляю что-то в скелет и отправляю его на сервер, скелет обновляется.

Если у меня есть репозиторий на проект для клиента, в котором я клонирую скелет, происходит то же самое: изменения в скелете переносятся в скелет.

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

Каковы ваши предложения?

1 Ответ

1 голос
/ 30 января 2012

Если я вас правильно понимаю, пропущенная информация состоит в том, что вы можете изменить путь push-сообщения по умолчанию после создания клона. Когда вы запускаете

$ hg clone http://hg.server/repos/skeleton client-a

, чтобы получить клон client-a из репо skeleton, затем Mercurial создает client-a/.hg/hgrc с

[paths]
default = http://hg.server/repos/skeleton

Так что hg push теперь будет отправлять наборы изменений в этот репозиторий. Вместо этого вы должны создать новый клон на сервере:

$ hg clone skeleton client-a

и затем сделайте клон этого на своей машине:

$ hg clone http://hg.server/repos/client-a

Изменения в коде скелета больше не будут автоматически распространяться на репо skeleton на сервере.

Важным недостатком этого является то, что все ваши клиентские репозитории будут «совместимы». Это означает, что вы можете сделать это случайно:

$ cd client-a
$ hg pull http://hg.server/repos/client-b

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

$ unzip skeleton.zip
$ rm skeleton.zip
$ hg add
$ hg commit -m "Initialized repository for client-a"

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

...