Верно, для одинаковых файлов вам поможет
Subrepository.
В Mercurial это очень интересная вещь. Алгоритм работы примерно такой:
Внутри своего проекта создаёте папку c субрепозиторием, например library, в ней инициализируете (или клонируете готовый) проект общей библиотеки проекта:
$ mkdir library
$ cd library
$ hg init
Указываете, что эта папка является субрепозиторием, для этого в корневом проекте создаётся файл
.hgsub и указываете там библиотеку:
$ echo 'library' >> .hgsub
Стоит не забывать, что коммитить library нужно будет по отдельности от основного проекта (или указывать специальный ключь), и изменённая библиотека в общий репозиторий попадёт только после коммита в основном проекте.
Если изменения в library произошли отдельно от проекта (это часто бывает так как проект уникален а library единая для многих проектов) получить свежие обновления без прямого пула (
hg pull) из самой library не возможно, так как Mercurial не умеет рекурсивно обновлять субрепозиториии. Но для этого можно использовать небольшую хитрость, можно явно указать какие субрепозитории необходимо обновить при обновлении основного репозитория, делается это при помощи секции
[hooks] в персональный mercurial-настройках проекта (
.hg/hgrc), например так:
В файл .hg/hgrc пишем:
[hooks]
preupdate = ./library/hgsubupdate.sh
А в файл hgsubupdate.sh:
hg pull -R library --update
Тогда, при выполнении команды
hg update в основном репозитории рекурсивно обновятся и субрепозитории указанные в хуках.
В новых же проектах, вы можете просто делать форк основного репозитория и вести его абсолютно отдельно, а общие субрепозитории будут подгружаться также.