📘 Инструкция для студентов: выполнение заданий в репозитории proj_c_01
🎯 Цель работы
Научиться работать с Git и системой контроля версий на примере выполнения лабораторных работ в репозитории proj_c_01.
📋 Предварительные требования
На вашем компьютере должны быть установлены:
| Программа | Версия | Проверка установки |
|---|---|---|
| Git | 2.20+ | git --version |
| SSH-клиент | (встроен в Linux/macOS, Git Bash для Windows) | ssh -V |
| Текстовый редактор | Любой (VS Code, Sublime, Notepad++, nano и др.) | — |
🔐 Шаг 1: Настройка SSH-ключа для доступа к Mos.Hub
Mos.Hub использует SSH-ключи для безопасного подключения без пароля.
1.1. Сгенерируйте SSH-ключ
Откройте терминал (Linux/macOS) или Git Bash (Windows) и выполните:
ssh-keygen -t rsa -b 4096 -C "ваш_email@пример.com"
Что делать при запросах:
-
Enter file in which to save the key→ просто нажмите Enter -
Enter passphrase→ можно нажать Enter (оставить пустым) или придумать пароль
1.2. Скопируйте публичный ключ
cat ~/.ssh/id_rsa.pub
Скопируйте всю строку (начинается с ssh-rsa AAA...).
1.3. Добавьте ключ на Mos.Hub
- Зайдите на
https://hub.mos.ru - Нажмите на свой аватар → Preferences → SSH Keys (или прямая ссылка:
https://hub.mos.ru/-/profile/keys) - Нажмите "Add new key"
- Вставьте скопированный ключ в поле "Key"
- В поле "Title" напишите, например,
Мой ноутбук - Нажмите "Add key"
1.4. Проверьте подключение
ssh -T git@hub.mos.ru
Если всё настроено правильно, увидите:
Welcome to GitLab, @ваш_логин!
📥 Шаг 2: Клонирование репозитория
Скопируйте репозиторий к себе на компьютер:
git clone git@hub.mos.ru:ncfu/2526_itp/proj_c/proj_c_01.git
После выполнения в текущей папке появится директория proj_c_01.
Перейдите в неё:
cd proj_c_01
📁 Шаг 3: Структура репозитория
proj_c_01/
├── README.md # инструкции
├── tasks.md # описание проекта и заданий
├── task01/ # задание №1
│ ├── README.md # условие задачи
│ └── main.py # файл для решения (пустой или с шаблоном)
├── task02/ # задание №2
│ └── ...
└── .gitignore # файлы, которые Git игнорирует
✏ ️ Шаг 4: Выполнение задания
4.1. Создайте отдельную ветку для работы
Важно: Никогда не делайте изменения прямо в ветке main!
# Создаём и переключаемся на новую ветку
git checkout -b task01_surname
Название ветки должно быть понятным, например: task01_ivanov, lab1_petrov.
4.2. Выполните задание
- Откройте файл с заданием (например,
task01/main.py) - Напишите код решения
- Сохраните файл
4.3. Проверьте, что изменения работают
Скомпилируйте и запустите программу (для языка C):
gcc task01/main.py -o solution
./solution
4.4. Сохраните изменения в Git
# Добавляем изменённые файлы
git add task01/main.py
# Создаём коммит с понятным сообщением
git commit -m "task01: реализована функция сортировки"
📤 Шаг 5: Отправка работы на проверку
5.1. Отправьте ветку на сервер
git push origin task01_surname
5.2. Создайте Merge Request (запрос на слияние)
- Откройте в браузере репозиторий:
https://hub.mos.ru/ncfu/2526_itp/proj_c/proj_c_01 - Нажмите на вкладку "Merge Requests" → "New merge request"
- Выберите:
-
Source branch → ваша ветка (например,
task01_surname) -
Target branch →
main
-
Source branch → ваша ветка (например,
- Нажмите "Compare branches and continue"
- Заполните форму:
- Title: описание работы (например, "Лабораторная работа №1")
- Description: что сделано, какие сложности были
- Нажмите "Create merge request"
5.3. Дождитесь проверки
Преподаватель увидит ваш Merge Request, проверит код и оставит комментарии. При необходимости вы можете обновить код — новые коммиты автоматически добавятся в тот же Merge Request.
🔄 Шаг 6: Обновление репозитория (если преподаватель внёс изменения)
Если преподаватель добавил новые задания или исправил ошибки, нужно обновить локальную копию:
# Переключаемся на ветку main
git checkout main
# Забираем изменения с сервера
git pull origin main
📌 Памятка: основные команды Git
| Команда | Назначение |
|---|---|
git clone <url> |
скопировать репозиторий |
git checkout -b <ветка> |
создать и переключиться на новую ветку |
git branch |
п# Created by https://www.toptal.com/developers/gitignore/api/python |
Edit at https://www.toptal.com/developers/gitignore?templates=python
Python
Byte-compiled / optimized / DLL files
pycache/ *.py[cod] *$py.class
C extensions
*.so
Distribution / packaging
.Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST
PyInstaller
Usually these files are written by a python script from a template
before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest *.spec
Installer logs
pip-log.txt pip-delete-this-directory.txt
Unit test / coverage reports
htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/
Translations
*.mo *.pot
Django stuff:
*.log local_settings.py db.sqlite3 db.sqlite3-journal
Flask stuff:
instance/ .webassets-cache
Scrapy stuff:
.scrapy
Sphinx documentation
docs/_build/
PyBuilder
.pybuilder/ target/
Jupyter Notebook
.ipynb_checkpoints
IPython
profile_default/ ipython_config.py
pyenv
For a library or package, you might want to ignore these files since the code is
intended to run in multiple environments; otherwise, check them in:
.python-version
pipenv
According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
However, in case of collaboration, if having platform-specific dependencies or dependencies
having no cross-platform support, pipenv may install dependencies that don't work, or not
install all needed dependencies.
#Pipfile.lock
poetry
Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
This is especially recommended for binary packages to ensure reproducibility, and is more
commonly ignored for libraries.
https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
pdm
Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
in version control.
https://pdm.fming.dev/#use-with-ide
.pdm.toml
PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
pypackages/
Celery stuff
celerybeat-schedule celerybeat.pid
SageMath parsed files
*.sage.py
Environments
.env .venv env/ venv/ ENV/ env.bak/ venv.bak/
Spyder project settings
.spyderproject .spyproject
Rope project settings
.ropeproject
mkdocs documentation
/site
mypy
.mypy_cache/ .dmypy.json dmypy.json
Pyre type checker
.pyre/
pytype static type analyzer
.pytype/
Cython debug symbols
cython_debug/
PyCharm
JetBrains specific template is maintained in a separate JetBrains.gitignore that can
be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
and can be added to the global gitignore or merged into this file. For a more nuclear
option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
Python Patch
Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
poetry.toml
ruff
.ruff_cache/
LSP config files
pyrightconfig.json
End of https://www.toptal.com/developers/gitignore/api/python
оказать список веток |
| git add <файл> | добавить файл в следующий коммит |
| git commit -m "сообщение" | сохранить изменения |
| git push origin <ветка> | отправить изменения на сервер |
| git pull origin main | получить изменения с сервера |
| git status | показать статус изменений |
| git log --oneline | показать историю коммитов |
❗ Частые ошибки и их решение
Ошибка: Permission denied (publickey)
Причина: не настроен SSH-ключ.
Решение: выполните шаг 1 (генерация и добавление ключа).
Ошибка: failed to push some refs
Причина: в удалённом репозитории есть изменения, которых нет у вас.
Решение:
git pull origin main
git push origin task01_surname
Ошибка: merge conflict
Причина: в одном файле одновременно изменили одну и ту же строку.
Решение: откройте файл, найдите строки с <<<<<<<, =======, >>>>>>>, оставьте нужный вариант, затем:
git add <файл>
git commit -m "resolve conflict"
📞 Вопросы?
Если возникли проблемы — пишите в общий чат. При описании проблемы обязательно указывайте:
- Текст команды, которую выполняли
- Полный вывод ошибки
- Результат
git statusиgit branch