# Оновлення git submodules

> Як оновити один або кілька субмодулів git репозиторію до цільової версії.

---

LLMS index: [llms.txt](/llms.txt)

---

Кожен субмодуль закріплений за тегом або комітом через поле `*-pin` у [.gitmodules][]. Дотримуйтесь наведеного нижче процесу, щоб оновити один або кілька субмодулів до цільової версії.

## Аргументи {#arguments}

1. Один або кілька субмодулів для оновлення (шлях або імʼя). Субмодулі, доступні для оновлення, оголошені в [.gitmodules][], і включають:
   - `themes/docsy`, тема Docsy
   - `content-modules/*`, субмодулі OpenTelemetry

2. Цільова версія (для кожного субмодуля або всіх):
   - Конкретний тег або коміт
   - `latest` для останнього тегованого релізу
   - `HEAD` для голови гілки за замовчуванням

## Процес {#process}

1. Запустіть `npm run update:submodule`.

   > Отримує теги та переключає кожен субмодуль на стандартну вершину гілки віддаленого репозиторію, щоб значення pin можна було визначити локально на наступному кроці.

2. Для кожного субмодуля визначте нове значення pin з цільової версії, виконуючи команди git всередині субмодуля:
   - **Конкретний тег або коміт**: використовуйте його як дано, після перевірки, що він існує за допомогою `git rev-parse --verify <tag-or-commit>`, який виводить відповідний SHA, коли він дійсний.

     > Щоб побачити список дійсних тегів, виконайте `git tag --list`.

   - **Останній реліз**: `git describe --tags --abbrev=0`
   - **HEAD**: SHA[^sha] для `HEAD`

   Для commit pins, включаючи `HEAD`:
   - Якщо [`git describe --tags`][git-describe] `<commit>` успішно виконується, використовуйте його вихід як pin, оскільки він передає найближчий реліз -- наприклад, `v1.23.0-11-gca090204` проти `ca090204`.
   - Інакше використовуйте SHA[^sha] для `<commit>`.

3. Змініть значення `*-pin` субмодуля в [.gitmodules][].
4. Запустіть `npm run pin:submodule`, щоб переключити субмодулі на їх нові pin, і перевірте, що повідомлені ревізії (також доступні через `git submodule`) відповідають pin.
5. Зробіть commit змін у `.gitmodules` та gitlink(s) субмодуля. Використовуйте повідомлення commit, наприклад "Update `<submodule>` to `<version>`" для оновлень одного модуля або щось подібне для інших випадків. Commit зараз запобігає наступному кроку скидання субмодулів до їх раніше збережених gitlink.
6. Запустіть `npm run prepare`, щоб оновити залежності субмодулів. Зробіть commit будь-яких результатів змін, за потреби доповнюючи попередній commit.

Перевірка:

- Для швидкої перевірки запустіть `npm run build` і переконайтеся, що він виконується без помилок або (неочікуваних) попереджень.
- Для комплексної перевірки запустіть `npm run test` і переконайтеся, що він проходить без помилок.

[^sha]: Повний SHA іноді необхідний, але зазвичай достатньо короткого SHA.

[.gitmodules]: https://github.com/open-telemetry/opentelemetry.io/blob/main/.gitmodules
[git-describe]: https://git-scm.com/docs/git-describe
