# Использование распределенных систем управления
## Что это
Под распределенной системой управления понимают программное обеспечение, которое позволяет эффективно версионировать результат работы над программой/библиотекой/рефератом/т.д.
В ряд популярных систем попадают следующие
- [git](https://git-scm.com/)
- [svn](https://tortoisesvn.net/), [классная презентация](https://mipt.ru/drec/about/ilab/upload/47e/f_4vj6ui-arpgiu3b1ja.pdf)
- [mercury](https://www.mercurial-scm.org/wiki/HgSubversion)
Для ознокомления предлагается использовать git
## Для чего это
Система версионирования обладает явными плюсами, которые станут ясны с опытом. Перечислим преимущества в следующем списке:
1. Хранение различных версий состояния проекта
- Не надо все сохранять в различных папках при каждом следующем изменении
- Легко перейти к состоянию до определенного изменения
2. Удобство совместного доступа и разработки
- Ваши изменения может каждый увидеть и притянуть себе
3. Легко вернуться в будущем к разработке уже на новом устройстве
## Как использовать
Большинство сред разработки уже *из коробки* поддерживают системы контроля версия. Не составляет трудности найти соответствующие инструкции:
- PyCharm: [eng](https://www.jetbrains.com/help/pycharm/2022.2/set-up-a-git-repository.html), [ru](https://russianblogs.com/article/66001065916/)
- VSCode: [eng](https://code.visualstudio.com/docs/editor/versioncontrol), [ru](https://docs.microsoft.com/ru-ru/training/modules/introduction-to-github-visual-studio-code/)
Разберемся подробно в процессе создания репозитория и контроля версий.
1. Требуется создать аккаунт на [GitHub](https://github.com/).
- Для этого вам понадобится рабочая почта
- Придумайте никнейм, с которым не будет стыдно работать
- На почту должно придти подтверждение аккаунта
2. Залогинтесь и создайте свой первый репозиторий. Название его должно быть схоже с `python_2022` или же `infa_2022`, и т.д.
3. **Кто использует git в консоли**: Создайте token для использования в аудитории. Для этого надо нажать на иконку аккаунта в правом верхнем углу и перейти в `Settings>Developer settings>personal access token`. На появившейся странице создаете токен с правом на чтение и запись (первый большой пункт) и сохраняете его
4. Скопируйте репозиторий на свою рабочую машину (ноутбук, компьютер в классе). Делается это командой `git clone link.to.your.repo.git`
5. В своем репозитории создайте директорию (папку) второго занятия `classwork02`. Поместите туда ноутбук и задачи прошлого занятия.
- Название ноутбука оставьте оригинальным
- Задачи назовите `A.py`, `B.py`, `C.py`
6. Затем вам нужно ввести в систему версионирования свое ФИ и почту. Делается это командами `git config --global user.name "Your Name"`, `git config --global user.email "mail@example.com"`
7. После этого добавляем файлы в систему git с помощью команды `git add classwork02`
8. Фиксируем изменения с помощью команды `git commit -m "Short message"`. `"Short message"` -- описание ваших изменений. Оно должно кратко передавать суть вашего коммита
9. И *пушим* изменения в удаленный репозиторий `git push`. В качестве username может быть запрошено имя вашего аккаунта или же почта. В качестве пороля используйте токен из третьего пункта
Список команд для первой настройки
```bash=
git clone link.to.your.repo.git
git config --global user.name "Your Name"
git config --global user.email "mail@example.com"
git add classwork02
git push
```
При повседневном использовании вам пригодятся следующие команды
```bash=
git add path/to/your/file
git commit -m "Short message"
git push
```