subrepos - Можно ли использовать субпозитории Mercurial для отправки нескольких проектов в репозиторий? - PullRequest
1 голос
/ 08 сентября 2011

У меня 3 проекта:

D:\Projects\ProjectA\src\packA
D:\Projects\ProjectB\src\packB
D:\Projects\ProjectC\src\packC

Я хочу сохранить 3 пакета этих 3 проектов в одном и том же удаленном хранилище.

Я пытался клонировать 3 пакета в клоне моего удаленного хранилища:

D:\mercurial\DistantRepo\packA
D:\mercurial\DistantRepo\packB
D:\mercurial\DistantRepo\packC

Затем я объявил эти 3 пакета в качестве подкаталогов в моем файле .hgsub:

packA = D:/Project/ProjectA/src/packA
packB = D:/Project/ProjectB/src/packB
packC = D:/Project/ProjectC/src/packC

Я вызвал команды hg add и hg commit.

Но когда я пытаюсь отправить файлы в мой удаленный репозиторий, файлы .hgsub и .hgsubstate отправляются в мой удаленный репозиторий, но в моих пакетах происходит следующее:

pushing to https://my.distant.repo
pushing subrepo packA to D:/Projects/ProjectA/src/packA
searching for changes
no changes found
pushing subrepo packB to D:/Projects/ProjectB/src/packB
searching for changes
no changes found
pushing subrepo packC to D:/Projects/ProjectC/src/packC
searching for changes
no changes found
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 2 changes to 2 files

Кажется, я неправильно понял, как работают субпозитории ...

Придерживается ли использование под-репозиториев в моем случае использования? Как то, что я хочу сделать, может быть сделано?

1 Ответ

0 голосов
/ 08 сентября 2011

Изменений не найдено

pushing subrepo packA to D:/Projects/ProjectA/src/packA
searching for changes
no changes found

Это означает, что в packA нет наборов изменений, которых еще нет в D:/Projects/ProjectA/src/packA.Это нормально, если

  • Новых вещей в packA
  • действительно нет, вы уже нажали packA на D:/Projects/ProjectA/src/packA

Если всомневаюсь, что проблема hg outguing D:/Projects/ProjectA/src/packA внутри каталога packA, чтобы убедиться.Эта команда не должна выдавать никаких данных (= ничего не отправлять).

Пути

Эти вложенные элементы помещаются в D:/Projects/Project[ABC]/src/pack[ABC], так как вы указали абсолютные URL-адреса в файле .hgsub для mercurial.Может быть лучше изменить .hgsub следующим образом:

packA = packA
packB = packB
packC = packC

# You can also insert something like packA = ProjectA/src/packA, the point
# is to declare all subrepos as subdirectories of the main repo

и изменить сервер таким образом, чтобы он обслуживал

  • исходный продукт по адресу /
  • ProjectA / src / packA в / packA
  • ProjectB / src / packB в / packB
  • ProjectC / src / packC в / packC

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

КакПримечание: вы можете также рассмотреть возможность использования внешнего репозитория отслеживания зависимостей (называемого « хранилище тонкой оболочки » в hg wiki), который встраивает ваши репозитории pack *, а также репозиторий продукта в качестве подпунктов, посколькуэто более ясно, где каждая часть программного обеспечения принадлежит.

edit

В Mercurial вы можете иметь только один репозиторий для каждого продукта и на сервере по URL-адресу для каждого репозитория.Это означает, что вам нужно настроить различные удаленные репозитории для вашего основного продукта и вложенных репозиториев, поскольку вы не можете хранить содержимое различных вложенных репозиториев вместе с репозиторием продукта.

Существует возможность hg pull -fэти разные репозитории в одно, но я советую против этой практики.После такого извлечения очень трудно перемещаться по истории этого репозитория, так как история разных источников смешана (например, ревизия ревизии этого репо переключается между различными источниками каждый раз, когда кто-то толкаетвнутрь).Этот метод следует использовать только в том случае, если разные подпункты имеют общую историю, но лучше хранить их отдельно, когда они не имеют ничего общего.

...