Package Exports
- @developerisnow/git-repositories-statistic-analyzer
- @developerisnow/git-repositories-statistic-analyzer/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@developerisnow/git-repositories-statistic-analyzer) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Git Repositories Statistics Analyzer
A powerful Node.js tool for analyzing multiple Git repositories and generating comprehensive statistics. Perfect for developers and teams who need to track and analyze Git repositories at scale.
๐ Features
- ๐ Analyze multiple Git repositories in bulk
- ๐ System-wide repository scanning
- ๐ Detailed Git metrics and repository information
- ๐ CSV output with proper formatting
- ๐ฏ Username and empty repository filtering
- โก Asynchronous processing
- ๐ก๏ธ TypeScript support
- ๐ Comprehensive repository statistics
๐ฆ Installation
# Using npm
npm install -g @developerisnow/git-repositories-statistic-analyzer
# Using pnpm (recommended)
pnpm add -g @developerisnow/git-repositories-statistic-analyzer
# Using yarn
yarn global add @developerisnow/git-repositories-statistic-analyzer๐ฎ Command Line Usage
Basic Usage
# Analyze specific repositories
git-repositories-statistic-analyzer --folderPath=/path/to/repos --repoList=/path/to/repo_list.txt
# Scan all repositories in the system
git-repositories-statistic-analyzer --folderPath=all --repoList=all
# Filter repositories by username
git-repositories-statistic-analyzer --folderPath=all --repoList=all --filter "UsernamesUrlRepos:username1,username2"
# Find local repositories (no remote URLs)
git-repositories-statistic-analyzer --folderPath=all --repoList=all --filter "UsernamesUrlRepos:Empty"Options
--folderPath: Base directory containing Git repositories or "all" for system scan--repoList: Path to repository list file or "all" for automatic discovery--filter: Filter results (e.g., "UsernamesUrlRepos:user1,user2" or "UsernamesUrlRepos:Empty")
๐ป Programmatic Usage
import { GitAnalyzer, GitScanner } from '@developerisnow/git-repositories-statistic-analyzer';
async function analyzeRepositories() {
// Load ignore patterns
const ignorePatterns = await GitScanner.loadIgnorePatterns('.scanignore');
// Find repositories
const scanner = new GitScanner(ignorePatterns);
const repoPaths = await scanner.findGitRepos();
// Analyze each repository
const analyzer = new GitAnalyzer(process.cwd());
const results = [];
for (const repoPath of repoPaths) {
const stats = await analyzer.analyzeRepository(repoPath);
if (stats) {
results.push(stats);
}
}
return results;
}๐ Output Format
The tool generates a CSV file with the following columns:
| Column | Description |
|---|---|
| nameFolder | Repository folder name |
| usernamesUrlRepos | Usernames from remote URLs |
| gitFolderSize | Size of the .git folder (in MB) |
| dateLastCommit | Date of the most recent commit (YYYY-MM-DD) |
| messageLastCommit | Message of the last commit |
| amountTotalCommits | Total number of commits |
| ageRepo | Repository age in days |
| dateFirstCommit | Date of the first commit (YYYY-MM-DD) |
| urlsRepo | Repository remote URLs (cleaned format) |
| amountUncommitedFiles | Number of uncommitted files |
| hashLastCommit | Hash of the last commit |
| pathFolder | Full path to the repository |
See git_statistic.example.csv for an example output.
๐ ๏ธ Configuration
Repository List Format
Create a text file with one repository folder name per line:
repo1_folder
repo2_folderIgnore Patterns (.scanignore)
Create a .scanignore file to specify patterns to ignore:
**/node_modules/**
**/vendor/**
**/dist/**
# Add more patterns as needed๐งช Development
# Install dependencies
pnpm install
# Run tests
pnpm test
# Run tests with coverage
pnpm test:coverage
# Format code
pnpm format
# Lint code
pnpm lint
# Build the project
pnpm build
# Run in development mode
pnpm dev๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ค Author
developerisnow
- Github: @developerisnow
- npm: @developerisnow
โญ๏ธ Show your support
Give a โญ๏ธ if this project helped you!