GitPython
— это python api для ваших репозиториев git.
когда вам нужно работать с git из python.
Пример использования
Недавно я сделал себе удобный инструмент для создания скриншотов на python, и мне понадобилось сделать git commit и push из скрипта. Для этого я обратился к GitPython
.
https://waylonwalker.com/screenshot-to-blog/
Установка
GitPython
— это библиотека python, размещенная на pypi, которую мы хотим установить
в наши виртуальные среды с помощью pip.
pip install GitPython
Создайте объект Repo
Импортируйте Repo из библиотеки git и создайте экземпляр объекта Repo
, указав ему путь к директории, содержащей ваш каталог .git
.
from git import Repo repo = Repo('~/git/waylonwalker.com/')
Два интерфейса
из документации
Предоставляет абстракции объектов git для легкого доступа к данным репозитория,
и дополнительно позволяет вам получить доступ к git-репозиторию напрямую, используя
либо чистую реализацию python, либо более быструю, но более ресурсоемкую
более быструю, но более ресурсоемкую реализацию команды git.
Мне потребовалось использовать только более интенсивную, но хорошо знакомую мне реализацию команд git, чтобы запустить мой проект. В документации есть хорошее руководство, как начать работу с их чистой реализацией python.
Статус
Запросить статус git можно следующим образом.
Обратите внимание, что я снабдил свои команды префиксом >>>, чтобы различать команду.
которую я ввел, и результатом.
>>> print(repo.git.status())
On branch main Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
blog/
Вы можете даже передать флаги, которые вы передали бы в cli.
>>> print(repo.git.status("-s"))
?? blog/
журнал
Пример использования журнала.
print(repo.git.log('--oneline', '--graph'))
* 0d28bd8 fix broken image link
* 3573928 wip screenshot-to-blog
* fed9abc wip screenshot-to-blog
* d383780 update for wsl2
* ad72b14 wip screenshot-to-blog
* 144c2f3 gratitude-180
Поиск удаленных файлов
Мы можем даже найти все файлы, которые были удалены, и хэш их удаления.
print(repo.git.log('--diff-filter', 'D', '--name-only', '--pretty=format:"%h"'))
https://waylonwalker.com/git-find-deleted-files/
полный текст статьи о поиске удаленных файлов
Мой опыт
Эта библиотека показалась мне довольно простой и предсказуемой, как только я понял, что есть две основные реализации и что я уже знаком с более интенсивной реализацией команды git.