0. Введение в Git

Предупреждение

Максимальная оценка за работу — 1 балл. Срок выполнения — 1 неделя. Невыполненная или выполненная частично работа оценивается в 0 баллов без возможности пересдачи.

Цель работы

  1. Установить необходимое для работы ПО: git, текстовый редактор, clang-format.

  2. Выполнить базовую настройку рабочего окружения.

  3. Создать репозиторий с приложением «Hello, World», выполнить несколько коммитов, загрузить результат на GitHub.

Для получения инструкций по выполнению лабораторных работ смотрите раздел Руководство

Подготовка к работе

Для выполнения работы необходимо изучить следующий материал из книги Pro Git:

  1. Getting Started

  2. Git Basics

Вам понадобятся следующие команды:

  1. git clone — клонирование удаленного репозитория.

  2. git config — установка и получение глобальных или локальных параметров.

  3. git status — просмотр состояния файлов в локальном репозитории.

  4. git log — просмотр истории изменений.

  5. git add — индексация файлов.

  6. git commit — создание коммита.

  7. git push — обновление ссылок в удаленном репозитории.

Все работы выполняются в командной строке, в ОС Gnu/Linux. Основы работы в командной строке см. в Лабораторная работа 0. Знакомство с ОС GNU/Linux.

Полезные утилиты:

  1. man(1) — просмотр документации.

    Пример:

    man ls
    
  2. mkdir(1) — создание каталога.

    Пример:

    # Создание каталога myproject
    mkdir myproject
    
    # Создание каталога d и всех родительских каталогов
    # при необходимости
    mkdir -p a/b/c/d
    
  3. cd — изменение рабочего каталога. Описание команды расположено в man-странице bash(1).

    Пример:

    # Переход в каталог myproject
    cd myproject
    
    # Переход в домашний каталог
    cd
    
  4. ls(1) — просмотр списка файлов.

  5. touch(1) — создание файла.

Руководство

  1. Для вас создан репозиторий https://git.csc.sibsutis.ru/trpo2024 Если репозитория нет, напишите об этом в преподавателю практики или в дискорд: сообщите группу, фамилию и кафедральную учетную запись.

  2. Склонируйте репозиторий с помощью команды git clone

    $ git clone https://git.csc.sibsutis.ru/trpo2024/<repo-name>
    

    Проверьте наличие репозитория в домашнем каталоге:

    $ ls
    

    Перейдите в локальный репозиторий для дальнейшей работы:

    $ cd <repo-name>
    
  3. Для фиксации изменений в репозитории нужно указать свои имя и 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». Выполните работу в несколько коммитов.

  1. В склонированном репозитории создайте пустой файл main.c. В каком состоянии он находится? Для просмотра состояния используйте команду git status.

  2. Проиндексируйте пустой файл main.c. Используйте команду git add. В каком состоянии находится файл?

  3. Зафиксируйте изменения с помощью команды git commit. В заголовке коммита укажите: «Create empty main.c».

    $ git commit -m "Create empty main.c"
    

    После создания коммита выполните команду git status, объясните вывод. Выполните команду git log, объясните вывод. Обратите внимание, что локальная ветка main теперь опережает удаленную origin/main на один коммит.

  4. Напишите функцию main:

    int main()
    {
        return 0;
    }
    

    Проверьте состояние файла main.c.

  5. Проиндексируйте файл main.c. Создайте еще один коммит. В заголовок коммита добавьте сообщение, отражающее внесённое изменение. Посмотрите историю изменений.

  6. По аналогии добавьте вывод сообщения «Hello, World». Приложение должно компилироваться с опцией -Wall без ошибок и предупреждений.

    $ gcc -Wall -o main main.c
    

    Проверьте вывод сообщения:

    $ ./main
    

Проиндексируйте файл main.c. Создайте еще один коммит. Посмотрите историю репозитория.

  1. В лабораторных работах и курсовом проекте требуется соблюдение code style. Для автоматического форматирования исходников можно использовать утилиту clang-format. Скачайте конфиг .clang-format в корень репозитория hw-<username>. Обратите внимание, что имя файла должно начинаться с точки. Для скачивания конфига воспользуйтесь командой:

    wget https://csc-software-development.readthedocs.io/ru/2024/_static/.clang-format
    

    Убедитесь, что конфиг находится в репозитории, выполнив команду:

    $ ls -a
    
  2. Теперь файл .clang-format можно закоммитить:

    $ git add .clang-format
    $ git commit -m "Import .clang-format config"
    

    Установите в систему clang-format. Настройте свой текстовый редактор так, чтобы форматирование исходников выполнялось при сохранении файла. Убедитесь, что автоматическое форматирование работает.

    Для настройки текстового редактора gedit на учебных компьютерах, откройте редактор, выполнив команду:

    $ gedit &
    

    И следуйте инструкции.

  3. Загрузите изменения в удаленный репозиторий с помощью команды git push. Посмотрите историю изменений. Убедитесь, что локальная ветка main и удаленная origin/main указывают на один и тот же коммит.

Полезные ссылки для настройки текстового редактора:

  1. Официальная документация ClangFormat содержит информацию по настройке vim и emacs.

  2. Vim: плагин rhysd/vim-clang-format (не проверялся)

  3. Visual Studio Code: Code Formatting — официальная документация.

  4. Atom — clang-format — плагин для редактора Atom. Может потребовать дополнительной настройки.

  5. SublimeClangFormat — плагин для Sublime Text.

  6. gedit-plugin-clang-format (не проверялся)

Настройка clang-format на ПК в аудиториях

В аудиториях вам доступны редакторы: vim, emacs, gedit. Из них наиболее низкий порог входа у gedit.

Gedit не поддерживает возможность автоматического форматирования файла при сохранении. Плагин из списка выше форматирует файл только при нажатии сочетания Alt+Shift+F или любого другого выбранного вами.

Если добиться работоспособности плагина не удалось, есть альтернативный способ подключения clang-format к gedit.

  1. Включить плагин «Внешние инструменты»: Меню → Параметры → Модули, отметить плагин «Внешние инструменты».

  2. Меню → Управление внешними инструментами → Add a new tool (+).

  3. Заполнить поля (см. скриншот):

_images/clang-format-gedit.png

Известная проблема: при форматировании документа редактор выполняет прокрутку к началу файла.

Контрольные вопросы

  1. Где хранятся настройки git?

  2. Как просмотреть состояния файлов в репозитории?

Заключение

Работа считается выполненной, если:

  1. У вас установлено и настроено необходимое ПО.

  2. Создан репозиторий, в котором находится исходный код программы. Приложение компилируется с опциями -Wall -Werror. Ветка main запушена в удаленный репозиторий.

  3. В репозитории есть конфиг .clang-format. В вашем текстовом редакторе настроено автоматическое форматирование исходного кода с использованием этого конфига. Исходный код приложения отформатирован.

  4. Работа выполнена в несколько коммитов, все действия по индексации файлов, созданию коммитов и загрузке в удаленный репозиторий выполнялись в командной строке.

  5. В репозитории нет лишних файлов (артефактов сборки, таких как исполняемые или объектные файлы, локальных настроек текстового редактора и т. д.).