P

proj_c_01

📘 Инструкция для студентов: выполнение заданий в репозитории 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

  1. Зайдите на https://hub.mos.ru
  2. Нажмите на свой аватар → Preferences → SSH Keys (или прямая ссылка: https://hub.mos.ru/-/profile/keys)
  3. Нажмите "Add new key"
  4. Вставьте скопированный ключ в поле "Key"
  5. В поле "Title" напишите, например, Мой ноутбук
  6. Нажмите "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. Выполните задание

  1. Откройте файл с заданием (например, task01/main.py)
  2. Напишите код решения
  3. Сохраните файл

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 (запрос на слияние)

  1. Откройте в браузере репозиторий: https://hub.mos.ru/ncfu/2526_itp/proj_c/proj_c_01
  2. Нажмите на вкладку "Merge Requests" → "New merge request"
  3. Выберите:
    • Source branch → ваша ветка (например, task01_surname)
    • Target branch → main
  4. Нажмите "Compare branches and continue"
  5. Заполните форму:
    • Title: описание работы (например, "Лабораторная работа №1")
    • Description: что сделано, какие сложности были
  6. Нажмите "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"

📞 Вопросы?

Если возникли проблемы — пишите в общий чат. При описании проблемы обязательно указывайте:

  1. Текст команды, которую выполняли
  2. Полный вывод ошибки
  3. Результат git status и git branch