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) — создание файла.
Руководство
Для вас создан репозиторий https://git.csc.sibsutis.ru/trpo2024 Если репозитория нет, напишите об этом в преподавателю практики или в дискорд: сообщите группу, фамилию и кафедральную учетную запись.
Склонируйте репозиторий с помощью команды git clone
$ git clone https://git.csc.sibsutis.ru/trpo2024/<repo-name>
Проверьте наличие репозитория в домашнем каталоге:
$ ls
Перейдите в локальный репозиторий для дальнейшей работы:
$ cd <repo-name>
Для фиксации изменений в репозитории нужно указать свои имя и 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/2024/_static/.clang-format
Убедитесь, что конфиг находится в репозитории, выполнив команду:
$ ls -a
Теперь файл
.clang-format
можно закоммитить:$ git add .clang-format $ git commit -m "Import .clang-format config"
Установите в систему clang-format. Настройте свой текстовый редактор так, чтобы форматирование исходников выполнялось при сохранении файла. Убедитесь, что автоматическое форматирование работает.
Для настройки текстового редактора
gedit
на учебных компьютерах, откройте редактор, выполнив команду:$ gedit &
И следуйте инструкции.
Загрузите изменения в удаленный репозиторий с помощью команды git push. Посмотрите историю изменений. Убедитесь, что локальная ветка
main
и удаленнаяorigin/main
указывают на один и тот же коммит.
Полезные ссылки для настройки текстового редактора:
Официальная документация 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?
Как просмотреть состояния файлов в репозитории?
Заключение
Работа считается выполненной, если:
У вас установлено и настроено необходимое ПО.
Создан репозиторий, в котором находится исходный код программы. Приложение компилируется с опциями
-Wall -Werror
. Веткаmain
запушена в удаленный репозиторий.В репозитории есть конфиг
.clang-format
. В вашем текстовом редакторе настроено автоматическое форматирование исходного кода с использованием этого конфига. Исходный код приложения отформатирован.Работа выполнена в несколько коммитов, все действия по индексации файлов, созданию коммитов и загрузке в удаленный репозиторий выполнялись в командной строке.
В репозитории нет лишних файлов (артефактов сборки, таких как исполняемые или объектные файлы, локальных настроек текстового редактора и т. д.).