Руководство по управлению несколькими репозиториями MonoSpecs
Редактировать страницуMonoSpecs — это подход HagiCode к управлению несколькими репозиториями. Он отслеживает и управляет субрепозиториями через monospecs.yaml, и он работает для любого проекта, которому требуется одно место для координации нескольких независимых репозиториев.
Основные понятия
Заголовок раздела «Основные понятия»Файл конфигурации
monospecs.yaml является основой всего управленческого решения и определяет:
- Список и расположение субрепозиториев
- URL-адрес Git для каждого репозитория
- Отображаемое имя и значок
- Поведение интеграции с OpenSpec
Отличия от обычных репозиториев
| Особенность | Обычный репозиторий | Управляемый проект MonoSpecs |
|---|---|---|
| Расположение OpenSpec | Корневой каталог openspec/ | Корневой каталог основного репозитория openspec/ |
| Изменить область | Ограничено текущим репозиторием | Может включать несколько субрепозиториев |
| Чистота субрепозитория | Спецификации смешаны с кодом | Спецификации установлены в основном репозитории, субрепозитории более чистые. |
| Автоматическая фиксация архива | Требуется ручная фиксация спецификации | commit_when_archive: true автоматически фиксирует спецификации в основной репозиторий |
Зачем использовать моноспеки?
Заголовок раздела «Зачем использовать моноспеки?»- Единое управление: управляйте всеми субрепозиториями в одном файле конфигурации.
- Поддержка автоматизации: предоставляет метаданные репозитория для сценариев и инструментов.
- Удобство для искусственного интеллекта: структурированная конфигурация помогает агенту искусственного интеллекта понимать взаимоотношения с репозиториями.
- Интеграция OpenSpec: бесшовная интеграция с рабочим процессом управления изменениями.
- Чистые субрепозитории: спецификации хранятся в основном репозитории, субрепозитории содержат только реальный код.
Применимые сценарии
Заголовок раздела «Применимые сценарии»Сначала используйте MonoSpecs в таких сценариях:
1. Совместная разработка нескольких репозиториев Когда проект разделен на несколько независимых репозиториев:
- Интерфейсное приложение, серверная служба и настольное приложение разрабатываются отдельно.
- Необходимость координации версий и зависимостей между репозиториями.
- Документация и вспомогательные проекты отделены от основного кода.
2. Вспомогательное управление проектами Используйте MonoSpecs для управления:
- Проект документации
- Официальный сайт
- Инструменты и скрипты для создания
- Каждый репозиторий поддерживает собственный контроль версий.
3. Межрепозиторийная разработка Функция, требующая внесения изменений в несколько репозиториев:
- Нужно отслеживать изменения в каких репозиториях
- Автоматически фиксировать спецификации для исправления целевого репозитория
- Координация обновлений версий и зависимостей
Быстрый старт
Заголовок раздела «Быстрый старт»Инициализация
Заголовок раздела «Инициализация»Выполните следующие шаги для завершения инициализации monospecs:
1. Создайте пустой репозиторий git.
Заголовок раздела «1. Создайте пустой репозиторий git.»Создайте пустой git папка в вашем основном репозитории (примечание: это git, не repos/ - это соглашение моноспеков):
mkdir gitcd gitgit initcd ..2. Настройте файл monospecs.
Заголовок раздела «2. Настройте файл monospecs.»Создайте monospecs.yaml файл конфигурации в корневом каталоге вашего основного репозитория:
version: "1.0"commit_when_archive: true
repositories: - path: "repos/frontend" url: "https://github.com/your-org/frontend.git" displayName: "Frontend App" icon: "🌐"
- path: "repos/backend" url: "https://github.com/your-org/backend.git" displayName: "Backend Service" icon: "⚙️"Элементы конфигурации:
| Элемент конфигурации | Тип | Требуется | Описание |
|---|---|---|---|
version | строка | Да | Версия файла конфигурации |
commit_when_archive | логическое значение | Нет | Следует ли автоматически фиксировать спецификации при архивировании (не фиксировать код субрепозитория) |
repositories | массив | Да | Список конфигурации репозитория |
repositories[].path | строка | Да | Путь к репозиторию (относительно корня проекта) |
repositories[].url | строка | Да | URL-адрес репозитория Git |
repositories[].displayName | строка | Нет | Отображаемое имя репозитория |
repositories[].icon | строка | Нет | Значок репозитория (эмодзи) |
Добавить субрепозитории в основной репозиторий
Заголовок раздела «Добавить субрепозитории в основной репозиторий»Добавьте все подрепозитории в repos/ каталог. Этот каталог должен быть исключен из системы контроля версий Git основного репозитория, чтобы избежать отслеживания содержимого подрепозитория:
# Exclude all sub-repositoriesrepos/3. Добавьте родительский репозиторий в HagiCode.
Заголовок раздела «3. Добавьте родительский репозиторий в HagiCode.»Если вы используете настольное приложение HagiCode, откройте его и добавьте основной репозиторий в качестве проекта. Нажмите кнопку «Добавить проект» или «+» на главном экране, выберите папку основного репозитория, и вы увидите все подрепозитории и информацию об их статусе.
4. Клонирование субрепозиториев
Заголовок раздела «4. Клонирование субрепозиториев»Используйте monospecs.yaml конфигурация для клонирования всех настроенных субрепозиториев в repos/ каталог:
Это клонирует все подрепозитории на основе URL-адресов, указанных в файле конфигурации.
Структура файла конфигурации
Заголовок раздела «Структура файла конфигурации»Конфигурация корневого уровня
Заголовок раздела «Конфигурация корневого уровня»version: "1.0"commit_when_archive: true
repositories: # ... repository configurationsКонфигурация уровня репозитория
Заголовок раздела «Конфигурация уровня репозитория»Каждый субрепозиторий может иметь:
- Папка изменений OpenSpec (
openspec/) - Независимый
.git/каталог - Необязательно
AGENTS.mdдля настройки AI-агента
Операции по управлению репозиторием
Заголовок раздела «Операции по управлению репозиторием»Добавить новый репозиторий
Заголовок раздела «Добавить новый репозиторий»При добавлении нового субрепозитория в monospecs.yaml repositories массив:
repositories: - path: "repos/new-service" url: "https://github.com/HagiCode-org/new-service.git" displayName: "New Service" icon: "🆕"Обновить конфигурацию репозитория
Заголовок раздела «Обновить конфигурацию репозитория»При изменении URL-адресов репозитория или метаданных:
- Редактировать
monospecs.yamlобновить соответствующие записи - Убедитесь, что синтаксис YAML верен.
- При синхронизации изменений вручную обновите конфигурацию локального репозитория.
Поддержка настройки агента AI
Заголовок раздела «Поддержка настройки агента AI»AGENTS.md
Заголовок раздела «AGENTS.md»AGENTS.md файл содержит рекомендации для AI-агента, специфичные для репозитория:
Техническая информация по стеку
- Фреймворк и инструменты сборки
- Соглашения о коде и практика именования
- Управление версиями и настройка развертывания
Поведение, зависящее от проекта
- Расширения конфигурации и особые требования
- Шаблоны интеграции OpenSpec
- Потребности в координации между репозиториями
Преимущества ИИ
Заголовок раздела «Преимущества ИИ»Использование AGENTS.md позволяет ИИ-агенту:
- Понимание отношений и зависимостей репозитория
- Генерация кода и рефакторинг в нескольких репозиториях
- Поддерживать согласованность в управлении версиями и конфигурациях.
Интеграция OpenSpec
Заголовок раздела «Интеграция OpenSpec»Как MonoSpecs работает с OpenSpec
Заголовок раздела «Как MonoSpecs работает с OpenSpec»Независимо от того, управляете ли вы управляемым проектом monospecs или обычным репозиторием, вы можете использовать рабочий процесс OpenSpec HagiCode:
Обычный репозиторий:
- OpenSpec в корне
openspec/каталог - Изменения касаются только текущего репозитория.
Проект, управляемый MonoSpecs:
- OpenSpec читает
monospecs.yamlконфигурация - Изменения отслеживаются субрепозиторием
- Спецификации автоматически фиксируются для достижения правильных целей
Поведение архива
Заголовок раздела «Поведение архива»Когда commit_when_archive: true:
- Спецификации автоматически фиксируются в основном репозитории.
- Код субрепозиториев не зафиксирован (остается отдельным)
- Упрощает управление спецификациями — для субрепозиториев не требуется фиксация спецификаций вручную.
Ручная фиксация субрепозитория
Заголовок раздела «Ручная фиксация субрепозитория»Субрепозитории поддерживают независимый контроль версий:
- Вносить фактические изменения кода в свои собственные репозитории.
- Спецификации фиксируются отдельно (из основного репозитория при архивировании)
Лучшие практики
Заголовок раздела «Лучшие практики»Соглашения об именах репозиториев
Заголовок раздела «Соглашения об именах репозиториев»- Используйте kebab-case (строчные буквы и дефисы) для путей к хранилищу.
- Используйте простые, описательные отображаемые имена на китайском языке.
- Используйте соответствующие смайлы в качестве значков
Рекомендации по отображаемым именам
Заголовок раздела «Рекомендации по отображаемым именам»- Держите его кратким и описательным
- Используйте единообразные имена для похожих репозиториев.
- Выберите значки, обозначающие назначение репозитория.
Обслуживание конфигурации
Заголовок раздела «Обслуживание конфигурации»Синхронизировать конфигурацию с фактическим статусом
- Регулярно проверяйте
monospecs.yamlотражает фактическую структуру репозитория - Обновлять или удалять записи при добавлении или удалении репозиториев.
- Тестируйте изменения, чтобы убедиться в правильности конфигурации.
Контроль версий для конфигурации
- Отслеживать изменения файла конфигурации с помощью git
- Документируйте причины серьезных изменений конфигурации.
- Тегируйте версии файла конфигурации для простого отката
Устранение неполадок
Заголовок раздела «Устранение неполадок»Файл конфигурации не найден
Заголовок раздела «Файл конфигурации не найден»Если monospecs.yaml файл не найден в корне проекта:
- Проверьте, существует ли файл в правильном месте
- Убедитесь, что вы находитесь в правильном рабочем каталоге
- Проверьте наличие опечаток в имени файла конфигурации.
Синтаксические ошибки YAML
Заголовок раздела «Синтаксические ошибки YAML»Распространенные проблемы с синтаксисом YAML:
- Неправильный отступ (используйте пробелы, а не табуляции)
- Отсутствующие или лишние кавычки вокруг строк
- Недопустимые типы данных (строки нуждаются в кавычках, числа — нет)
- Отсутствуют обязательные поля (например,
pathилиurl)
Репозиторий не обнаружен
Заголовок раздела «Репозиторий не обнаружен»Если вновь добавленный репозиторий не отображается:
- Проверьте
pathправильно вmonospecs.yaml - Убедитесь, что репозиторий успешно клонирован.
- Проверьте, существует ли репозиторий в ожидаемом месте.
Неудачи клонирования
Заголовок раздела «Неудачи клонирования»Если клонирование репозитория не удалось:
- Проверьте сетевое соединение
- Убедитесь, что URL-адрес репозитория Git верен.
- Проверьте наличие проблем с аутентификацией
- Просмотр состояния контейнера Docker
- Проверьте наличие места на диске
Для получения более подробной информации обратитесь к документации monospecs и проверьте репозиторий HagiCode, чтобы найти примеры конфигурации.