У меня имеется репозиторий с проектом.
У меня имеется репозиторий с библиотечными исходниками, которые я хочу подключить к проекту, и так чтобы в репозитории проекта был субрепозиторий библиотеки.
В каталоге в проектом я делаю ссылку на каталог с библиотекой. Ссылка - это ключевой момент (конечно - это костыль, но работает). Подключаю исходники библиотеки к проекту. Подключаю субрепозиторий библиотеки к репозиторию проекта.
Все. Все дальнейшие действия по ведению репозитория/субрепозитория Mercurial берет на себя.
Все коммиты в репозиторий проекта включают в себя ссылки на ревизии субрепозитория библиотеки. Если я сделал изменения в исходниках библиотеки, я не смогу сделать коммит проекта, пока не закоммичу изменения библиотеки, и только после этого (когда в репозитории библиотеки появится новый коммит) будет сделан коммит проекта со ссылкой на новый коммит библиотеки. Соответственно, когда делаешь Update какой-либо ревизии проекта, в каталог с библиотекой делается update нужной ревизии библиотеки. Все работает само.
Но есть недостатки:
1. Ссылка на каталог. С ней надо аккуратно. Если начал вести проект и сделал первые коммиты в репозиторий, в которых нет этого каталога(ссылки), то потом может произойти казус - если сделать Update для такой ревизии (без каталога), то Mercurial его сотрет (ссылка на каталог изчезнет). А если потом сделать Update для ревизии, в которой этот каталог есть, то он конечно появится, но... в виде каталога, а не ссылки.
2. Если пользуешься одной и той-же библиотекой в нескольких проектах, и в каждом используется своя ревизия из репозитория библиотеки, надо тоже следить, чтобы в рабочем каталоге библиотеки лежали исходники нужной ревизии. Но это несложно - надо просто делать принудительно Update при переключении с проекта на проект.