# GitLab

## Модель совместной разработки

Команда drupal.ru использует модель совместной разработки «Fork + Pull», в которой любой человек может сделать клон (fork, форк, копия) репозитория и сливать изменения в свой личный форк без необходимости иметь доступ к оригинальному репозиторию. Эта модель уменьшает количество телодвижений для новых контрибьюторов и популярна для open source проектов, так как позволяет людям работать независимо, без единого координирования.

### Локальная копия репозитория

На странице репозитория [https://gitlab.com/drupal.ru/7/](https://github.com/DrupalRu/drupal.ru/) нужно нажать кнопку «Fork» для того, чтобы создать форк.

На странице клона репозитория нужно нажать кнопку «Clone» и скопировать URL-адрес своего форка. Чтобы «стянуть» копию на свой компьютер необходимо ввести команду `git clone` и указать адрес своего форка:

```
git clone git@gitlab.com:<user>/<repo>.git
```

Например, я форкнул репозиторий drupal.ru, а затем сменил имя репо на dru7, чтобы в ссылка в моем GitLab-пространстве выглядела как <https://gitlab.com/avakorin/dru7>. Чтобы «стянуть» мой репо на компьютер, я  использую команду:

```
git clone git@gitlab.com:avakorin/dru7.git
```

Затем необходимо создать отсылку на «родительский» репозитарий, чтобы получать обновления:

```
git remote add upstream git@gitlab.com:drupal.ru/7.git
```

### Тестирование изменений, сделанных другим пользователем <a href="#testirovanie-izmenenii-sdelannykh-drugim-polzovatelem" id="testirovanie-izmenenii-sdelannykh-drugim-polzovatelem"></a>

Подключаем удаленный форк-репозиторий автора запроса на включение (pull request, PR, ПР, пулреквест)

```
git remote add <user> git@gitlab.com:<user>/<repo>.git
```

Получаем (извлекаем) всю информацию, которая есть в форк-репозитории автора запроса на включение

```
git fetch <user>
```

Делаем чекаут ветки, которая содержит изменения, отправленные в pull request

```
git checkout -b <branch> <user>/<branch>
```

Например, чтобы протестировать изменения, которые сделаны пользователем *avakorin* в ветке *issue-1200*, нужно:

```
git remote add avakorin git@gitlab.com:avakorin/dru7.git
git fetch avakorin
git checkout -b issue-1200 avakorin/issue-1200
```

### Отправка коммита в pull request другого человека

Подключаем удаленный форк-репозиторий автора запроса на включение

```
git remote add <user> git@gitlab.com:<user>/<repo>.git
```

Получаем (извлекаем) всю информацию, которая есть в форк-репозитории автора запроса на включение

```
git fetch <user>
```

Делаем чекаут ветки, которая содержит изменения, отправленные в pull request

```
git checkout -b <branch> <user>/<branch>
```

Вносим свои изменения в код, делаем коммит, затем отправляем изменения в исходную удаленную (remote) ветку форка автора pull request.

```
git push <user> <branch>
```

Например, чтобы отправить свои изменения в пулреквест, сделанный на основе ветки *issue-1158* форк-репозитория пользователя *ivnish*, нужно:

```
git remote add ivnish git@gitlab.com:ivnish/drupal.ru.git
git fetch ivnish
git checkout -b issue-1158 ivnish/issue-1158
# вносим изменения в код
git commit -m "#1158: <пояснительный текст для коммита>"
git push ivnish issue-1158
```

{% hint style="warning" %}
Отправка изменений в чужой пулреквест возможна только после включения автором форк-репозитория чекбокса «**Allow edits from maintainers**»  .
{% endhint %}
