# Visual Studio + GitHub

Инструкция по настройке GitHub в CLion для клонирования и работы с репозиториями курса.

{% stepper %}
{% step %}
## GitHub в VS

<figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-2937cfa301311dfc0bc7682e3962a3f7a3fec777%2Fvs-gh-auth.png?alt=media" alt=""><figcaption><p>GitHub Auth</p></figcaption></figure>
{% endstep %}

{% step %}
## Clone repository

Выбираем из стартового меню или из открытой VS опцию `Clone repository`.

| <div><figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-db1350fcd89a3a356571e1f03399da1589922c2e%2Fvs-gh-clone-repo-start.png?alt=media" alt=""><figcaption><p>Clone repository из стартового меню</p></figcaption></figure></div> | <div><figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-ab02ba6382580335e95b5cfa7ce4007cf75795ee%2Fvs-gh-clone-repo-gui.png?alt=media" alt=""><figcaption><p>Clone repository из открытой IDE</p></figcaption></figure></div> |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

В появившемся меню либо вводим в `Repository location` URL репозитория, либо через опцию `GitHub` находим репозиторий.

<figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-8a14d2595120fe37009d5d3a186ed115696f7e52%2Fvs-gh-clone-repo.png?alt=media" alt=""><figcaption><p>Clone repository из стартового меню</p></figcaption></figure>

Указанный в `Path` путь будет автоматически дополнен названием репозитория как конечной директорией. При желании его можно сменить.
{% endstep %}

{% step %}
### Views

В Visual Studio в обозревателе решений (Solution Explorer) имеется возможность посмотреть на своё [Решение](../../../build/build-systems/project-solution) как на **Директорию с файлами** = `Folder View`, так и на **решение с проектами VS** = `Solution View`.

Изначально у нас не будет **Solution**, поэтому имеется только отображение `Folder view`.

| <div><figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-e4819ee5220a4382809df1b796672f2ec89c50d6%2Fvs-views.png?alt=media" alt=""><figcaption><p>Views</p></figcaption></figure></div> | <div><figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-788636ffc5ccd252f7279fcdcd2c9faef364aa68%2Fvs-views-folder-after-clone.png?alt=media" alt=""><figcaption><p>Folder view</p></figcaption></figure></div> |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Убедитесь, что клонирование произошло успешно и вы находитесь на нужной ветке

<figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-8b47f5fddb17cb9951219653e6894a8f19e68a59%2Fvs-git-branch.png?alt=media" alt=""><figcaption><p>Repo branch</p></figcaption></figure>
{% endstep %}

{% step %}
## Project from existing code

Теперь можно создать проект в текущем репозитории. Для этого выбираем `File` -> `New` -> `Project from existing code`:

<figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-8bfed72c573e5f6ff7ce9f0bb237ff3c5ed5a2a0%2Fvs-project-in-repo.png?alt=media" alt=""><figcaption></figcaption></figure>

В появившемся меню настройки проекта выбираем следующие опции:

1. `Project type` = `Visual C++` {next}
2. `Project file location` = <путь до склонированного репозитория>
3. `Project name` = <название проекта, файлов VS для этого проекта> {next}
4. `Build system` = `Use Visual Studio` (т.к. текущих файлов в репозитории для систем сборки нет)
5. `Project type` = `Console application` {next}
6. Debug/Release - пропускаем, данные настройки можно установить позже. {finish}

По окончании настройки проекта в обозревателе решений будет отображаться `Folder View` и созданный проект:

<figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-d77398f03e69b595b74291b48e6954dc24359c46%2Fvs-views2.png?alt=media" alt=""><figcaption><p>Views</p></figcaption></figure>
{% endstep %}

{% step %}
## One file project

В случае, когда нет чётко заданной структуры проекта и программа должна/может быть представлена одним файлом с исходным кодом, то достаточно будет создать новый файл с исходным кодом в `Solution view`.

Для этого ПКМ по проекту -> `Add` -> `New item`. В появившемся окне прописываем полное название файла с его расширением. VS по расширению файла определяет язык (С или С++). Соответственно все файлы с исходным кодом на С должны быть с расширением `.c`, С++ – `.cpp`.

При добавлении в `Solution view` файл будет автоматически отфильтрован в `Source files`, а в `Folder view` будет отображаться как файл в корне репозитория.

| <div><figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-d78a7eb607facbfb6a47c8a23827bb1176e8a045%2Fvs-solution-view-mainc.png?alt=media" alt=""><figcaption><p>Solution view</p></figcaption></figure></div> | <div><figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-46c0bed09d7248d4c3567966dbd39dd27fe22031%2Fvs-folder-view-mainc.png?alt=media" alt=""><figcaption><p>Folder view</p></figcaption></figure></div> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
{% endstep %}

{% step %}
## Git changes

В окне **Git changes** будет отображаться информация о добавлении и изменении файлов.

Подробнее о функционале данного раздела можно почитать на основном сайте: https://learn.microsoft.com/en-us/visualstudio/version-control/git-make-commit?view=vs-2022
{% endstep %}

{% step %}
## Project Layout

В проектах, где исходники представлены более, чем одним файлом, можно подходить к вопросу организации кода следующим образом.

В `Folder View` создать необходимые директории, а в них – файлы. В примере ниже были созданы 2 директории для заголовочных файлов и файлов с исходным кодом.

В `Solution view` добавляем через `Add existing items` созданные интересующие нас файлы в проект VS.

| <div><figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-6a3a15bee4a8ba50d7e485c8b72ce91667684b91%2Fvs-folder-view-simple-layout.png?alt=media" alt=""><figcaption></figcaption></figure></div> | <div><figure><img src="https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-4fe5bb6d387557ffacb0052110a23918d4b849ab%2Fvs-solution-view-simple-layout.png?alt=media" alt=""><figcaption></figcaption></figure></div> |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
{% endstep %}
{% endstepper %}
