#git-submodules #darcs
#git-подмодули #darcs
Вопрос:
так что да, просто интересно, есть ли в darcs что-нибудь эквивалентное подмодулям git.
то есть, допустим, у меня есть репозиторий (myapp), и в нем есть папка под названием mylibrary. mylibrary на самом деле не имеет никакого отношения к разработке myapp, его просто нужно включить. разработка mylibrary происходит в ее собственном репозитории, но когда кто-то запускает myapp, он также запускает обновленную версию mylibrary. есть идеи?
Ответ №1:
Моя первая мысль: поскольку darcs проще, чем git (т. Е. Нет ветвей и удаленных устройств — вместо этого вы просто используете каталоги и URL-адреса, и ваша задача — управлять ими), подмодуль darcs не даст намного больше того, чего вы можете достичь со стандартными вещами, такими как подкаталоги или файлы внутри вашего репозитория darcs.
-
Если вам нужен подмодуль для того, чтобы исправить определенное состояние исходного кода используемой библиотеки, возможно, вы могли бы просто поместить копию репозитория библиотеки в качестве вложенного каталога и добавить его в darcs вашего проекта. По сравнению с git, это имело бы недостаток в раздувании передачи данных, когда кто-то получает ваше репозиторий.
-
Если вам нужен подмодуль, чтобы сообщить тем, кто получает ваше репозиторий, где получить обновленный исходный код библиотеки (без увеличения размера вашего репозитория), вы могли бы просто поместить URL и инструкцию в файл README, или скрипт, или что-то еще. Недостатком по сравнению с git является то, что состояние исходного кода библиотеки, каким оно было на момент вашего использования, не будет записано в вашем коммите, поэтому люди могут получить другую версию библиотеки, и компиляция не увенчается успехом, и будет непонятно, почему.
Итак, действительно интересной целью подмодуля может быть не просто указание людям, откуда взять исходный код библиотеки (как вы пишете в вопросе), но и запись состояния подпроекта, который вы фактически использовали для компиляции вашего проекта, а не раздувание вашего репозитория для тех, кто не хочет получать исходный код подпроекта.
Вероятно, эта цель также может быть достигнута путем хранения более сложных метаданных о состоянии подпроекта и более сложного перехвата для получения именно этого состояния (или — по выбору — другого состояния) подпроекта. AFAIK из документации, для таких подмодулей нет встроенного механизма.
Обновление (найдено на сайте darcs):
Итак, darcs заметит другой репозиторий darcs внутри вашей рабочей системы и не коснется его. Итак, первый способ, который я предложил выше, — закрыть (если вы оставите метаданные darcs там).
Второй способ похож на что-то, предложенное в одном из разделов последней ссылки. (Они предлагают скрипт «uglu» для чего-то подобного.)
Еще одна (третья) идея
Импортируйте исправления из репозитория, который вы собираетесь использовать в качестве подмодуля, но сначала переместите все файлы во вложенный каталог. Если бы было возможно просто применить такой движущийся специальный патч один раз, и если бы он был эффективен для всех патчей, которые вы импортируете из репозитория, предназначенного в качестве подмодуля, но не для патчей, которые вы импортируете из «ветки» основного репозитория…
…ну, это мог бы быть специальный вариант pull
команды (скажем, import
) и push
команды (скажем, export
), которые дополнительно переводили бы пути соответствующим образом.
Ответ №2:
Я не знаю ни о каком понятии подмодуля для darcs, что означает, что обычным способом ссылки на другой (общий) репозиторий из репозитория darcs были бы символические ссылки.
Поскольку символические ссылки не поддерживаются в darcs, это означает, что вам нужно создать « posthook sh update-symlinks.sh
» скрипт подключения для восстановления этих ссылок.
Но вы также могли бы использовать добавление к этому перехвату проверки, чтобы сначала посмотреть, какая версия встроенного репозитория загружена в данный момент, и обновить эту версию при необходимости (при условии, что вы сохранили тем или иным способом точную версию, которая вам нужна для этого общего репозитория).
Это последнее предложение на самом деле близко к реализации подмодулей Git или вложенных репозиториев Mercurial.