ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
1069496 Топик полностью
il-2 (15.01.2021 17:55, просмотров: 217) ответил Constantin24 на Вопрос по svn external. Имеем репозиторий "lib-repo" со следующей структурой:
Могу рассказать про Mercurial. В гите наверное так-же: 

У меня имеется репозиторий с проектом.

У меня имеется репозиторий с библиотечными исходниками, которые я хочу подключить к проекту, и так чтобы в репозитории проекта был субрепозиторий библиотеки.

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

Все. Все дальнейшие действия по ведению репозитория/субрепозитория Mercurial берет на себя.

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

Но есть недостатки:

1. Ссылка на каталог. С ней надо аккуратно. Если начал вести проект и сделал первые коммиты в репозиторий, в которых нет этого каталога(ссылки), то потом может произойти казус - если сделать Update для такой ревизии (без каталога), то Mercurial его сотрет (ссылка на каталог изчезнет). А если потом сделать Update для ревизии, в которой этот каталог есть, то он конечно появится, но... в виде каталога, а не ссылки.

2. Если пользуешься одной и той-же библиотекой в нескольких проектах, и в каждом используется своя ревизия из репозитория библиотеки, надо тоже следить, чтобы в рабочем каталоге библиотеки лежали исходники нужной ревизии. Но это несложно - надо просто делать принудительно Update при переключении с проекта на проект.