Я по разному пробовал решать проблему использования общих
модулей/библиотек в разных проектах. В конце концов остановился на
таком варианте: Все модули/библиотеки лежат в виде исходников с репозиториями по своим каталогам. Для каждого модуля в своем каталоге ведется репозиторий.
При необходимости вставить что-то в проект создается ссылка на нужный каталог модуля в каталоге с проектом. Можно создать 1 ссылку на дерево каталогов с исходниками модулей. Я так обычно и делаю.
Еще в проект копируются конфиги этих модулей.
Затем, когда создается репозиторий проекта, к нему подключаются субрепозитории модулей.
За счет использования символьной ссылки в каталоге проекта решается проблема абсолютных путей. Но там есть и определенные нюансы.
Если репозиторий с проектом велся долгое время без подключаемых через ссылку модулей, а потом создали ссылку, то возможна такая ситуация:
При выборе какого-нибудь старого коммита (без ссылки) ссылка будет удалена. При возврате к новому коммиту (с ссылкой) вместо ссылки будет создан каталог.
Так-же при работе с несколькими проектами, которые используют общие модули надо следить, чтобы в рабочем каталоге модуля лежали исходники из субрепозитория соответствующие текущему проекту, а не предыдущему. Но такое бывает в процессе написания/доработки модуля. Когда все давно готово, то проблем нет.
PS: пользую Mercurial, в git по идее тоже должно работать так-же.