# Создание аккаунта и репозитория в СКВ gihtub

1. Создать аккаунт на https://kolei.ru

    * логин - первая буква имени и фамилия в латинице. Например, логин для "Евгений Колесников" будет **ekolesnikov**
    * пароль произвольный

2. Создать репозиторий на `kolei.ru` НЕ ДОБАВЛЯЯ В НЕГО README.MD

3. Инициализировать новый репозиторий на компьютере (создать отдельный каталог):

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

    1. Запускаем на локальном компьютере программу `cmd`

        Откроется черное окно консоли, в которой будет написан текущий каталог, для винды это каталого пользователя, обычно это `c:/users/user`

    1. Создаем каталог для проекта командой `mkdir <имя каталога>`, например

        ```
        mkdir skv
        ```

    1. Переходим в этот каталог командой `cd <имя каталога>`

        ```
        cd skv
        ```

    1. Текущий каталог должен быть примерно таким: `c:/users/user/skv`

    

    Все необходимые команды написаны в репозитории после создания, но надо понимать что они делают и когда их выполнять:

    * Команда `git init` создает в ТЕКУЩЕМ каталоге новый локальный репозиторий (выполняется один раз):

        ```
        git init
        ```

    * Прежде чем добавлять файлы в репозиторий нужно создать в корне репозитория файл `.gitignore` и записать туда игнорируемые файлы и каталоги.

        Для `C#` там надо написать:

        ```
        # в каталогах bin и obj записываются скомпилированные файлы
        */bin/
        */obj/
        # в каталоге .vs хранятся локальные настройки VisualStudio
        .vs/
        # в каталоге packages хрянятся зависимости
        packages/
        ```

    * Для записи коммитов в репозиторий пользователь должен быть идентифицирован. Для этого выполните команды (один раз для репозитория):

        ```
        git config user.name "Ваше имя"
        git config user.email "Ваша почта"
        ```

        >Если вы работаете дома, то можете один раз выполнить эти команды с флагом `--global`

    * В колледже используется прокси, из-за которого **git** может ругаться на не верный сертификат. В этом случае отключите проверку сертификата:

        ```
        git config --global http.sslVerify false
        ```

    * Команда `git add <имя файла>` помечает файл как отслеживаемый системой контроля версий. Вместо конкретного имени можно указать "." (символ точки), чтобы добавить в отслеживаемые все изменившиеся файлы. Выполняется перед каждым коммитом.

        ```
        git add .
        ```

    * Команда `git commit` сохраняет отслеживаемые файлы в локальный репозиторий. Выполняется при завершении какого-то законченного атомарного действия (создали класс, написали функцию...)

        ```
        git commit -m "текст комментария"
        ```

    * Команда `git remote add <алиас> <url>` добавляет в настройки локального репозитория ссылку на внешний репозиторий. Выполняется один раз для каждого внешнего репозитория (их может быть более одного).

        ```
        git remote add origin <ссылку на проект копируйте из внешнего репозитория>
        ```

    * Команда `git push [-u] <алиас внешнего репозитория> <название ветки>` отправляет содержимое локального репозитория в указанный внешний репозиторий. Ветка по-умолчанию в **Git**-е: *master*. Ключ `-u` задает комбинацию алиас + внешний репозиторий по-умолчанию, т.е. в следующий раз можно использовать просто каоманду `git push`.

        ```
        git push origin master
        ``` 

    * если на компьютере установлен **credential manager**, то он может запоминать последнего пользователя и не разрешить запись в другой репозиторий. В этом случае удаляем его из системы:

        ```
        git config --system --unset credential.helper
        ```

    * для **GOGS** (что-то с буфером передачи)

        ```
        git config --global http.postBuffer 157286400    
        ```

4. Исследовать команды, описанные в [лекции](./skv.md#базовые-команды-git). Команды и возвращаемый результат записать в `readme.md`, используя формат **MarkDown**.

    Команды, которые надо выполнить и сохранить логи работы помечены значком `🕮`

    * куски кода или консольный ввод/вывод в MarkDown-е обозначаются тройными обратными кавычками:

        \`\`\`
        ```    
        Здесь кусок кода
        ```    
        \`\`\`

6. Результаты опубликовать в репозитории, созданном в п.2 и скинуть ссылку в чат.

[Пример выполнения](./skv_lab_example.md)