{"id":37056812,"url":"https://github.com/integerman/gitstractor","last_synced_at":"2026-01-14T06:25:50.929Z","repository":{"id":149513233,"uuid":"616208022","full_name":"IntegerMan/gitstractor","owner":"IntegerMan","description":"A library for visualizing the commits, authors, and files of any git repository","archived":false,"fork":false,"pushed_at":"2024-08-14T02:28:23.000Z","size":9409,"stargazers_count":24,"open_issues_count":11,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-27T23:42:39.901Z","etag":null,"topics":["code-analysis","data-analysis","data-visualization","dotnet","git","powerbi","repository-management","static-code-analysis","utilities","visualization"],"latest_commit_sha":null,"homepage":"https://GitStractor.com","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IntegerMan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["IntegerMan"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2023-03-19T22:49:38.000Z","updated_at":"2025-04-15T14:27:02.000Z","dependencies_parsed_at":"2024-05-28T03:22:45.875Z","dependency_job_id":null,"html_url":"https://github.com/IntegerMan/gitstractor","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/IntegerMan/gitstractor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntegerMan%2Fgitstractor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntegerMan%2Fgitstractor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntegerMan%2Fgitstractor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntegerMan%2Fgitstractor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IntegerMan","download_url":"https://codeload.github.com/IntegerMan/gitstractor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntegerMan%2Fgitstractor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28412211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["code-analysis","data-analysis","data-visualization","dotnet","git","powerbi","repository-management","static-code-analysis","utilities","visualization"],"created_at":"2026-01-14T06:25:50.433Z","updated_at":"2026-01-14T06:25:50.924Z","avatar_url":"https://github.com/IntegerMan.png","language":"Jupyter Notebook","readme":"# GitStractor - Git Repository Analysis Tool\nProject by [Matt Eland](https://LinkedIn.com/in/matteland) ([@IntegerMan](https://twitter.com/IntegerMan))\n\nThis project is built for extracting commit, author, and file data from local git repositories in order to visualize repository history and trends to provide insight to software development teams and their stakeholders.\n\nHere are a few examples of the types of visualizations that can be generated using GitStractor:\n\nStacked bar chart of # of commits per month by day of week:\n![Accessible AI Blog Posts by Month](./Images/AccessibleAIBlogPostsByMonth.png)\n\nTree map of the # of commits per file:\n![GitStractor # Commits by File](./Images/GitStractorFileCommits_April_1_2023.png)\n\nScatter plot of files in each commit:\n![GitStractor # Files per Commit](./Images/GitStractorFilesPerCommit_April_1_2023.png)\n\n## Disclaimer\n\nThis project is in technical preview and will have bugs, inaccuracies, and numerous other issues. Use at your own risk.\n\nAdditionally, this project is intended to help you get a sense of the overall trends in your source code. It should not be used for performance evaluation purposes as its data is not yet known to be reliable and git history is not a good indicator of an indivual's performance.\n\n## Usage Instructions\n\nGitStractor currently has two components:\n- A command line tool for extracting data from a local git repository\n- A Jupyter notebook for visualizing the extracted data\n\nData is extracted using the **GitStractor-Extract** tool. You can build this by opening `GitStractor\\GitStractor.sln` in [Visual Studio](https://visualstudio.microsoft.com/) and setting `GitStractor-Extract` as the startup project.\nSee **Extracting Commit Data** below for more information.\n\nOnce data is extracted, you can visualize it in a [Jupyter Notebook](Notebooks/GitStractor.ipynb).\nSee **Visualizing Commit Data in Jupyter Notebooks** below for more information.\n\n### Extracting Commit Data\n\nTo get started, you'll need to run the `GitStractor` project in the `GitStractor\\GitStractor.sln` solution.\n\nYou can either run the program from the command line once you've built it, or you can customize `launchSettings.json` to meet your needs.\n\nSome common usage scenarios:\n\nExtract git information from the git repository at C:\\Dev\\Interactive and store the resulting CSV files in C:\\GitStractor\n```\nGitStractor-Extract --source C:\\Dev\\Interactive --destination C:\\GitStractor\n```\n\nExtract git information from the git repository at C:\\Dev\\Interactive and store the resulting CSV files in C:\\GitStractor. \nIgnore .gif, .txt, .json, and .d.ts files.\n```\nGitStractor-Extract -s C:\\Dev\\Interactive -d C:\\GitStractor --ignore .gif,.txt,.json,.d.ts\n```\n\nExtract git information from the git repository at C:\\Dev\\Interactive and store the resulting CSV files in C:\\GitStractor. \nDo not analyze commits off the current branch. This will analyze merge commits and may misattribute commits to the user that merged them. It is also considerably faster.\n```\nGitStractor-Extract -s C:\\Dev\\Interactive -d C:\\GitStractor --includebranches false\n```\n\nExtract git information from the git repository at C:\\Dev\\Interactive and store the resulting CSV files in C:\\GitStractor. \nUses an authormap.json file to rename or merge together users. This is handy when you have users that have committed under different E-Mail addresses or changed their names.\n```\nGitStractor-Extract -s C:\\Dev\\Interactive -d C:\\GitStractor --authormap C:\\Dev\\AuthorMap.json\n```\n\nAn `AuthorMap.json` file should be structured like this:\n\n```json\n[\n    {\n        \"name\": \"Matt Eland\",\n        \"emails\": [\"meland@gitstractor.com\", \"matt@gitstractor.com\"]\n    },\n    {\n        \"name\": \"GitStractor\",\n        \"emails\": [\"noreply@gitstractor.com\"],\n        \"bot\": true\n    }\n]\n```\n\n### Visualizing Commit Data in Jupyter Notebooks\n\nTo view the full range of data visualizations in Jupyter Notebooks, open the `GitStractor.ipynb` Jupyter notebook in the `Notebooks` folder. \n\nOnce there, change the `project_name` variable to reflect your project and change the `data_dir` to indicate the directory your GitStractor .csv files from the prievious step are located.\n\nFrom there, run the notebook from top to bottom to generate recommendations.\n\nIn order to work with Jupyter Notebooks, I recommend you install [Anaconda](https://www.anaconda.com/download/) and [VS Code](https://code.visualstudio.com/Download).\n\n## What's Next?\n\nFuture efforts on this project will focus on:\n\n- Creating a desktop application for extracting and visualizing data\n- Expanding the range of visualizations available in the Jupyter notebook\n- Improving the user experience pulling data from larger repositories\n- Adding machine learning capabilities for commit classification and clustering\n\nIf you'd like to submit a feature request or view the current backlog, please visit the [GitHub Issues tab](https://github.com/IntegerMan/gitstractor/issues)\n\n## Contact\n\nContact [Matt Eland](https://MattEland.dev) for general questions and feedback.\n\nPlease open an issue for enhancement requests and bug reports.\n","funding_links":["https://github.com/sponsors/IntegerMan"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintegerman%2Fgitstractor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fintegerman%2Fgitstractor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintegerman%2Fgitstractor/lists"}