update authored by Administrator's avatar Administrator
...@@ -10,7 +10,7 @@ Git решает эту задачу, используя **подмодули**. ...@@ -10,7 +10,7 @@ Git решает эту задачу, используя **подмодули**.
## Начало использования подмодулей ## Начало использования подмодулей
Предположим, вы хотите добавить новую кастомизацию cust-ibank-fl-newbank в суперпроект ibank_root. Первое, что требуется сделать, это клонировать внешний репозиторий cust-ibank-fl-newbank в подкаталог супер-репозитория ibank_root. Добавление внешних проектов в качестве подмодулей делается командой `git submodule add`: Предположим, вы хотите добавить новую кастомизацию cust-ibank-fl-newbank в суперпроект ibank_root. Первое, что требуется сделать, это клонировать внешний репозиторий cust-ibank-fl-newbank в подкаталог суперрепозитория ibank_root. Добавление внешних проектов в качестве подмодулей делается командой `git submodule add`:
``` ```
>git submodule add git@source.isimplelab.com:ibank/cust-ibank-fl-newbank.git cust-ibank-fl-newbank >git submodule add git@source.isimplelab.com:ibank/cust-ibank-fl-newbank.git cust-ibank-fl-newbank
Initialized empty Git repository in ibank_root/cust-ibank-fl-newbank/.git/ Initialized empty Git repository in ibank_root/cust-ibank-fl-newbank/.git/
...@@ -84,3 +84,16 @@ Submodule path 'cust-ibank-fl-newbank': checked out '08d709f78b8c5b0fbeb7821e37f ...@@ -84,3 +84,16 @@ Submodule path 'cust-ibank-fl-newbank': checked out '08d709f78b8c5b0fbeb7821e37f
``` ```
Либо создавайте ветвь, когда работаете в каталоге подмодуля с использованием команды `git checkout -b <имя ветки>`. Либо создавайте ветвь, когда работаете в каталоге подмодуля с использованием команды `git checkout -b <имя ветки>`.
Когда вы сделаете обновление подмодуля командой submodule update в следующий раз, она откатит вашу работу, но у вас будет указатель для возврата назад. Когда вы сделаете обновление подмодуля командой submodule update в следующий раз, она откатит вашу работу, но у вас будет указатель для возврата назад.
Распространённая проблема возникает, когда разработчик делает изменения в своей локальной копии подмодуля, но не отправляет их на общий сервер. Затем он создаёт коммит содержащий указатель на это непубличное состояние и отправляет его в суперрепозиторий.
Когда другие разработчики пытаются выполнить git submodule update, система работы с подмодулями не может найти указанный коммит, потому что он существует тольков системе первого разработчика.
Если такое случится, вы увидите ошибку вроде этой:
```
>git submodule update
fatal: reference isn’t a tree: 6c5e70b984a60b3cecd395edd5b48a7575bf58e0
Unable to checkout '6c5e70b984a60b3cecd395edd5ba7575bf58e0' in submodule path 'cust-ibank-newbank'
```
Существует два возможных способа устранения данной проблемы.
1. Сообщение разработчику, который добавил ссылку на подмодуль в суперпроект, но не запушил коммит или подмодуль в публичный репозиторий, о необходимости опубликовать свои наработки.
2. Удаление ссылки на подмодуль из суперрепозитория. Этот метод более радикальный и его стоит применять только если невозможно связаться с первым разработчиком, а рабочее окружение нужно уже сейчас.
\ No newline at end of file