GitPython – это библиотека кода Python. для программного чтения и записи в Git репозитории системы контроля версий.
Давайте узнаем, как использовать GitPython, быстро установив его и прочитав локальный клонированный репозиторий Git.
Наши инструменты
Это руководство должно работать с Python 2.7 или 3, но Python 3, особенно 3.6+, настоятельно рекомендуется для всех новых Приложения. я использовал Python 3.6.3 в напишите этот пост. Помимо Python, в этом руководстве мы также будет использовать следующие зависимости приложения:
- Git,
- реализация контроля версий (версий),
- версия 2.15.1
- GitPython
- версия 2.1.7
- pip и
- virtualenv , которые входят
- в комплекте с Python 3, для установки и изоляции библиотеки GitPython
- из любого из ваших других проектов Python
Взгляни на это руководство по настройке Python 3 и Flask в Ubuntu 16.04 LTS если вам нужны конкретные инструкции для получения базы Настроена среда разработки Python.
Весь код в этом сообщении в блоге доступен с открытым исходным кодом по лицензии MIT. на GitHub в разделе каталог first-steps-gitpython репозитория blog-code-examples . Используйте исходный код и злоупотребляйте им в своих собственных приложениях.
Установить GitPython
Начните с создания новой виртуальной среды для вашего проекта. Мой виртуальный называется testgit
, но вы можете назвать свое имя, соответствующее проекту вы создаете.
python3 -m venv gitpy
Активируйте только что созданный файл virtualenv.
source gitpy/bin/activate
Имя virtualenv будет добавлено в командную строку после активация.
Теперь, когда virutalenv активирован, мы можем использовать команду pip
для установки GitPython.
pip install gitpython==2.1.7
Запустите команду pip
, и после того, как все будет установлено, вы должны увидеть вывод похожее на следующее сообщение «Успешно установлено».
(gitpy) $ pip install gitpython==2.1.7 Collecting gitpython==2.1.7 Downloading GitPython-2.1.7-py2.py3-none-any.whl (446kB) 100% |████████████████████████████████| 450kB 651kB/s Collecting gitdb2>=2.0.0 (from gitpython==2.1.7) Downloading gitdb2-2.0.3-py2.py3-none-any.whl (63kB) 100% |████████████████████████████████| 71kB 947kB/s Collecting smmap2>=2.0.0 (from gitdb2>=2.0.0->gitpython==2.1.7) Downloading smmap2-2.0.3-py2.py3-none-any.whl Installing collected packages: smmap2, gitdb2, gitpython Successfully installed gitdb2-2.0.3 gitpython-2.1.7 smmap2-2.0.3
Затем мы можем начать программное взаимодействие с репозиториями Git в нашем Приложения Python с установленным GitPython.
Клонировать репозиторий
GitPython может работать с удаленными репозиториями, но для простоты в этом В руководстве мы будем использовать клонированный репозиторий в нашей локальной системе.
Клонируйте репозиторий, с которым хотите работать, в свою локальную систему. Если вы этого не сделаете иметь в виду конкретный, использовать Репозиторий Full Stack Python Git с открытым исходным кодом который размещен на GitHub.
git clone [email protected]:mattmakai/fullstackpython.com fsp
Обратите внимание на место, где вы клонировали репозиторий, потому что нам нужно путь к сообщению GitPython о том, какой репозиторий обрабатывать. Перейти в каталог для нового репозитория Git с помощью cd
, затем запустите pwd
(присутствует рабочий каталог), чтобы получить полный путь.
cd fsp pwd
Вы увидите что-то вроде /Users/matt/devel/py/fsp
. Этот путь твой абсолютный путь к базе репозитория Git.
Используйте команду export
, чтобы установить переменную среды для абсолютного пути в репозиторий Git.
export GIT_REPO_PATH='/Users/matt/devel/py/fsp' # make sure this your own path
Наш репозиторий Git и переменная среды пути установлены, поэтому давайте напишем код Python, использующий GitPython.
Чтение данных репозитория и фиксации
Создайте новый файл Python с именем read_repo.py
и откройте его, чтобы мы могли начать написать простой скрипт.
Начнем с пары импортов и константы:
import os from git import Repo COMMITS_TO_PRINT = 5
Модуль os
упрощает чтение переменных среды, таких как наши GIT_REPO_PATH
переменная, которую мы установили ранее. from git import Repo
дает наши доступ приложения к библиотеке GitPython при создании объекта Repo
. COMMITS_TO_PRINT
– константа, ограничивающая количество строк вывода. в зависимости от количества коммитов, о которых мы хотим, чтобы наш скрипт печатал информацию. Full Stack Python содержит более 2250 коммитов, так что вывода будет много если мы напечатали каждую фиксацию.
Затем в нашем файле read_repo.py
создайте функцию для печати отдельных информация о фиксации:
def print_commit(commit): print('----') print(str(commit.hexsha)) print("\"{}\" by {} ({})".format(commit.summary, commit.author.name, commit.author.email)) print(str(commit.authored_datetime)) print(str("count: {} and size: {}".format(commit.count(), commit.size)))
Функция print_commit
принимает объект фиксации GitPython и печатает 40-символьный хэш SHA-1 для фиксации, за которым следует:
Под функцией print_commit
создайте другую функцию с именем print_repository
для печати сведений об объекте Repo
:
def print_repository(repo): print('Repo description: {}'.format(repo.description)) print('Repo active branch is {}'.format(repo.active_branch)) for remote in repo.remotes: print('Remote named "{}" with URL "{}"'.format(remote, remote.url)) print('Last commit for repo is {}.'.format(str(repo.head.commit.hexsha)))
print_repository
похож на print_commit
, но вместо этого печатает описание репозитория, активная ветка, все удаленные URL-адреса Git настроены для этого репозитория и последней фиксации.
Наконец, нам нужна «основная» функция, когда мы вызываем скрипт из терминал с помощью команды python
. Завершите наш
if __name__ == "__main__": repo_path = os.getenv('GIT_REPO_PATH') # Repo object used to programmatically interact with Git repositories repo = Repo(repo_path) # check that the repository loaded correctly if not repo.bare: print('Repo at {} successfully loaded.'.format(repo_path)) print_repository(repo) # create list of commits then print some of them to stdout commits = list(repo.iter_commits('master'))[:COMMITS_TO_PRINT] for commit in commits: print_commit(commit) pass else: print('Could not load repository at {} :('.format(repo_path))
Основная функция обрабатывает получение переменной среды GIT_REPO_PATH
. и, если возможно, создает объект Repo на основе пути.
Если репозиторий не пуст, это означает, что не удалось найти репозиторий, то функции print_repository
и print_commit
вызывается, чтобы показать данные репозитория.
Если вы хотите скопировать и вставить сразу весь код, найденный выше, возьмите посмотри на Файл read_repo.py
на GitHub .
Пришло время протестировать наш скрипт, использующий GitPython. Вызов файла read_repo.py
с помощью следующую команду.
(gitpy) $ python read_repo.py
Если виртуальная среда активирована и переменная среды GIT_REPO_PATH
установлен правильно, мы должны увидеть результат, подобный следующему.
Repo at ~/devel/py/fsp/ successfully loaded. Repo description: Unnamed repository; edit this file 'description' to name the repository. Repo active branch is master Remote named "origin" with URL "[email protected]:mattmakai/fullstackpython.com" Last commit for repo is 1fa2de70aeb2ea64315f69991ccada51afac1ced. ---- 1fa2de70aeb2ea64315f69991ccada51afac1ced "update latest blog post with code" by Matt Makai ([email protected]) 2017-11-30 17:15:14-05:00 count: 2256 and size: 254 ---- 1b026e4268d3ee1bd55f1979e9c397ca99bb5864 "new blog post, just needs completed code section" by Matt Makai ([email protected]) 2017-11-30 09:00:06-05:00 count: 2255 and size: 269 ---- 2136d845de6f332505c3df38efcfd4c7d84a45e2 "change previous email newsletters list style" by Matt Makai ([email protected]) 2017-11-20 11:44:13-05:00 count: 2254 and size: 265 ---- 9df077a50027d9314edba7e4cbff6bb05c433257 "ensure picture sizes are reasonable" by Matt Makai ([email protected]) 2017-11-14 13:29:39-05:00 count: 2253 and size: 256 ---- 3f6458c80b15f58a6e6c85a46d06ade72242c572 "add databases logos to relational databases pagem" by Matt Makai ([email protected]) 2017-11-14 13:28:02-05:00 count: 2252 and size: 270
Конкретные коммиты, которые вы видите, будут зависеть от последних 5 коммитов, которые я помещен в репозиторий GitHub, но если вы видите что-то вроде вывода выше это хороший знак, что все работает, как ожидалось.
Что дальше?
Мы только что клонировали репозиторий Git и использовали GitPython библиотека для чтения множества данных о репозитории и всех его коммитах.
GitPython может не только читать данные – он также может создавать и пишите в репозитории Git! Взгляните на изменение ссылок страницу документации в официальном руководстве по GitPython или вернитесь сюда в будущее, когда у меня будет возможность написать более продвинутый GitPython прохождение.
Вопросов? Дай мне знать через запрос на выпуск GitHub в репозитории Full Stack Python , в Твиттере @fullstackpython или @mattmakai .
Видите что-то не так в этом сообщении в блоге? Вилка исходный код этой страницы на GitHub и отправьте запрос на перенос.