02.14 Работа с git

  1. Правила работы с git, которые следует соблюдать при решении Д/З
    1. «Одно изменение — один коммит». Какие бывают изменения в Д/З?
      • Дописал недописанное
      • Исправил багу
      • Добавил тест
    2. «Дескриптивное описание»
      • Если изменение атомарно — достаточно однострочника
      • Если в нескольких файлах или изменение неатомарно (например, добавил тест, словил ошибку, сделал коммит с ошибкой и тестом) — нужно и атомарное, и развёрнутое описание

      • Также развёрнутое описание нужно, чтобы пояснить, что именно сделано
    3. «Ответственная публикация» (TODO в этот раз не успели)

  2. Иллюстрации по структуре объектов git-репозитория:
    • Первый коммит с простой структурой (файлы в одном каталоге):

      simple_commit.png

    • Первый коммит с файлами в нескольких каталогах:

      complex_commit.png

    • История из нескольких последовательных коммитов:

      history.png

  3. Замечания по структуре объектов
    • Заголовок, в котором лежит строка вида «b"тип_объекта размер"», отделяется от содержимого нулевым байтом. Удобно пользоваться методом .partition(b'\x00')

    • Объект типа blob — это просто содержимое файла

    • Объект типа tree:

      • b"атрибуты имя"

        b'\x00'

        ID = bytes[20]

        разделитель = b'\x00'

        b"атрибуты имя"

        b'\x00'

        ID = bytes[20]

        разделитель = b'\x00'

        b"атрибуты имя"

        b'\x00'

        ID = bytes[20]

    • Объект типа commit — текстовый, строки до первой пустой — служебные, вида b"Поле содержание" (нам важно поле parent, если оно есть)

      • Полей "parent" в коммите может быть любое (?) число, точно бывает 0, 1 и 2 штуки

    • Коммит ID, соответствующие HEAD различных веток, лежат в файле .git/refs/heads/имя_ветки

  4. {i} Простой просмотр (вывод b''-сроки) произвольного объекта из .git/objects/??/*

    • понадобится zlib.decompress()

  5. {i} Простой просмотр всех объектов

    • понадобится glob.iglob()

  6. {i} Просмотр объекта типа commit

  7. {i} Просмотр объекта типа tree с выводом имён файлов и их commit ID

  8. В результате должно получиться примерно это

  9. <!> Задача_1: напишите программу-просмотрщик git-репозитория, оформите её функциональность в виде нескольких коммитов.

    • Коммиты должны соответствовать добавлению к программе следующих возможностей:
      1. Без параметров программа выводит имена всех веток; дальнейшие требования относятся к запуску программы с одним параметром — именем ветки.
      2. Вывести объект-последний коммит (последний коммит указанной ветки).
      3. Вывести объект-дерево, на который указывает последний коммит ветки (поддеревья обрабатывать не нужно).
      4. Вывести объект-дерево, на который указывает последний коммит ветки, в виде дерева
      5. Пройти по истории от последнего к начальному коммиту ветки, для каждого коммита вывести объект-деревою
        • В случае нескольких родительских коммитов выбирать первый, топологией не заморачиваться.

Д/З

LecturesCMC/PythonDevelopment2022/Prac/01_Intro (последним исправлял пользователь FrBrGeorge 2022-02-17 19:15:08)