«факторизация» ртутного хранилища на печи - PullRequest
1 голос
/ 16 января 2012

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

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

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

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 16 января 2012

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

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

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

После получения меньшего хранилища с

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

Они должны быть в своих собственных папках.Это просто потому, что так выглядит репозиторий в Mercurial, Git, Subversion, ... Когда вы имеете дело с subrepositories , тогда 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 для отслеживания отдельных файлов.Им бы тогда не пришлось жить в каталоге.

...