An estimated time spent on a Git repository report.
Please note that the information might not be accurate enough to be used for billing.
The package is written in 100% vanilla JavaScript without dependencies (excluding dev-dependencies) so that it can run on most versions of Node.js.
It is recommended not to install it globally, but instead use:
npx hours-report
By default, the output is a CSV file like the following:
The file can then be opened in Excel, Google Sheets, etc.
Usage:
hours-report <options>
Options:
-e, --email Email address. Default: current Git user email address
-mx, --max-diff-for-session Maximum difference in minutes between commits counted in one session. Default: 120
-mn, --min-session Minimum minutes added for the first commit of a session. Default: 30
-df, --date-from Analyze data since this date (Git log format). Default: always (max 1000 rows)
-du, --date-until Analyze data until this date (Git log format). Default: now
-fr, --format Output format: csv | console | xlsx. Default: xlsx
-o, --output Output folder. Default: temp/hours-report
-p, --path Git repository to analyze. Default: current folder (.)
-h, --help Prints help options
Examples:
-
Estimate hours for the current repository:
hours-report
-
Estimate hours in a repository where developers have long pauses (e.g., 4 hours) between commits:
hours-report --max-diff-for-session=240
For more information, see the documentation.
Inspired by:
- Node.js 12
- Node.js 14
- Node.js 16
- Node.js 18
- Node.js 20
The package is written in vanilla JavaScript with no dependencies (only TypeScript as a dev dependency), allowing support for Node.js versions 12–18.
- Node.js 19
For development, use Node.js 18 or later.
All tests are written with the Node.js test runner (available in these versions) and use type-related dev dependencies.
npm i hours-report
Unit tests use the new experimental Node.js test runner:
npm test
Contains only one test, used for CI purposes and Node.js version compatibility:
npm run e2e
Version 1.1.7
Fixed Typos and Improved Documentation
Version 1.1.6
Fixed Issue #36