0. Введение в Git¶
Предупреждение
Максимальная оценка за работу — 1 балл. Срок выполнения — 1 неделя. Невыполненная или выполненная частично работа оценивается в 0 баллов без возможности пересдачи.
Цель работы¶
Установить необходимое для работы ПО: git, текстовый редактор, clang-format.
Выполнить базовую настройку рабочего окружения.
Создать репозиторий с приложением «Hello, World», выполнить несколько коммитов, загрузить результат на GitHub.
Для получения инструкций по выполнению лабораторных работ смотрите раздел Руководство
Подготовка к работе¶
Для выполнения работы необходимо изучить следующий материал из книги Pro Git:
Вам понадобятся следующие команды:
git clone — клонирование удаленного репозитория.
git config — установка и получение глобальных или локальных параметров.
git status — просмотр состояния файлов в локальном репозитории.
git log — просмотр истории изменений.
git add — индексация файлов.
git commit — создание коммита.
git push — обновление ссылок в удаленном репозитории.
Все работы выполняются в командной строке, в ОС Gnu/Linux. Основы работы в командной строке см. в Лабораторная работа 0. Знакомство с ОС GNU/Linux.
Полезные утилиты:
man(1) — просмотр документации.
Пример:
man ls
mkdir(1) — создание каталога.
Пример:
# Создание каталога myproject mkdir myproject # Создание каталога d и всех родительских каталогов # при необходимости mkdir -p a/b/c/d
cd — изменение рабочего каталога. Описание команды расположено в man-странице bash(1).
Пример:
# Переход в каталог myproject cd myproject # Переход в домашний каталог cd
ls(1) — просмотр списка файлов.
touch(1) — создание файла.
Руководство¶
Для создания репозитория пройдите по ссылке ЛР0: hw и выберите себя в списке. Если вас нет в списке, обратитесь к преподавателю практики.
Для вас будет создан репозиторий с именем вида
hw-<username>
. Склонируйте его с помощью команды git clone$ git clone https://github.com/trpo2023/hw-<username>
Проверьте наличие репозитория в домашнем каталоге:
$ ls
Перейдите в локальный репозиторий для дальнейшей работы:
$ cd hw-<username>
Для фиксации изменений в репозитории нужно указать свои имя и email. Подробности см. в 1.6 Getting Started - First-Time Git Setup. Обратите внимание, в каком файле хранятся параметры после их установки. Если вы не хотите публиковать свой email, ознакомьтесь с руководством: Setting your commit email address.
Возможный вид команд:
$ git config user.email <username>@users.noreply.github.com $ git config user.name "Ivan Ivanov"
Разработайте приложение «Hello, World». Выполните работу в несколько коммитов.
В склонированном репозитории создайте пустой файл
main.c
. В каком состоянии он находится? Для просмотра состояния используйте команду git status.Проиндексируйте пустой файл
main.c
. Используйте команду git add. В каком состоянии находится файл?Зафиксируйте изменения с помощью команды git commit. В заголовке коммита укажите: «Create empty main.c».
$ git commit -m "Create empty main.c"
После создания коммита выполните команду git status, объясните вывод. Выполните команду git log, объясните вывод. Обратите внимание, что локальная ветка
main
теперь опережает удаленнуюorigin/main
на один коммит.Напишите функцию
main
:int main() { return 0; }
Проверьте состояние файла
main.c
.Проиндексируйте файл
main.c
. Создайте еще один коммит. В заголовок коммита добавьте сообщение, отражающее внесённое изменение. Посмотрите историю изменений.По аналогии добавьте вывод сообщения «Hello, World». Приложение должно компилироваться с опцией
-Wall
без ошибок и предупреждений.$ gcc -Wall -o main main.c
Проверьте вывод сообщения:
$ ./main
Проиндексируйте файл
main.c
. Создайте еще один коммит. Посмотрите историю репозитория.
В лабораторных работах и курсовом проекте требуется соблюдение code style. Для автоматического форматирования исходников можно использовать утилиту clang-format. Скачайте конфиг
.clang-format
в корень репозиторияhw-<username>
. Обратите внимание, что имя файла должно начинаться с точки. Для скачивания конфига воспользуйтесь командой:wget https://csc-software-development.readthedocs.io/ru/2023/_static/.clang-format
Убедитесь, что конфиг находится в репозитории, выполнив команду:
$ ls -a
Теперь файл
.clang-format
можно закоммитить:$ git add .clang-format $ git commit -m "Import .clang-format config"
Установите в систему clang-format. Настройте свой текстовый редактор так, чтобы форматирование исходников выполнялось при сохранении файла. Убедитесь, что автоматическое форматирование работает.
Для настройки текстового редактора
gedit
на учебных компьютерах, откройте редактор, выполнив команду:$ gedit &
И следуйте инструкции.
Для настройки беспарольного взаимодействия с удаленным репозиторием, необходимо создать следующий конфиг:
$ mkdir ~/.ssh $ vim ~/.ssh/config Host github.com Hostname ssh.github.com Port 443
Для выхода из редактора vim используйте
Esc
+:wq
Для загрузки локальных изменений без ввода логина и пароля учетной записи на GitHub cгенерируйте SSH-ключ, выполнив команду ssh-keygen в терминале:
$ ssh-keygen
Пропустите предлагаемый ввод, нажимая клавишу Enter до тех пор, пока команда
ssh-keygen
не завершит работу.Скопируйте содержимое файла
/home/<username>/.ssh/id_rsa.pub
$ cat /home/<username>/.ssh/id_rsa.pub
Создайте SSH-ключ в настройках учетной записи на GitHub:
Settings → SSH and GPG keys → New SSH key
В качестве Title введите Study
В поле Key вставьте скопированный публичный ключ
Add SSH key
Скопируйте SSH-ссылку на созданный репозиторий ЛР0: hw
Выполните команду:
$ git remote -v
Проанализируйте вывод. Далее выполните:
$ git remote set-url origin git@github.com:trpo2023/hw-<username>.git $ git remote -vЧто изменилось?
Загрузите изменения в удаленный репозиторий с помощью команды git push. Посмотрите историю изменений. Убедитесь, что локальная ветка
main
и удаленнаяorigin/main
указывают на один и тот же коммит.Передайте выполненное задание на ревью преподавателю практики. Для этого:
Откройте в браузере страницу репозитория.
На вкладке Pull requests перейдите в Feedback. Этот Pull request создан автоматически. Не закрывайте и не вливайте его. В лабораторных и курсовых он должен оставаться открытым.
В поле Reviewers выберите своего преподавателя.
Если ревью было пройдено со статусом Changes requested, исправьте замечения и запросите повторное ревью.
Полезные ссылки для настройки текстового редактора:
Официальная документация ClangFormat содержит информацию по настройке vim и emacs.
Vim: плагин rhysd/vim-clang-format (не проверялся)
Visual Studio Code: Code Formatting — официальная документация.
Atom — clang-format — плагин для редактора Atom. Может потребовать дополнительной настройки.
SublimeClangFormat — плагин для Sublime Text.
gedit-plugin-clang-format (не проверялся)
Настройка clang-format на ПК в аудиториях¶
В аудиториях вам доступны редакторы: vim, emacs, gedit. Из них наиболее низкий порог входа у gedit.
Gedit не поддерживает возможность автоматического форматирования файла при сохранении. Плагин из списка выше форматирует файл только при нажатии сочетания Alt+Shift+F или любого другого выбранного вами.
Если добиться работоспособности плагина не удалось, есть альтернативный способ подключения clang-format к gedit.
Включить плагин «Внешние инструменты»: Меню → Параметры → Модули, отметить плагин «Внешние инструменты».
Меню → Управление внешними инструментами → Add a new tool (+).
Заполнить поля (см. скриншот):
Известная проблема: при форматировании документа редактор выполняет прокрутку к началу файла.
Контрольные вопросы¶
Где хранятся настройки git?
Как просмотреть состояния файлов в репозитории?
Заключение¶
Работа считается выполненной, если:
У вас установлено и настроено необходимое ПО.
Создан репозиторий
hw-<username>
, в котором находится исходный код программы. Приложение компилируется с опциями-Wall -Werror
. Веткаmain
запушена в удаленный репозиторий.В репозитории есть конфиг
.clang-format
. В вашем текстовом редакторе настроено автоматическое форматирование исходного кода с использованием этого конфига. Исходный код приложения отформатирован.Работа выполнена в несколько коммитов, все действия по индексации файлов, созданию коммитов и загрузке в удаленный репозиторий выполнялись в командной строке.
В репозитории нет лишних файлов (артефактов сборки, таких как исполняемые или объектные файлы, локальных настроек текстового редактора и т. д.).