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>@csc.sibsutis.ru
    $ 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 &
    

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

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

  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. В репозитории нет лишних файлов (артефактов сборки, таких как исполняемые или объектные файлы, локальных настроек текстового редактора и т. д.).