Ответ 1
Если библиотеки B и C должны быть подкаталоги проекта A, что мне нужно если я хочу начать проект D, использует библиотеку B, но не является иным связанных с проектом А?
Любой проект может существовать как самостоятельно, так и в качестве субрепозитория другого проекта одновременно. Я объясню, предлагая рабочий процесс.
Прежде всего, каждый из ваших проектов (A, B, C) должен иметь благословенный репозиторий, который где-то опубликован:
Вы можете запустить hgwebdir на своем собственном сервере или воспользоваться сервисом Mercurial, например Bitbucket или Kiln. Таким образом, разработчики имеют центральную авторитарную точку, чтобы вытащить/форсировать изменения, и у вас есть что сделать для резервного копирования.
Теперь вы можете заставить клоны этих репозиториев работать по-разному:
-
напрямую клонировать ваш проект. Например:
hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB
-
и/или создать определения субрепозитория, вставив в корневой каталог
ProjectA
файл.hgsub
со следующим содержимым:libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC
Эти определения в подположении говорят Mercurial, что всякий раз, когда выполняется проект A, он также должен класть клоны библиотеки B и библиотеки C в папку libraries
.
Если вы работаете в Project A и commit, ваши изменения в libraries/LibraryB
и libraries/LibraryC
также будут зафиксированы. Mercurial будет записывать, какая версия библиотек используется проектом A в файле .hgsubstate
. В результате, если вы hg update
в старой версии проекта, чтобы увидеть, как все работает на прошлой неделе, вы также получите соответствующую версию своих библиотек. Вам даже не нужно создавать теги: -)
Когда вы hg push
, проект A изменится в благословенный репозиторий, Mercurial также обязательно будет сначала подталкивать изменения в подположении к их собственному происхождению. Таким образом, вы никогда не публикуете изменения проекта, которые зависят от неопубликованных изменений в библиотеке.
Если вы предпочитаете сохранять все локально, вы все равно можете использовать этот рабочий процесс, используя относительные пути, а не URL-адреса в определениях подрезоляров.