{"id":45187603,"url":"https://github.com/violetcranberry/git-differ-tool","last_synced_at":"2026-02-20T11:04:13.042Z","repository":{"id":181614670,"uuid":"667042289","full_name":"VioletCranberry/git-differ-tool","owner":"VioletCranberry","description":"Extendable framework built around PyDriller to easily extract information about commits in multiple Git repositories with additional formatting added.","archived":false,"fork":false,"pushed_at":"2023-07-16T15:35:47.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-04-30T11:52:55.583Z","etag":null,"topics":["commit","github","productivity","pydriller","python","tracking"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VioletCranberry.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-07-16T12:59:43.000Z","updated_at":"2023-07-16T13:07:55.000Z","dependencies_parsed_at":"2023-10-11T07:00:22.016Z","dependency_job_id":null,"html_url":"https://github.com/VioletCranberry/git-differ-tool","commit_stats":{"total_commits":3,"total_committers":2,"mean_commits":1.5,"dds":"0.33333333333333337","last_synced_commit":"59c33e233fda5fae6de9884093759f08d787bbd9"},"previous_names":["violetcranberry/git-differ-tool"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VioletCranberry/git-differ-tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VioletCranberry%2Fgit-differ-tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VioletCranberry%2Fgit-differ-tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VioletCranberry%2Fgit-differ-tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VioletCranberry%2Fgit-differ-tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VioletCranberry","download_url":"https://codeload.github.com/VioletCranberry/git-differ-tool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VioletCranberry%2Fgit-differ-tool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29648473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T09:27:29.698Z","status":"ssl_error","status_checked_at":"2026-02-20T09:26:12.373Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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"}},"keywords":["commit","github","productivity","pydriller","python","tracking"],"created_at":"2026-02-20T11:04:12.343Z","updated_at":"2026-02-20T11:04:13.035Z","avatar_url":"https://github.com/VioletCranberry.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Git Differ Tool\n\nExtendable framework built around [PyDriller](https://github.com/ishepard/pydriller) to easily extract information \nabout commits in multiple Git repositories with the following functionality added:\n\n1. keeping cached repositories up-to-date on subsequent runs (if `clone_repo_to` is supplied to `repository_params` - see configuration below)\n2. extension of JIRA references in commit messages (based on provided Jira project keys)\n3. extension of GitHub Pull Request references in commit messages\n4. generation of GitHub commit URLs\n\nExample for a single GIT repository:\n\n```\nlist of commits to repository git@github.com:kubernetes/kubernetes.git from commit 5c96e53 to commit 900237f:\n1. Implement KEP-3836 - https://github.com/kubernetes/kubernetes/commit/9b1c4c7b57f7fbdd776f5103c89ed1f461c295d0\n2. Implement metrics agreed on the KEP - https://github.com/kubernetes/kubernetes/commit/08dd657a71c07cf5e71e1b191fd9e8588786b3db\n3. kubelet: devices: skip allocation for running pods - https://github.com/kubernetes/kubernetes/commit/3bcf4220ece998d626ae670f911f8a1a1bb31507\n4. e2e: node: devicemanager: update tests - https://github.com/kubernetes/kubernetes/commit/b926aba2689f5f89de9a13e3a647aab7ee0aa108\n5. e2e: node: devices: improve the node reboot test - https://github.com/kubernetes/kubernetes/commit/5cf50105a2b58ae5660d68df729b8a609fa01536\n6. e2e: node: add test to check device-requiring pods are cleaned up - https://github.com/kubernetes/kubernetes/commit/d78671447f22203e13b83eb03dabe728718fdaaf\n7. node: devicemgr: topomgr: add logs - https://github.com/kubernetes/kubernetes/commit/c635a7e7d8362ac7c706680e77f7680895b1d517\n8. Merge pull request https://github.com/kubernetes/kubernetes/pull/119324 from xmudrii/go1206 - https://github.com/kubernetes/kubernetes/commit/5c96e5321e6b4c4875cdbc61c121c27e3e1f189d\n9. Merge pull request https://github.com/kubernetes/kubernetes/pull/116470 from alexanderConstantinescu/kep-3836-impl - https://github.com/kubernetes/kubernetes/commit/f34365789d4161f1b47f998bc82250620eed183b\n10. Merge pull request https://github.com/kubernetes/kubernetes/pull/118635 from ffromani/devmgr-check-pod-running - https://github.com/kubernetes/kubernetes/commit/900237fada63a88b0b1dbb5f8a20ae73b959df12\n```\n\nNote: [PyDriller](https://github.com/ishepard/pydriller) is built around [GitPython](https://github.com/gitpython-developers/GitPython)\nand the latter is used in a couple of places to support progress bars for git clone operations and execute raw git commands.\n\nRequires Python 3.6 or greater.\n\n### Installation \u0026 run:\n```shell\n❯ pip3 install -r requirements.txt\n❯ python3 differ.py --help\nusage: differ.py [-h] --config_file CONFIG_FILE [--releases_file RELEASES_FILE] [-d]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --config_file CONFIG_FILE\n                        buckets configuration file path\n  --releases_file RELEASES_FILE\n                        releases file path that contains additional commit information to merge with buckets config file\n  -d, --debug           debug mode\n❯ python3 differ.py --config_file ./config.yaml (optional: --releases_file ./releases.yaml)\n```\n\n### Project structure:\n```text\n❯ tree -I 'venv|cache|*.txt|*.md' .\n.\n├── config.yaml   # default (parent) buckets configuration file \n├── differ.py     # main entry point\n├── parsers.py    # collection of repository parsers classes\n├── releases.yaml # optional: file with additional configuration to use with parent config file\n└── utils.py      # collection of utility functions \n```\n\n### Single bucket configuration:\n```yaml\nbuckets:\n  - name: MyBucketName            # bucket name\n      parser: GitRepoCommitPretty # class name from parsers package \n      repository_params:\n        # local and remote repositories are supported \n        path_to_repo: \"git@github.com:\u003corg/user\u003e/\u003crepo\u003e.git\"\n        clone_repo_to: \"./cache\"\n        # all other parameters that pydriller.repository class supports:\n        # see https://pydriller.readthedocs.io/en/latest/repository.html#selecting-projects-to-analyze\n      parser_params:\n        # all parameters that parser class supports:\n        # see parser_params attributes of parser classes\n```\n\n### RELEASES_FILE configuration:\n\nIf no `--releases_file` arg is provided as a script argument all the buckets specified in `--config_file` configuration file are processed. \nIn case `--releases_file` is set, for each bucket in `--releases_file` configuration file the bucket configuration is merged into \n`repository_params` of the parent bucket under `--config_file` and only these buckets are processed.\n\nCurrent merge schema:\n```text\nbuckets:\n  - name: MyBucketName               # -\u003e name of the bucket in config_file                 \n    commits:\n      from_commit: commit_SHA # -\u003e repository_params.from_commit \n      to_commit: commit_SHA    # -\u003e repository_params.to_commit\n```\n\n### Setting up new parsers:\n\n1. Define new parser class in `parsers` package as a child class of `parsers.GitRepositoryParser`\n2. Write logic around new attributes to support via bucket `parser_params`\n3. Have the bucket configured accordingly\n4. Update `Readme.md` with new functionality","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvioletcranberry%2Fgit-differ-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvioletcranberry%2Fgit-differ-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvioletcranberry%2Fgit-differ-tool/lists"}