GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Blog
  • Docs
  • Log in
  • Register
  • Getting help
  • Installing packages
  • Uploading packages
  • Packaging user guide
  • Infrastructure dashboard
  • Statistics
  • Logos & trademarks
  • Our sponsors
  • Bugs and feedback
  • Contribute on GitHub

This view

  • Original page
  • New address

GeezerVison is showing pypi.org — GitPython

GitPython 3.2.1

GitPython is a Python library used to interact with Git repositories

pip install GitPython

Python package Documentation Status Packaging status

Gitoxide: A peek into the future…

I started working on GitPython in 2009, back in the days when Python was 'my thing' and I had great plans with it. Of course, back in the days, I didn't really know what I was doing and this shows in many places. Somewhat similar to Python this happens to be 'good enough', but at the same time is deeply flawed and broken beyond repair.

By now, GitPython is widely used and I am sure there is a good reason for that, it's something to be proud of and happy about. The community is maintaining the software and is keeping it relevant for which I am absolutely grateful. For the time to come I am happy to continue maintaining GitPython, remaining hopeful that one day it won't be needed anymore.

More than 15 years after my first meeting with 'git' I am still in excited about it, and am happy to finally have the tools and probably the skills to scratch that itch of mine: implement git in a way that makes tool creation a piece of cake for most.

If you like the idea and want to learn more, please head over to gitoxide, an implementation of 'git' in Rust.

(Please note that gitoxide is not currently available for use in Python, and that Rust is required.)

GitPython

GitPython is a python library used to interact with git repositories, high-level like git-porcelain, or low-level like git-plumbing.

It provides abstractions of git objects for easy access of repository data often backed by calling the git command-line program.

DEVELOPMENT STATUS

This project is in maintenance mode, which means that

  • …there will be no feature development, unless these are contributed
  • …there will be no bug fixes, unless they are relevant to the safety of users, or contributed
  • …issues will be responded to with waiting times of up to a month

The project is open to contributions of all kinds, as well as new maintainers.

REQUIREMENTS

GitPython needs the git executable to be installed on the system and available in your PATH for most operations. If it is not in your PATH, you can help GitPython find it by setting the GIT_PYTHON_GIT_EXECUTABLE=<path/to/git> environment variable.

  • Git (1.7.x or newer)
  • Python >= 3.8

The list of dependencies are listed in ./requirements.txt and ./test-requirements.txt. The installer takes care of installing them for you.

INSTALL

GitPython and its required package dependencies can be installed in any of the following ways, all of which should typically be done in a virtual environment.

From PyPI

To obtain and install a copy from PyPI, run:

pip install GitPython

(A distribution package can also be downloaded for manual installation at the PyPI page.)

From downloaded source code

If you have downloaded the source code, run this from inside the unpacked GitPython directory:

pip install .

By cloning the source code repository

To clone the the GitHub repository from source to work on the code, you can do it like so:

git clone https://github.com/gitpython-developers/GitPython
cd GitPython
./init-tests-after-clone.sh

On Windows, ./init-tests-after-clone.sh can be run in a Git Bash shell.

If you are cloning your own fork, then replace the above git clone command with one that gives the URL of your fork. Or use this gh command (assuming you have gh and your fork is called GitPython):

gh repo clone GitPython

Having cloned the repo, create and activate your virtual environment.

Then make an editable install:

pip install -e ".[test]"

In the less common case that you do not want to install test dependencies, pip install -e . can be used instead.

With editable dependencies (not preferred, and rarely needed)

GitPython, gitdb, and smmap live in this repository as independently packaged projects. To work on all three at once, install each one editably in the same virtual environment:

pip install -e smmap -e gitdb -e ".[test]"

You can use pip list to check which packages are installed editably and which are installed normally.

To reiterate, this approach should only rarely be used. For most development it is preferable to allow the gitdb and smmap dependencices to be retrieved automatically from PyPI in their latest stable packaged versions.

Limitations

Leakage of System Resources

GitPython is not suited for long-running processes (like daemons) as it tends to leak system resources. It was written in a time where destructors (as implemented in the __del__ method) still ran deterministically.

In case you still want to use it in such a context, you will want to search the codebase for __del__ implementations and call these yourself when you see fit.

Another way assure proper cleanup of resources is to factor out GitPython into a separate process which can be dropped periodically.

Windows support

See Issue #525.

RUNNING TESTS

Important: Right after cloning this repository, please be sure to have executed the ./init-tests-after-clone.sh script in the repository root. Otherwise you will encounter test failures.

Install test dependencies

Ensure testing libraries are installed. This is taken care of already if you installed with:

pip install -e ".[test]"

If you had installed with a command like pip install -e . instead, you can still run the above command to add the testing dependencies.

Test commands

To test, run:

pytest

To lint, and apply some linting fixes as well as automatic code formatting, run:

pre-commit run --all-files

This includes the linting and autoformatting done by Ruff, as well as some other checks.

To typecheck, run:

mypy

CI (and tox)

Style and formatting checks, and running tests on all the different supported Python versions, will be performed:

  • Upon submitting a pull request.
  • On each push, if you have a fork with GitHub Actions enabled.
  • Locally, if you run tox (this skips any Python versions you don't have installed).

Configuration files

Specific tools are all configured in the ./pyproject.toml file:

  • pytest (test runner)
  • coverage.py (code coverage)
  • ruff (linter and formatter)
  • mypy (type checker)

Orchestration tools:

  • Configuration for pre-commit is in the ./.pre-commit-config.yaml file.
  • Configuration for tox is in ./tox.ini.
  • Configuration for GitHub Actions (CI) is in files inside ./.github/workflows/.

Contributions

Please have a look at the contributions file.

INFRASTRUCTURE

  • User Documentation
  • Questions and Answers
  • Please post on Stack Overflow and use the gitpython tag
  • Issue Tracker
    • Post reproducible bugs and feature requests as a new issue. Please be sure to provide the following information if posting bugs:
      • GitPython version (e.g. import git; git.__version__)
      • Python version (e.g. python --version)
      • The encountered stack-trace, if applicable
      • Enough information to allow reproducing the issue

How to make a new release

  1. Update/verify the version in the VERSION file.
  2. Update/verify that the doc/source/changes.rst changelog file was updated. It should include a link to the forthcoming release page: https://github.com/gitpython-developers/GitPython/releases/tag/<version>
  3. Commit everything.
  4. Run git tag -s <version> to tag the version in Git.
  5. Optionally create and activate a virtual environment. (Then the next step can install build and twine.)
  6. Run make release.
  7. Go to GitHub Releases and publish a new one with the recently pushed tag. Generate the changelog.

Projects using GitPython

  • PyDriller
  • Kivy Designer
  • Prowl
  • Python Taint
  • Buster
  • git-ftp
  • Git-Pandas
  • PyGitUp
  • PyJFuzz
  • Loki
  • Omniwallet
  • GitViper
  • Git Gud

LICENSE

3-Clause BSD License, also known as the New BSD License. See the LICENSE file.

One file exclusively used for fuzz testing is subject to a separate license, detailed here. This file is not included in the wheel or sdist packages published by the maintainers of GitPython.

Project links

  • Changelog
  • Documentation
  • Source code

Key dates

PyPI data
Data sourced directly from PyPI's database.
  • Released: Oct 14, 2026
Latest release

2 maintainers

PyPI data
Data sourced directly from PyPI's database.
Avatar for ByronBates from gravatar.com ByronBates Avatar for mtrier from gravatar.com mtrier

Credits

Author: Sebastian Thiel

License

BSD-3-Clause

Requires

Python >=3.8

Provides Extra

test

Tags

git

Classifiers

  • Development Status
    • 5 - Production/Stable
  • Environment
    • Console
  • Intended Audience
    • Developers
  • Operating System
    • MacOS :: MacOS X
    • Microsoft :: Windows
    • OS Independent
    • POSIX
  • Programming Language
    • Python
    • Python :: 3
    • Python :: 3.8
    • Python :: 3.9
    • Python :: 3.10
    • Python :: 3.11
    • Python :: 3.12
    • Python :: 3.13
    • Python :: 3.14
    • Python :: 3.15
  • Typing
    • Typed

Metadata

Project links

  • Changelog
  • Documentation
  • Source code

Key dates

PyPI data
Data sourced directly from PyPI's database.
  • Released: Oct 14, 2026
Latest release

2 maintainers

PyPI data
Data sourced directly from PyPI's database.
Avatar for ByronBates from gravatar.com ByronBates Avatar for mtrier from gravatar.com mtrier

Credits

Author: Sebastian Thiel

License

BSD-3-Clause

Requires

Python >=3.8

Provides Extra

test

Tags

git

Classifiers

  • Development Status
    • 5 - Production/Stable
  • Environment
    • Console
  • Intended Audience
    • Developers
  • Operating System
    • MacOS :: MacOS X
    • Microsoft :: Windows
    • OS Independent
    • POSIX
  • Programming Language
    • Python
    • Python :: 3
    • Python :: 3.8
    • Python :: 3.9
    • Python :: 3.10
    • Python :: 3.11
    • Python :: 3.12
    • Python :: 3.13
    • Python :: 3.14
    • Python :: 3.15
  • Typing
    • Typed

Release files for GitPython 3.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for GitPython 3.2.1
File Size Uploaded Provenance Actions
gitpython-3.2.1.tar.gz 241.7 kB Oct 14, 2026 Without provenance Details for gitpython-3.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for GitPython 3.2.1
File Interpreter ABI Platform Actions Reset
gitpython-3.2.1-py3-none-any.whl 231.5 kB Oct 14, 2026 Without provenance Python 3 none any Details for gitpython-3.2.1-py3-none-any.whl

Total release size: 473.2 kB

Release files / gitpython-3.2.1.tar.gz

Download URL gitpython-3.2.1.tar.gz
Size 241.7 kB
Tags Source
SHA-256 checksum
How to use checksums
0f1229ec5c057bdabdeeda8bda4f17bda679ab33dbccc00f24e6a480553c8613
BLAKE2b-256 checksum
How to use checksums
c0fffee293f1ec3e1b64db6eb270e00964f29c086d769201474cedb8d1608930
Upload date Oct 14, 2026
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / gitpython-3.2.1-py3-none-any.whl

Download URL gitpython-3.2.1-py3-none-any.whl
Size 231.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d66b0832aa8755c1a84892937282df0befb16c97e5a64aeebd68be9c5e323f53
BLAKE2b-256 checksum
How to use checksums
6b502a923c4dc02522ff9567f07c67ed1deca6d5fa9474f4708168b8088dfa37
Upload date Oct 14, 2026
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Security for GitPython 3.2.1

Report project as malware

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

3.2.1 This release

Oct 14, 2026 2 release files No provenance

3.2.0

Sep 30, 2026 2 release files No provenance

3.1.62

Sep 7, 2026 2 release files No provenance

3.1.61

Aug 28, 2026 2 release files No provenance

3.1.60

Aug 25, 2026 2 release files No provenance

3.1.59

Aug 10, 2026 2 release files No provenance

3.1.58

Aug 4, 2026 2 release files No provenance

3.1.57

Jul 26, 2026 2 release files No provenance

3.1.56

Jul 25, 2026 2 release files No provenance

3.1.55

Jul 23, 2026 2 release files No provenance

3.1.54

Jul 22, 2026 2 release files No provenance

3.1.53

Jul 20, 2026 2 release files No provenance

3.1.52

Jul 16, 2026 2 release files No provenance

3.1.51

Jul 12, 2026 2 release files No provenance

3.1.50

May 6, 2026 2 release files No provenance

3.1.49

Apr 29, 2026 2 release files No provenance

3.1.48

Apr 28, 2026 2 release files No provenance

3.1.47

Apr 22, 2026 2 release files No provenance

3.1.46

Jan 1, 2026 2 release files No provenance

3.1.45

Jul 24, 2025 2 release files No provenance

3.1.44

Jan 2, 2025 2 release files No provenance

3.1.43

Mar 31, 2024 2 release files No provenance

3.1.42

Feb 15, 2024 2 release files No provenance

3.1.41

Jan 10, 2024 2 release files No provenance

3.1.40

Oct 18, 2023 2 release files No provenance

3.1.38

Oct 17, 2023 2 release files No provenance

3.1.37

Sep 22, 2023 2 release files No provenance

3.1.36

Sep 12, 2023 2 release files No provenance

3.1.35

Sep 7, 2023 2 release files No provenance

3.1.34

Sep 2, 2023 2 release files No provenance

3.1.33

Sep 1, 2023 2 release files No provenance

3.1.32

Jul 10, 2023 2 release files No provenance

3.1.31

Feb 16, 2023 2 release files No provenance

3.1.30

Dec 29, 2022 2 release files No provenance

3.1.29

Oct 10, 2022 2 release files No provenance

3.1.28

Oct 7, 2022 2 release files No provenance

3.1.27

Feb 20, 2022 2 release files No provenance

3.1.26

Jan 10, 2022 2 release files No provenance

3.1.25

Jan 7, 2022 2 release files No provenance

3.1.24

Sep 18, 2021 2 release files No provenance

Yanked

3.1.23

Sep 10, 2021 2 release files No provenance

Yanked reason: Aggressive unconditional timeout will fail long-running git operations

Yanked

3.1.22

Sep 10, 2021 2 release files No provenance

Yanked reason: Should have been 3.1.21

Yanked

3.1.20

Jul 28, 2021 2 release files No provenance

Yanked reason: Issues with typing of ordered dict

Yanked

3.1.19

Jul 23, 2021 2 release files No provenance

Yanked reason: 3.1.19wrong version for typing break installation

3.1.18

Jun 18, 2021 2 release files No provenance

Yanked

3.1.17

May 14, 2021 2 release files No provenance

Yanked reason: Breaks older versions of python 3.5, 3.5.2 notably, due to typing

Yanked

3.1.16

May 13, 2021 2 release files No provenance

Yanked reason: breakage due to new types

Yanked

3.1.15

Apr 21, 2021 2 release files No provenance

Yanked reason: too buggy

3.1.14

Feb 28, 2021 2 release files No provenance

3.1.13

Feb 9, 2021 2 release files No provenance

3.1.12

Jan 6, 2021 2 release files No provenance

3.1.11

Oct 23, 2020 2 release files No provenance

3.1.10

Oct 23, 2020 2 release files No provenance

3.1.9

Oct 1, 2020 2 release files No provenance

3.1.8

Sep 4, 2020 2 release files No provenance

3.1.7

Jul 13, 2020 2 release files No provenance

3.1.6

Jul 13, 2020 2 release files No provenance

3.1.5

Jul 12, 2020 2 release files No provenance

Yanked

3.1.4

Jul 12, 2020 2 release files No provenance

Yanked reason: broken

3.1.3

May 31, 2020 2 release files No provenance

3.1.2

May 5, 2020 2 release files No provenance

3.1.1

Apr 11, 2020 2 release files No provenance

3.1.0

Feb 24, 2020 2 release files No provenance

3.0.9

Feb 24, 2020 2 release files No provenance

3.0.8

Feb 17, 2020 2 release files No provenance

3.0.7

Feb 8, 2020 2 release files No provenance

3.0.6

Feb 8, 2020 1 release file No provenance

3.0.5

Nov 14, 2019 2 release files No provenance

3.0.4

Oct 22, 2019 2 release files No provenance

3.0.3

Oct 2, 2019 2 release files No provenance

3.0.2

Aug 22, 2019 2 release files No provenance

3.0.1

Aug 15, 2019 2 release files No provenance

3.0.0

Aug 12, 2019 2 release files No provenance

2.1.15

Feb 17, 2020 2 release files No provenance

2.1.14

Aug 14, 2019 2 release files No provenance

2.1.13

Jul 29, 2019 2 release files No provenance

2.1.12

Jul 21, 2019 2 release files No provenance

2.1.11

Jul 15, 2018 2 release files No provenance

2.1.10

May 19, 2018 2 release files No provenance

2.1.9

Mar 24, 2018 2 release files No provenance

2.1.8

Dec 11, 2017 2 release files No provenance

2.1.7

Sep 28, 2017 2 release files No provenance

2.1.6

Sep 25, 2017 2 release files No provenance

2.1.5

Jun 10, 2017 2 release files No provenance

2.1.4

Jun 10, 2017 2 release files No provenance

2.1.3

Mar 8, 2017 2 release files No provenance

2.1.2

Mar 8, 2017

2.1.1

Dec 8, 2016 2 release files No provenance

2.1.0

Oct 22, 2016 2 release files No provenance

2.0.9

Oct 16, 2016 2 release files No provenance

Pre-release

2.0.9.dev1

Oct 16, 2016 1 release file No provenance

Pre-release

2.0.9.dev0

Oct 9, 2016 1 release file No provenance

2.0.8

Aug 3, 2016 1 release file No provenance

2.0.7

Jul 17, 2016 1 release file No provenance

2.0.6

Jun 20, 2016 2 release files No provenance

2.0.5

May 30, 2016 2 release files No provenance

2.0.4

May 30, 2016 2 release files No provenance

2.0.3

May 24, 2016 2 release files No provenance

2.0.2

Apr 28, 2016 2 release files No provenance

2.0.1

Apr 24, 2016 2 release files No provenance

2.0.0

Apr 22, 2016 1 release file No provenance

1.0.2

Feb 11, 2016 1 release file No provenance

1.0.1

Apr 30, 2015 1 release file No provenance

1.0.0

Apr 8, 2015 1 release file No provenance

0.3.7

Apr 8, 2015 1 release file No provenance

0.3.6

Jan 22, 2015 1 release file No provenance

0.3.5

Jan 12, 2015 1 release file No provenance

0.3.4

Jan 6, 2015 1 release file No provenance

0.3.3

Jan 4, 2015 1 release file No provenance

0.3.2.1

Nov 18, 2014 1 release file No provenance

0.3.2

Nov 14, 2014 1 release file No provenance

Pre-release

0.3.2.RC1

Jul 6, 2011 1 release file No provenance

Pre-release

0.3.1-beta2

Nov 25, 2010 1 release file No provenance

Pre-release

0.3.0-beta2

Jul 9, 2010 1 release file No provenance

Pre-release

0.3.0-beta1

Jul 8, 2010 1 release file No provenance

Pre-release

0.2.0-beta1

Apr 7, 2010 1 release file No provenance

0.1.7

Mar 20, 2010 1 release file No provenance

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.