# GitHub Desktop

В [предыдущей статье](https://ijunior-knowledge-base.gitbook.io/baza-znanii-yayunior/git-i-github/github) мы поняли, что `GitHub` это очень удобный сервис. Но если вы уже попробовали выложить туда свой проект, то могли заметить проблему - непонятно, как загрузить туда проект. Первое решение, которое вы могли найти, это кнопка загрузки файлов в главном окне просмотра репозитория:&#x20;

<figure><img src="https://2743800200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwxT0U6r7Plf4kYjtMJzB%2Fuploads%2FzLIMnSrE4g9vvEZ0eFcf%2Fimage.png?alt=media&#x26;token=4a189d7e-a1f4-4b51-ac82-93f6b282bf64" alt=""><figcaption><p>Кнопка загрзки файлов</p></figcaption></figure>

## Проблема ручной загрузки

Можем ли выкладывать проекты таким способом, вручную указывая файлы для загрузки? Теоретически, да. Но тогда теряется весь смысл `Git` - инструмента, вокруг которого построен `GitHub`, так как мы теперь вручную контролируем все файлы и не отслеживаем историю изменений. Было бы лучше работать с `Git` локально, на своем устройстве, а историю коммитов синхронизировать с `GitHub`. И это возможно!

На самом деле, `Git` дает возможность отправлять новые версии проекта на внешний сервер, в данном случае на `GitHub`. Это можно сделать с помощью консольного интерфейса.

Создаем и публикуем репозиторий:

```url
cd MyProject
git init
git remote add origin https://github.com/myaccount/myproject
```

Создаем новый коммит и отправляем его на `GitHub`:

```
git commit -m "Fixed all the bugs"
git push
```

Если привыкнуть, то все просто. Но часто у нас нет времени или возможности разобраться с консольным интерфейсом, поэтому мы рассмотрим другой способ - `GitHub Desktop`.

## GitHub Desktop

`GitHub Desktop` это приложение, которое связывает локальный проект с внешним сервером, обычно с `GitHub`. Другими словами, это графический интерфейс для `Git`, через который можно удобно синхронизировать историю коммитов с внешним сервером. Давайте создадим новый проект, выложим его на `GitHub` и с помощью `GitHub Desktop` загрузим на репозиторий обновленную версию проекта.

### Создание и настройка репозитория

Для начала создадим репозиторий локально. Для этого нужно открыть `GitHub Desktop` и перейти  в *File -> New repository...*

<figure><img src="https://2743800200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwxT0U6r7Plf4kYjtMJzB%2Fuploads%2F2481ugZu8ubK7WWbAqiv%2Fimage.png?alt=media&#x26;token=adba29cc-74a0-427c-9992-c2ce26b9ca94" alt=""><figcaption><p>Опция создания нового репозитория</p></figcaption></figure>

В окне создания репозитория нужно настроить несколько параметров:

{% tabs %}
{% tab title="Name" %}
Название репозитория. Есть ограничения по символам, например знак пробела заменяется на знак "-".
{% endtab %}

{% tab title="Description" %}
Описание репозитория. Необязательная, но полезная часть, где можно одним предложением описать суть проекта.
{% endtab %}

{% tab title="Local Path" %}
Локальный путь к репозиторию. Важно верно указать корневую директорию (папку) проекта, чтобы `Git` считывал изменения во всех файлах.
{% endtab %}

{% tab title="Git ignore" %}
Файл метаданных `.gitignore`, зачем он нужен мы рассмотрели в статье про [`GitHub`](https://ijunior-knowledge-base.gitbook.io/baza-znanii-yayunior/git-i-github/github). Предлагается множество вариантов для популярных движков и фреймворков. Есть и вариант для `Unity`, который мы будем использовать чаще всего.
{% endtab %}

{% tab title="License" %}
Файл с лицензией. Нужен в том случае, если вы публикуете проект для массового применения и хотите формально (законно) определить правила его использования. Предлагается множество популярных вариантов на выбор.
{% endtab %}
{% endtabs %}

<figure><img src="https://2743800200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwxT0U6r7Plf4kYjtMJzB%2Fuploads%2FwKO7xpKCAIg8E2SRBNCd%2Fimage.png?alt=media&#x26;token=6f5a3cb3-f794-4a80-9140-5eac4ee7c6b8" alt="" width="375"><figcaption><p>Параметры окна создания репозитория</p></figcaption></figure>

Если опция **Initialize this repository with a README** выбрана, то `GitHub Desktop` сам создаст файл **README.md**, который, как мы помним из статьи про [`GitHub`](https://ijunior-knowledge-base.gitbook.io/baza-znanii-yayunior/git-i-github/github), содержит в себе подробное описание репозитория для других пользователей.

Теперь репозиторий создан, но он существует только локально. Поэтому его нужно опубликовать, то есть отправить на `GitHub`. Для этого нужно нажать на кнопку сверху **"Publish repository":**

<figure><img src="https://2743800200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwxT0U6r7Plf4kYjtMJzB%2Fuploads%2FaoeEdJ6sR0eEcCDraQxa%2Fimage.png?alt=media&#x26;token=5adbc48a-d844-48e7-bb71-55b9d7e0b335" alt=""><figcaption><p>Кнопка публикации репозитория</p></figcaption></figure>

Нажав эту кнопку мы видим еще одно окно настроек со своими параметрами:

<div data-full-width="false"><figure><img src="https://2743800200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwxT0U6r7Plf4kYjtMJzB%2Fuploads%2FNHAnG7gbEh3mT4iqbi4E%2Fimage.png?alt=media&#x26;token=82a85b0a-8ac1-4443-a9a4-ca75c35b87b7" alt="" width="375"><figcaption><p>Параметры публикации репозитория</p></figcaption></figure></div>

Поля **Name** и **Description** здесь продублированы из предыдущего окна, но также появилось два новых поля.&#x20;

{% hint style="danger" %}
**ВНИМАНИЕ**

Очень важно корректно указать опцию **Keep this code private:**

1. Если эта опция **выбрана**, то репозиторий будет ***приватным***, то есть другие пользователи не смогут его увидеть.
2. Если эта опция **не выбрана**, то репозиторий будет ***публичным***, то есть все пользователи `GitHub` смогут его увидеть

Обращаю на это внимание, потому что студенты часто *по ошибке сдают ссылку на приватный репозиторий* в качестве домашнего задания, из-за чего мы его сразу отклоняем.
{% endhint %}

Поле **Organization** это опция выбора организации, в рамках которой вы публикуете этот проект. Для личных проектов это опция не важна.

Теперь репозиторий настроен и связан с `GitHub` - пора поместить в него наш проект. Заходим в `Unity` и создаем новый проект в папке репозитория.

{% hint style="warning" %}
Репозиторий можно создать и внутри готового проекта, но тогда важно убедиться, что он был создан в корневой папке, а не в новой.
{% endhint %}

Давайте откроем проект и доработаем его, настроив на нем сцену. Вернувшись в `GitHub Desktop` можно увидеть, что он обнаружил изменения в проекте:

<figure><img src="https://2743800200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwxT0U6r7Plf4kYjtMJzB%2Fuploads%2FuM1xbIUybm1cceKtnSaF%2Fimage.png?alt=media&#x26;token=f9e1a107-e95e-4e04-843d-10b0746820e7" alt=""><figcaption></figcaption></figure>

Так как мы только что создали проект и поработали над ним, множество файлов было создано и изменено, что нам и показывает `GitHub Desktop`. Закрепим текущий этап разработки новым коммитом:

<figure><img src="https://2743800200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwxT0U6r7Plf4kYjtMJzB%2Fuploads%2FW5r3SbHE7hpxP0ejEcNu%2Fimage.png?alt=media&#x26;token=ddbd53fb-5796-44a2-9a50-27aa7a1a0f83" alt=""><figcaption><p>Окно создания коммита</p></figcaption></figure>

Локально коммит сделан, не забываем отправить его на сервер:

<figure><img src="https://2743800200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwxT0U6r7Plf4kYjtMJzB%2Fuploads%2F63Ebq65DEaLjS3rH6fWo%2Fimage.png?alt=media&#x26;token=d4755da4-a3fd-4f6b-8c6d-bcc8643efd61" alt=""><figcaption><p>Кнопка отправки коммита на сервер</p></figcaption></figure>

Таким образом, мы связали локальный проект с сервером и все вносимые изменения можем в пару нажатий отправить на свой `GitHub` репозиторий - задача выполнена!
