Git Submodules

Продвинутый Git

Amanda Crawford-Adamo

Software and Data Engineer

Что такое Git Submodule?

Git Submodule

git submodule
  • Репозиторий, вложенный в другой репозиторий
  • Отдельный контроль версий и история
  • Изменения в субмодуле не затрагивают основной репозиторий
  • Основной репозиторий может ссылаться на конкретную версию субмодуля

Схема репозитория с несколькими вложенными репозиториями.

Продвинутый Git

Добавление субмодуля

Добавление субмодуля по ссылке или пути к директории.

git submodule add <repository link|dir> <path>

$$

Пример

Добавляет библиотеку валидации данных в ETL-проект в папку libs/validator репозитория ETL.

git submodule add https://github.com/example/data-validator.git libs/validator
Продвинутый Git

Просмотр субмодулей

Список всех субмодулей проекта

git submodule status

Пример

$ git submodule status
e1f2...7w8x9 data_cleaning_lib
a1b2...q7r8 api_connector
d9e8...t3u2 visualization_toolkit
Продвинутый Git

Обновление субмодулей

Обновление субмодуля до последних изменений

Доступно несколько вариантов:

  1. Обновляет все субмодули, исходный код которых находится на локальном компьютере.
    git submodule update --init 
    
  2. Обновляет все субмодули, исходный код которых находится в удалённом репозитории.
    git submodule update --init --remote 
    
  3. Обновляет конкретный субмодуль.
    git submodule update --init <path_to_submodule>
    
Продвинутый Git

Удаление субмодулей

Процесс удаления субмодуля

  1. Деинициализируйте субмодуль.
    git submodule deinit <submodule_name>
    
  2. Удалите субмодуль из индекса репозитория.
    git rm <path>
    
Продвинутый Git

Извлечение субмодуля из большого репозитория

  1. Скопируйте все нужные файлы в новую папку за пределами репозитория.

  2. В новой папке создайте репозиторий для субмодуля:

    git init <new-submodule>
    
  3. Используйте filter-repo, чтобы извлечь нужные файлы и историю из основного проекта:

    git filter-repo --path <extract_path> --invert-paths
    
  4. Добавьте извлечённый репозиторий как субмодуль в основной проект:

    git submodule add <new-submodule_path> <path_to_store_submodule>
    
Продвинутый Git

Когда использовать субмодули и рекомендации

Сценарии использования:

  1. Управление внешними библиотеками
  2. Совместное использование кода в нескольких проектах
  3. Поддержка конкретных версий зависимостей

Рекомендации:

  1. Регулярно обновляйте субмодули
  2. Используйте относительные пути
  3. Сообщайте команде об изменениях
Продвинутый Git

Давайте потренируемся!

Продвинутый Git

Preparing Video For Download...