Именно так я и понял описание вначале, но если вы хотите использовать B и C этими двумя разными способами, я не думаю, что вы можете включить местоположение A в репозитории и все же ожидать, что оно будет работать. Рассматривали ли вы наличие отдельных репозиториев B2 и C2, которые имеют суб-репозитории {B, C} и A, используемые для разработки (и, следовательно, отслеживания непротиворечивых версий A)? Обратите внимание, что D будет иметь подпункты B и C, а не B2 и C2. Поскольку то, что вы делаете, напрямую невозможно с помощью hg subrepos (в том виде, в каком они есть), в какой-то момент вам придется сделать что-то хакерское.
шлом было несколько вопросов о зависимостях Hg sub-repo (Вот а такжеВот) но принятые ответы не решают проблему для меня.
Мой проект имеет 4 зависимости: A, B, C, D. D зависит от A, B и C; и B и C зависят от A:
Я хочу использовать вложенные репозитории Hg для их хранения, чтобы я мог отслеживать, на какую версию каждой из них они опираются. Это потому, что, хотя я использую A, B, C и D в этом проекте,другие проекты потребуют только A и B, Поэтому B и C должны отслеживать, какая версия A им нужна независимо от D. В то же время в моем приложении версии B и C, на которые ссылается данная версия D, всегда должны использовать ту же версию A, на которую ссылается данная версия D (иначе она просто упадет во время выполнения). Что я действительно хочу, так это позволить им ссылаться друг на друга как братья и сестры в одном и том же каталоге - то есть .hgsub D будет выглядеть следующим образом, а B и C будут выглядеть как первая строка.
..\A = https:(central kiln repo)\A
..\B = https:(central kiln repo)\B
..\C = https:(central kiln repo)\C
Однако это, похоже, не работает: я понимаю, почему (было бы легко дать людям достаточно веревки, чтобы повеситься), но это позор, так как я считаю, что это лучшее решение для моих зависимостей. Я прочитал несколько предложенных решений, которые я кратко опишу и почему они не работают для меня:
Включить копии как вложенные подкаталогиссылаться на них как на субпозитории Hg. Это приводит к следующей структуре каталогов (я удалил основные копии A, B, C, B \ A, C \ A, поскольку вместо этого я могу принять ссылку на копии внутри \ D):
проект \ (все основные файлы проекта)Проект \ DПроект \ D \ AПроект \ D \ BПроект \ D \ B \ AПроект \ D \ CПроект \ D \ C \ AПроблемы с этим подходом:
Теперь у меня есть 3 копии A на диске, каждая из которых может иметь независимые модификации, которые должны быть синхронизированы и объединены перед отправкой в центральное хранилище.Я должен использовать другие механизмы, чтобы гарантировать, что B, C и D ссылаются на одну и ту же версию A (например, D может использовать v1, в то время как D \ B может использовать v2)Вариант: используйте выше, ноукажите RHS .hgsub, чтобы указать на копию в родительской копии (т. е. B и C должны иметь .hgsub ниже):
A = ..\A
Проблемы с этим подходом:
У меня все еще есть три копии на дискеВ первый раз, когда я клонирую B или C, он попытается рекурсивно извлечь ссылочную версию A из ".. \ A", которая может не существовать, предположительно вызывая ошибку. Если он не существует, он не дает понять, где находится репо.Когда я делаю рекурсивный толчок изменений, изменения в D \ B \ A не попадают в общий центральный репозиторий; вместо этого их просто толкают в D \ A. Так что, если я нажму два раза подряд, я могу гарантировать, что все изменения будут распространены правильно, но это довольно сложно.Точно так же, если я делаю (ручное) рекурсивное извлечение, я должен правильно оформить заказ, чтобы получить последние изменения (т.е. потянуть D \ A, прежде чем я потяну D \ B \ A)использованиесимлинки указать папку \ D \ B \ A на D \ A и т. д.
Проблемы с этим подходом:
символические ссылки не могут быть закодированы в самом репозитории Hg, поэтому каждый раз, когда член команды клонирует репо, он должен вручную / с помощью сценария заново создавать символические ссылки. Это может быть приемлемо, но я бы предпочел лучшее решение. Также (личное предпочтение) я нахожу символические ссылки крайне неинтуитивными.Это лучшие из доступных решений? Есть ли веская причина, по которой мой начальный .hgsub (см. Верх) является несбыточной мечтой, или есть способ, которым я могу запросить / реализовать это изменение?
ОБНОВЛЕНО чтобы лучше объяснить более широкое использование A, B, C, D