"факторизация" ртутного хранилища на печи

Обобщенные вопросы:

Какой самый простой (и лучший) способ переместить группу файлов из существующего репозитория в новый суб-репозиторий, чтобы эти файлы можно было интегрировать с другими родительскими репозиториями, некоторые из которых могут еще не существовать?

Должны ли файлы в подпапках находиться в отдельных папках или они могут существовать вместе с другими файлами?

Подробные вопросы:

Я начал процесс создания нескольких репозиториев, представляющих несколько проектов, которые имеют общие компоненты, и это идет хорошо, благодаря SO и некоторым полезным ответам на мой вопрос здесь

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

  1. использовать любые новые проекты, которые я начинаю, и
  2. удалены из других существующих репозиториев, так как они идентичны.

Я предполагаю, что лучший способ - это просто создать новый репозиторий, переместить файлы в локальной файловой системе, отправить оба репозитория, а затем создать файл.hgsub и продолжить работу, как в ответе на мой предыдущий вопрос. Это, очевидно, затем переместит соответствующие файлы в подпапку в локальной файловой системе каждого основного проекта, с которым я могу жить, но это поднимает гипотетический вопрос - возможно ли иметь список файлов в репозитории, которые эффективно часть вложенного репозитория, но находится рядом с другими файлами (то есть не в подпапке).

Если бы я хотел (например) иметь файл "acme.h" в каждом проекте, который является частью другого репозитория, могу ли я сделать это? как это происходит, мне не нужно делать это в данный момент времени, и в моей текущей ситуации было бы лучше с точки зрения разработки иметь файлы, которые мне нужно "перестроить" в другой репозиторий в их собственной подпапке Однако это не всегда так. Я использую рефакторинг в кавычках, так как, строго говоря, рефакторинг дублированных файлов - это рефакторинг кода, однако применяется тот же принцип.

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

1 ответ

Решение

Спасибо за краткий обзор, это облегчает ответ!

Какой самый простой (и лучший) способ перенести группу файлов из существующего репозитория в новый суб-репозиторий, чтобы эти файлы можно было интегрировать с другими родительскими репозиториями, некоторые из которых могут еще не существовать?

Вы можете использовать расширение convert для извлечения каталога из существующего хранилища Mercurial. Вы хотите использовать --filemap Отметьте, и в файловой карте вы включите нужный каталог и переименуете его в корень. Увидеть hg help convert для получения дополнительной информации.

После того, как вы получите меньший репозиторий с

Должны ли файлы в подпапках находиться в отдельных папках или они могут существовать вместе с другими файлами?

Они должны быть в их собственных папках. Это просто потому, что именно так выглядит репозиторий в Mercurial, Git, Subversion, ... Когда вы имеете дело с субрепозиториями, тогда Mercurial не отслеживает файлы внутри подпункта: он просто просит какую-то (другую) систему сделать проверка хранилища foo в каком-то месте.

Итак, когда ваш .hgsub файл имеет

foo = foo
bar = [git]bar
baz = [svn]baz

тогда Mercurial заметит это на hg update и беги

hg clone default-path-of-this-repo/foo foo
git clone default-path-of-this-repo/bar bar
svn checkout default-path-of-this-repo/baz baz

для тебя. Это объясняет, почему подпапки являются каталогами во внешнем репозитории: это просто, как выглядит клон / извлечение в наши дни.

Как видите, подпапки могут быть разных типов. Можно предположить, что кто-то может добавить тип подкаталога RCS для отслеживания отдельных файлов. Им бы тогда не пришлось жить в каталоге.

Другие вопросы по тегам