Главная страница
Навигация по странице:

  • Создание новых проектов Python с использованием Cookiecutter

  • Рис. 12.2.

  • Установка графических средств Git

  • Как Git отслеживает статус файлов

  • Для чего нужно индексирование

  • Создание репозитория Git на вашем компьютере

  • Чистыйкод дляпродолжающи х


    Скачать 7.85 Mb.
    НазваниеЧистыйкод дляпродолжающи х
    Дата13.05.2023
    Размер7.85 Mb.
    Формат файлаpdf
    Имя файлаPython_Chisty_kod_dlya_prodolzhayuschikh_2022_El_Sveygart.pdf
    ТипДокументы
    #1127485
    страница25 из 40
    1   ...   21   22   23   24   25   26   27   28   ...   40
    12
    Git и организация
    программных проектов
    Системы контроля версий представляют собой программ- ные средства, которые регистрируют все изменения в ис- ходном коде и позволяют легко восстановить старые версии.
    Рассматривайте их как сильно усовершенствованную функ- цию отмены (undo). Например, если вы заменяете функцию, а потом решаете, что старая версия нравится вам больше, вы можете восстановить исходный фрагмент кода. Или при обнаружении новой ошибки вы можете вернуться к более ранним версиям, чтобы определить, когда она впервые появилась и какие изменения ее вызвали.
    Система контроля версий управляет файлами при внесении в них изменений.
    Пользоваться ею удобнее, чем, скажем, работать с копией папки myProject
    . Первой копии вы присвоите имя myProject-copy
    . Затем, если вы продолжите вносить из- менения, вам потребуется создать новую копию с именем myProject-copy2
    , потом myProject-copy3
    , myProject-copy3b
    , myProject-copyAsOfWednesday и т. д. Возможно, копирование папок — простой метод, но он не масштабируется. Умение пользовать- ся системой контроля версий сэкономит ваше время и избавит от многих хлопот в долгосрочной перспективе.
    Git, Mercurial и Subversion — популярные приложения контроля версий, хотя система Git остается самой популярной. В этой главе вы узнаете, как подготовить файлы для программного проекта и как использовать Git для отслеживания в них изменений.

    236
    Глава 12.Git и организация программных проектов
    Коммиты и репозитории
    Git позволяет сохранить состояние файлов проекта при внесении в них изменений.
    Такие сохранения называются снимками (snapshots) или коммитами (commits).
    Благодаря этому вы сможете, если потребуется, вернуться к любой предшеству- ющей версии.
    Системы контроля версий также позволяют команде разработчиков синхронизиро- вать свою работу при внесении изменений в исходный код проекта. Когда каждый программист закрепляет свои изменения, другие могут извлекать эти обновления на своих компьютерах. Система контроля версий следит за тем, какие изменения были внесены, кто и когда их сделал, а также сохраняет комментарии разработчиков, описывающие эти изменения.
    Система контроля версий управляет исходным кодом проекта, который хранится в специальной папке — репозитории (repo). Как правило, для каждого проекта, над которым вы работаете, следует создать отдельный репозиторий Git. Предпо- ложим, вы работаете в основном самостоятельно над своей частью программы и вам не нужны расширенные возможности Git (такие как ветвление и слияние), упрощающие работу с остальными участниками. Но даже если вы работаете в одиночку, самый маленький проект все равно выиграет от применения системы контроля версий.
    Создание новых проектов Python
    с использованием Cookiecutter
    В терминологии Git папка, содержащая весь исходный код, документацию, тесты и другие файлы, относящиеся к проекту, называется рабочим каталогом или рабо-
    чим деревом, а в более общей терминологии — папкой проекта. Файлы в рабочем каталоге в совокупности называются рабочей копией. Прежде чем создавать репо- зиторий Git, следует создать файлы для проекта Python.
    У каждого программиста есть свой способ выполнения этой операции. Тем не менее для проектов Python действуют определенные соглашения по поводу имен папок и иерархий. Более простая программа может содержать один файл
    .py
    Но когда проекты усложнятся, в них будут включаться дополнительные файлы
    .py
    , файлы данных, документация, модульные тесты и т. д. Как правило, корневая папка проекта содержит папку src для файлов с исходным кодом
    .py
    , папку tests для модульных тестов и папку docs для документации (например, сгенерирован- ной системой документирования Sphinx). Другие файлы содержат информацию о проекте и конфигурации системы:
    README.md для общей информации,
    .coveragerc для конфигурации покрытия кода,
    LICENSE.txt для текста программной лицензии

    Создание новых проектов Python с использованием Cookiecutter
    237
    проекта и т. д. Описание этих средств и файлов выходит за рамки книги, но они заслуживают вашего внимания. С появлением практического опыта программиро- вания необходимость заново создавать одни и те же базовые файлы для всех новых проектов надоедает и утомляет. Чтобы ускорить выполнение рутинных операций, можно использовать модуль Python cookiecutter для автоматического создания этих файлов и папок. Полная документация по модулю и программе командной строки Cookiecutter доступна на https://cookiecutter.readthedocs.io/.
    Чтобы установить Cookiecutter, выполните команду pip install
    --user cookiecutter
    (в системе Windows) или pip3
    install
    --user cookiecutter
    (в macOS и Linux).
    В установку включаются программа командной строки Cookiecutter и модуль
    Python cookiecutter
    . В процессе установки вы можете получить предупреждение о том, что программа командной строки устанавливается в папку, не входящую в переменную окружения
    PATH
    :
    Installing collected packages: cookiecutter
    WARNING: The script cookiecutter.exe is installed in 'C:\Users\Al\AppData\
    Roaming\Python\Python38\Scripts' which is not on PATH.
    Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
    Возможно, вам стоит включить папку (
    C:\Users\Al\AppData\Roaming\Python\Py- thon38\Scripts в данном случае) в переменную среды
    PATH
    ; инструкции приведены в разделе «Переменные среды и PATH», с. 60. В противном случае вам придется запускать Cookiecutter как модуль Python командой python
    -m cookiecutter
    (в Win dows) или python3
    –m cookiecutter
    (в macOS или Linux) вместо простой команды cookiecutter
    В этой главе мы создадим репозиторий для модуля wizcoin
    , предназначенного для работы с различными видами волшебной валюты. Модуль cookiecutter ис- пользует шаблоны для создания начальных файлов для различных видов проек- тов. Часто шаблон представляет собой простую ссылку на GitHub.com. Например, в папке
    C:\Users\Al можно ввести приведенную ниже команду из окна терминала для создания папки
    C:\Users\Al\wizcoin с заготовками файлов для базового проекта
    Python. Модуль cookiecutter загружает шаблон с GitHub и задает серию вопросов о создаваемом проекте:
    C:\Users\Al>cookiecutter gh:asweigart/cookiecutter-basicpythonproject
    project_name [Basic Python Project]: WizCoin
    module_name [basicpythonproject]: wizcoin
    author_name [Susie Softwaredeveloper]: Al Sweigart
    author_email [susie@example.com]: al@inventwithpython.com
    github_username [susieexample]: asweigart
    project_version [0.1.0]:
    project_short_description [A basic Python project.]: A Python module to
    represent the galleon, sickle, and knut coins of wizard currency.

    238
    Глава 12.Git и организация программных проектов
    Если вы получите ошибку, попробуйте выполнить команду python
    -m cookiecutter вместо cookiecutter
    . Команда загружает созданный мной шаблон на https://
    github.com/asweigart/cookiecutter-basicpythonproject. В разделе https://github.com/
    cookiecutter/cookiecutter вы найдете шаблоны для многих языков программирования.
    Так как шаблоны Cookiecutter часто размещаются на GitHub, вы также можете ввести gh:
    как сокращение для https://github.com/ в аргументе командной строки.
    Когда Cookiecutter задает свои вопросы, следует либо ввести ответ, либо просто нажать ENTER, чтобы использовать ответ по умолчанию, приведенный в квадрат- ных скобках. Например, запрос project_name
    [Basic
    Python
    Project]
    : предлагает ввести имя проекта. Если не указать ничего, Cookiecutter использует имя проекта
    Basic Python Project. Значения по умолчанию также подсказывают, какой ответ предполагается. В подсказке project_name
    [Basic
    Python
    Project]:
    в имени про- екта используются символы верхнего регистра, тогда как из подсказки module_name
    [basicpythonproject]:
    видно, что имя модуля записывается в нижнем регистре и не содержит пробелов. Мы не ввели ответ на запрос project_version
    [0.1.0]:
    , поэтому по умолчанию используется ответ
    0.1.0
    После ответов на вопросы Cookiecutter создает папку wizcoin в текущем рабочем каталоге с базовыми файлами, необходимыми для проекта Python (рис. 12.1).
    Рис. 12.1. Файлы в папке wizcoin, созданной Cookiecutter
    Если вы не знаете, для чего нужны те или иные файлы, не огорчайтесь. Хотя полное описание назначения каждого файла выходит за рамки книги, на странице https://
    github.com/asweigart/cookiecutter-basicpythonproject присутствуют ссылки и нужная информация. Итак, базовые файлы созданы, и мы переходим к отслеживанию из- менений в них в системе Git.

    Установка Git
    239
    Установка Git
    Возможно, Git уже установлена на вашем компьютере. Чтобы узнать это, введите команду git
    --version в командной строке. Если вы увидите сообщение вида git version
    2.29.0.windows.1
    , значит, у вас уже установлена программная поддержка
    Git. Если вы увидите сообщение «команда не найдена», Git придется установить.
    В системе Windows перейдите на страницу https://git-scm.com/download, загрузите и запустите программу установки Git. В macOS Mavericks (10.9) и более поздних версиях просто выполните команду git
    --version из окна терминала; вам будет предложено установить Git, как показано на рис. 12.2.
    В Ubuntu или Debian Linux выполните команду sudo apt install git-all из окна терминала. В Red Hat Linux выполните команду sudo dnf install git-all из окна терминала. Инструкции для других дистрибутивов Linux находятся на https://git-
    scm.com/download/linux. Чтобы убедиться в том, что установка прошла успешно, выполните команду git
    --version
    Рис. 12.2. При первом выполнении команды git --version в macOS 10.9 и выше вам будет предложено установить Git
    Настройка имени пользователя и адреса электронной почты
    После установки Git необходимо задать ваше имя и адрес электронной почты, чтобы в ваши коммиты включалась информация об авторе. В терминале выполните следу- ющие команды git config
    , используя собственное имя и адрес электронной почты:
    C:\Users\Al>git config --global user.name "Al Sweigart"
    C:\Users\Al>git config --global user.email al@inventwithpython.com
    Эта информация хранится в файле
    .gitconfig в вашей домашней папке (например, в
    C:\Users\Al на моем ноутбуке с Windows). Вам никогда не придется редактировать этот текстовый файл напрямую. Для его изменения достаточно выполнить команду git config
    . Для настройки текущей конфигурации Git используйте команду git config
    --list

    240
    Глава 12.Git и организация программных проектов
    Установка графических средств Git
    В этой главе основное внимание мы уделим средствам командной строки Git, но установка программы, добавляющей графический интерфейс (GUI) для Git, по- может вам выполнять повседневные задачи. Даже профессиональные разработчики, хорошо знающие командную строку Git, часто используют графические средства
    Git. На веб-странице https://git-scm.com/downloads/guis приведены ссылки на не- которые программы, включая TortoiseGit для Windows, GitHub Desktop для macOS и GitExtensions для Linux.
    На рис. 12.3 показано, как TortoiseGit для Windows добавляет к значкам в
    Проводнике цветные метки в зависимости от их статуса: зеленые для неизмененных файлов в ре- позитории и красные для измененных файлов (или папок, содержащих измененные файлы); метка отсутствует у файлов, которые не отслеживаются. Конечно, ориен- тироваться по меткам гораздо проще, чем постоянно вводить команды в терминале для получения нужной информации. TortoiseGit также добавляет контекстное меню для выполнения команд Git (рис. 12.3).
    Рис. 12.3. TortoiseGit для Windows добавляет графический интерфейс для выполнения команд Git из
    Проводника
    Графические средства Git удобны, но они не заменят применения команд, описан- ных в этой главе. Возможно, вам когда-нибудь придется работать с Git на компью- тере, на котором графические средства не установлены.

    Работа с Git
    241
    Работа с Git
    Работа с репозиторием Git состоит из нескольких этапов. Сначала вы создаете репозиторий Git командой git init или git clone
    . Затем файлы добавляются в репозиторий для отслеживания командой git add
    <имя_файла>. Наконец, после добавления файлов они сохраняются командой git commit
    -am
    "
    <сообщение, опи-
    сывающее содержание коммита>
    "
    (часто называют просто «сообщение коммита»).
    Теперь все готово для внесения изменений в код.
    Вы можете просмотреть справку по каждой из этих команд командой git help
    <команда> — например, git help init или git help add
    . Справочные страницы удобны, но они предлагают слишком сухую и техническую информацию, чтобы ее можно было легко и просто использовать для обучения. Позднее я расскажу более подробно о каждой из этих команд, но сначала необходимо представить некоторые концепции Git — это поможет вам понять материал главы.
    Как Git отслеживает статус файлов
    Все файлы в рабочем каталоге либо отслеживаются, либо не отслеживаются Git.
    Отслеживаемые файлы были добавлены и сохранены в репозитории, все остальные файлы не отслеживаются. Для репозитория Git неотслеживаемые файлы в рабо- чей копии не существуют. С другой стороны, отслеживаемые файлы существуют в одном из трех состояний.
    В сохраненном (закрепленном) состоянии файл в рабочей копии идентичен последнему коммиту в репозитории. (Иногда это состояние называется не-
    измененным, или чистым.)
    В измененном состоянии файл в рабочей копии отличается от последнего коммита в репозитории.
    В индексированном, или подготовленном (staged),состоянии файл был из- менен и помечен для включения в следующий коммит. Также говорят, что файл находится в индексной области (или кэше).
    На рис. 12.4 изображена диаграмма перехода файла между четырьмя возможными состояниями. Вы добавляете неотслеживаемый файл в репозиторий Git, после чего он становится отслеживаемым и индексированным. Далее можно сохранить индексированные файлы, чтобы перевести их в индексированное состояние. Для перевода файла в измененное состояние никакие команды Git не нужны; как толь- ко вы внесете изменения в сохраненный файл, он автоматически помечается как измененный.

    242
    Глава 12.Git и организация программных проектов
    Отслеживаемый файл
    Сохраненный файл
    Измененный файл
    Индексированный файл
    Неотслеживаемый файл
    Рис. 12.4. Возможные состояния файла в репозитории Git и переходы между ними
    На любом этапе после создания репозитория выполните команду git status для просмотра текущего статуса репозитория и состояния его файлов. Эта команда часто выполняется при работе в Git. Для следующего примера я подготовил файлы в разных состояниях. Обратите внимание на то, как эти четыре файла представлены в выходных данных git status
    :
    C:\Users\Al\ExampleRepo>git status
    On branch master
    Changes to be committed:
    (use "git restore --staged ..." to unstage)
    new file: new_file.py

    modified: staged_file.py

    Changes not staged for commit:
    (use "git add ..." to update what will be committed)
    (use "git restore ..." to discard changes in working directory)
    modified: modified_file.py

    Untracked files:
    (use "git add ..." to include in what will be committed)
    untracked_file.py

    В этой рабочей копии присутствует файл new_file.py

    , который недавно был до- бавлен в репозиторий, а следовательно, находится в индексированном состоянии.
    Также присутствуют два отслеживаемых файла staged_file.py

    и modified_file.py

    , которые находятся в индексированном и измененном состоянии соответствен- но. Также присутствует неотслеживаемый файл untracked_file.py

    . В выходные

    Создание репозитория Git на вашем компьютере
    243
    данные git status также включены команды Git, переводящие файлы в другие состояния.
    Для чего нужно индексирование?
    Возникает вопрос — для чего нужно индексированное состояние? Почему нельзя просто переходить между измененным и сохраненным состоянием без индекси- рования файлов? Область индексирования полна неприятных особых случаев, и часто у новичков в Git вызывает недоумение. Например, файл может быть из- менен после того, как он был проиндексирован, в результате чего файл существует как в измененном, так и в индексированном состоянии (см. предыдущий раздел).
    С технической точки зрения область индексирования содержит не столько файлы, сколько описания изменений, потому что одни части измененного файла могут быть индексированы, а другие — нет. Именно из-за таких случаев Git считается сложной системой, а многие источники о работе Git часто содержат неточную информацию в лучшем случае или дезинформацию — в худшем.
    Однако большую часть этих сложностей можно обойти. В этой главе я рекомендую так и поступить, используя команду git commit
    -am command для индексирования и закрепления измененных файлов на одном шаге. В этом случае файлы переходят из измененного состояния сразу же в чистое. Кроме того, я рекомендую всегда не- медленно сохранять файлы после их добавления, переименования или удаления из репозитория. Кроме того, использование графических средств Git (о которых я расскажу позднее) вместо командной строки поможет избежать этих нетриви- альных случаев.
    Создание репозитория Git на вашем компьютере
    Git является распределенной системой контроля версий; это означает, что все коммиты и метаданные репозиториев хранятся локально на вашем компьютере в папке с именем
    .git
    . В отличие от централизованных систем контроля версий
    Git не нужно подключаться к серверу по интернету для сохранения данных.
    Благодаря такому подходу система Git работает быстро и остается доступной при автономной работе.
    Введите в окне терминала следующие команды для создания папки
    .git
    (в macOS и Linux необходимо выполнить команду mkdir вместо md
    ):
    C:\Users\Al>
    1   ...   21   22   23   24   25   26   27   28   ...   40


    написать администратору сайта