Хотите разрабатывать меньшие модули и делиться ими между репозиториями? Вот несколько полезных опций.
Иногда вам нужно иметь код из одного репозитория внутри другого репозитория. Обычно это создает проблему, поскольку Git управляет исходным кодом, а не зависимостями. В результате был создан целый набор инструментов для поддержки рабочего процесса разработки с совместным использованием кода на более модульном уровне, стремясь преодолеть разрыв между Git Repo SCM и вложенными репозиториями внутри него.
Подмодули Git позволяют сохранить репозиторий Git в качестве подкаталога другого репозитория Git. Теоретически это позволяет вам клонировать другой репозиторий в свой проект и хранить ваши коммиты отдельно. Почему это полезно? потому что это позволяет вам использовать другой проект из проекта, над которым вы работаете.
Однако, если вы выполните быстрый поиск подмодулей Git в Google, результаты не будут положительными. Это связано с некоторыми серьезными недостатками подмодулей git, такими как привязка к определенной версии внешнего репо, отсутствие эффективного управления слиянием и общее представление о том, что сам репозиторий Git на самом деле не знает, что теперь он является мульти- репозиторий модулей.
Git по своей сути также не создан для обработки зависимостей и отношений между компонентами. Таким образом, рабочий процесс, связанный с совместным использованием кода, становится сложным, и субмодули изо всех сил пытаются выполнить желаемый рабочий процесс. В Mercurial субхранилища называются последней инстанцией, которую следует избегать.
В этом посте мы предложим и рассмотрим полезные альтернативы подмодулям Git, которые помогут разработать несколько общих компонентов в проектах и в репозитории. Не стесняйтесь попробовать их и добавить свои собственные предложения в комментариях.
1. Бит (для JS)
Bit — это расширение с открытым исходным кодом для Git, которое обрабатывает как исходный код, так и зависимости между различными проектами и на уровне отдельных компонентов.
Прочтите:« Как мы создаем микро-интерфейсы »
В результате он создает рабочий процесс для разработки множества более мелких компонентов / модулей в репозитории, имея при этом возможность совместно использовать их в других репозиториях с полным контролем над изменениями кода и зависимостями.
Вы можете указать Bit на файлы и каталоги в вашем репозитории, которые вы хотели бы использовать в других репозиториях, и он начнет отслеживать их исходный код, автоматически выполняя код и определяя все зависимости.
Затем компоненты могут быть помечены версией и экспортированы в коллекцию удаленного хостинга (предпочтительно через bit.dev), откуда их можно импортировать в другие проекты, где вы также можете их разработать. и внести изменения.
Поскольку Bit отслеживает код и управляет зависимостями между проектами, вы можете легко объединить изменения кода между различными репозиториями и обновить граф зависимостей по всей вашей кодовой базе.
Результат двоякий:
- Вы можете легко управлять несколькими модулями в репозитории, в то время как Bit обрабатывает отношения зависимости между ними. Когда вы меняете модуль и обновляете его версию, вы можете запустить
bit status
Bit уведомит вас об изменении модуля и спросит, хотите ли вы обновить иждивенцев. Bit даже позволяет разрабатывать модули с разными средами в одном репозитории, например TS внутри репозитория JS. - Вы можете поделиться этими модулями в нескольких репозиториях, в то время как Bit расширит рабочий процесс Git, чтобы контролировать и синхронизировать изменения между ними, а также легко обновлять весь график зависимостей в репозиториях.
Если вы работаете с bit.dev, вы также получите пользовательский интерфейс для поиска общих компонентов, совместной работы и даже игры с примерами в Интернете. «Взглянем».
teambit / bit
Легко делитесь кодом между проектами со своей командой. — teambit / bit github.com
2. Поддеревья Git
Экспериментальная альтернатива команде git-submodule, которая объединяет и разбивает поддеревья вашего проекта на подпроекты и обратно. Поддеревья позволяют включать подпроекты в подкаталог основного проекта, при желании включая всю историю подпроекта. Поддерево — это подкаталог, который можно добавлять, разветвлять и объединять вместе с вашим проектом любым удобным для вас способом. Идея слияния поддерева состоит в том, что у вас есть два проекта, и один из проектов отображается в подкаталог другого и наоборот. Когда вы указываете слияние поддеревьев, Git может определить, что одно является поддеревом другого, и слить соответствующим образом.
В отличие от подмодулей исходные файлы поддеревьев хранятся в репо. Это не просто ссылка, это действительно код. Кроме того, требуется меньше шагов и меньше изменений в рабочем процессе, поэтому многие считают этот вариант предпочтительным.
3. Git slave
Gitslave — это «сценарий для скоординированного контроля версий больших проектов, объединяющий код из нескольких независимых репозиториев с помощью Git». Он предоставляет оболочку для Git, которая управляет деревом каталогов с несколькими «подчиненными» репозиториями в каталогах. Это означает, что ваша командная строка Git сможет управлять всеми «подчиненными» репозиториями из самого «главного» репозитория.
Это может быть полезно при разработке различных подпроектов в репозитории и при необходимости консолидации рабочего процесса и обновлений между ними.
Оболочка запускает ваши команды Git в каждом из репозиториев и объединяет вывод для всех из них. Gitslave — это добавленное дополнение, и, кроме одного нового файла в суперпроекте, изменения в .gitignore и, возможно, несколько частных переменных конфигурации не влияют на ваши репозитории.
4. Lerna (для многопакетных JS-репозиториев)
«Аааа! Лерна не управляет исходным кодом! Это не инструмент для управления репо в другом репо! » — Да ты прав. Он не управляет исходным кодом. Он не объединит рабочий процесс Git для подпроектов в вашем репозитории. Вы не сможете контролировать или объединять изменения в подпроектах с помощью Lerna или расширять любой другой рабочий процесс управления исходным кодом для подкаталогов в проекте или между разными репозиториями. Тем не менее, разработчики JS могут использовать Lerna для достижения некоторых из цели, которые должны быть достигнуты с помощью подмодулей Git.
Если ваш вариант использования верен, Lerna может оказаться полезным способом разрабатывать и публиковать модули из единого репозитория. Вы можете использовать Lerna для преобразования вашего репозитория в репозиторий с несколькими пакетами, в котором размещаются различные модули в разных каталогах репозитория, использовать возможности Lerna для автоматизации управления версиями и публикации модулей и выполнить свою работу.
Каждый модуль будет настроен со всеми конфигурациями автономного пакета, включая файл package.json
и все остальное. Итак, когда вашей конечной целью является создание JS-репозитория, в котором вы можете разрабатывать несколько пакетов и публиковать их, Lerna пригодится в качестве альтернативы Git-Submodules в том смысле, что делает этот рабочий процесс практичным.
Почетные упоминания
Добавляйте еще в комментариях… Ура ?
Учить больше