Python и открытая разработка; использование Git

Сообщество Python и разработка

Python и непрограммисты: уровень культуры разработки в разных проектах очень разный.

Использование Git

Система контроля версий:

<!> Не путать (особенно в последнем пункте) GIT как DVCS с Git-хостингами (типа GitHUB) — там много сделано как раз для информационной связности.

Коротко о VCS/DVCS

VCS:

Цикл работы с VCS

Используется «централизованный репозиторий на всех»

  1. Синхронизация
  2. Редактирование / отладка
  3. Оформление коммита
  4. Публикация коммита

Проблема: совместная работа над одним корпусом текстов

Проблема решается введением дисциплины (например, вводится строгое время публикации, личные ветки разработки, права доступа и т. д.)

DVCS

Git

Работа с Git как с локальной VCS

Структура локального хранилища:

Коммит делается всегда в локальное хранилище. Публикация (push) — независимая операция.

Цикл работы с локальным хранилищем

  1. Инициализация.
    • git init

  2. Изменение рабочей копии — редактирование/удаление/добавление файлов.
    • Чтобы посмотреть, чем рабочая копия отличается от соответствующего дерева в репозитории:

      git status

  3. Подготовка коммита — надо пометить файлы, которые в него войдут.
    • git add список файлов

    • Можно добавить сразу всё:

      git add *

    • Если сейчас сделать git status, увидим изменения, которые будут добавлены в коммит

  4. Оформление коммита — создаём на основании изменений рабочей копии новое дерево и обновляем репозиторий
    • git commit

    • В процессе коммита запускается редактор, в котором надо отредактировать коммит-сообщение
      • Чтобы поменять редактор с vim на что-нибудь иное, надо изменить файл .git/config. Это можно сделать, например, с помощью командной строки git config core.editor 'ваш любимый редактор'

      • Обратите внимание на то, что git запускает редактор в интерактивном (foreground) режиме, дожидается его завершения, и только потом продолжает работу. Поэтому просто gvim, например, не годится, используйте gvim -f

    • При этом в репозитории создаётся три типа объектов
      1. это новое дерево (список всех файлов) — tree

      2. коммит-сообщение — commit

      3. и все изменённые файлы (blob)

    • переход к п. 1.

Историю коммитов можно посмотреть командой git log. Для того, чтобы отключить постраничный просмотр, используйте git -P log.

Изменения, сделанные только в локальном репозитории, никто, кроме вас не видит. Это значит, что вы спокойно можете редактировать и изменять историю уже сделанных изменений, при условии, что изменяемые вами коммиты нигде не опубликованы.

Например, если вам не понравился последний коммит, и вы хотите в нём что-то поменять — переписать сообщение, поправить изменение в файле и т. п. — можно сделать нужные изменения и выполнить git commit --amend. Тогда новый коммит не добавится в историю, а заменит в ней старый. В него, разумеется, попадёт всё, чем текущая рабочая копия отличается от дерева в предпоследнем коммите.

Коммит отдельных изменений

В действительности добавлять можно даже не файлы, а отдельные изменения в них (см. FrBrGeorge/Using git add -p и git add --interactive):

О структуре репозитория

См. Git-изнутри-Объекты-Git

Все объекты имеют уникальный ID (это SHA-1 хеш). Объект с ID, допустим, 8dccc7a1d248ea923156b2e762e576b44e07886a, хранятся в файле с именем .git/objects/8d/ccc7a1d248ea923156b2e762e576b44e07886a

Посмотреть содержимое объектов можно (но непонятно, зачем ☺), например, так:

Иллюстрации по структуре объектов git-репозитория:

Замечания по структуре объектов

В нашем курсе рекомендуется пользоваться именно интерфейсом командной строки — командой git, утилитами из пакетов python и т. п., а не волшебной кнопкой «сделать мне хорошо» в IDE. Пока мы не до конца представляем себе, что именно происходит после нажатия этой кнопки, она приносит больше вреда, чем пользы.

Д/З

LecturesCMC/PythonDevelopment2026/01_Intro (последним исправлял пользователь FrBrGeorge 2026-02-11 01:12:49)