"факторизация" ртутного хранилища на печи
Обобщенные вопросы:
Какой самый простой (и лучший) способ переместить группу файлов из существующего репозитория в новый суб-репозиторий, чтобы эти файлы можно было интегрировать с другими родительскими репозиториями, некоторые из которых могут еще не существовать?
Должны ли файлы в подпапках находиться в отдельных папках или они могут существовать вместе с другими файлами?
Подробные вопросы:
Я начал процесс создания нескольких репозиториев, представляющих несколько проектов, которые имеют общие компоненты, и это идет хорошо, благодаря SO и некоторым полезным ответам на мой вопрос здесь
Когда я перехожу к добавлению второго проекта, я замечаю, что в моих проектах есть несколько файлов, которые дублируются и, по сути, являются одним и тем же, с достаточным сходством, чтобы оправдать их удаление из основного репозитория проекта и создание нового подкаталога, чтобы они может быть
- использовать любые новые проекты, которые я начинаю, и
- удалены из других существующих репозиториев, так как они идентичны.
Я предполагаю, что лучший способ - это просто создать новый репозиторий, переместить файлы в локальной файловой системе, отправить оба репозитория, а затем создать файл.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 для отслеживания отдельных файлов. Им бы тогда не пришлось жить в каталоге.