gitcommit

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 14, 2025 License: MIT

README ΒΆ

gitcommit - Git Commit Date Setter

Go Report Card GitHub release GitHub Downloads Coverage Badge linter coverage Snapshot Build Release Build License

A command-line tool that enables developers to create Git commits with specific historical dates while maintaining chronological integrity.

Features

  • ✨ Create commits with custom dates in format YYYY-MM-DD HH:MM:SS
  • πŸ”’ Validates dates maintain chronological order (no backdating before last commit)
  • 🌍 Automatic local timezone detection
  • πŸš€ Fast and lightweight (Go stdlib only, no external dependencies)
  • πŸ“ Clear, actionable error messages
  • βœ… POSIX-compliant CLI interface (--help, --version)

Installation

From Source
git clone https://github.com/sgaunet/gitcommit.git
cd gitcommit
make install
Verify Installation
gitcommit --version

Quick Start

# Stage your changes
git add .

# Create commit with custom date
gitcommit "2025-02-05 20:19:19" "Historical commit message"

Usage

gitcommit <date> <message>

Arguments:

  • <date>: Date and time in format YYYY-MM-DD HH:MM:SS
  • <message>: Commit message text

Flags:

  • --help, -h: Show usage information
  • --version, -v: Show version number

Examples

# Basic usage
gitcommit "2025-02-05 20:19:19" "Add feature X"

# Backdating offline work
gitcommit "2025-01-15 10:00:00" "Work done offline"

# First commit in new repository
git init
git add README.md
gitcommit "2025-01-01 00:00:00" "Initial commit"

Requirements

  • Go: 1.21 or later (for building)
  • Git: 2.20 or later
  • Platforms: Linux, macOS, Windows

Date Format Rules

  • βœ… Format: YYYY-MM-DD HH:MM:SS (24-hour time)
  • βœ… Date must be after the last commit in the repository
  • βœ… Future dates are allowed
  • βœ… Empty repositories accept any date
  • ❌ Dates equal to or before the last commit are rejected

Development

# Build
make build

# Run tests
make test

# Run linter
make lint

# Format code
make fmt

# View all commands
make help

Testing

# Run all tests with coverage
make coverage

# Run specific test
go test -v ./internal/datetime/...

Architecture

cmd/gitcommit/          # CLI entry point
internal/
  β”œβ”€β”€ cli/              # CLI logic and orchestration
  β”œβ”€β”€ datetime/         # Date parsing, validation, formatting
  └── git/              # Git repository operations
tests/
  β”œβ”€β”€ integration/      # Integration tests
  └── testdata/         # Test fixtures

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes
  4. Push to the branch
  5. Open a Pull Request

License

MIT License - see LICENSE file for details.

Use Cases

  • πŸ“… Organizing repository history chronologically
  • πŸ’Ό Backdating work done offline
  • πŸ”„ Migrating commits from other version control systems
  • πŸ“Š Maintaining accurate project timelines

Troubleshooting

Error: "Invalid date format"

  • Use exact format: YYYY-MM-DD HH:MM:SS
  • Example: 2025-02-05 20:19:19

Error: "Chronology violation"

  • Ensure date is after your last commit
  • Check: git log -1 --format="%aI"

Error: "Not a Git repository"

  • Run from inside a Git repository
  • Or initialize: git init

Performance

  • Date parsing & validation: <10ms
  • Git operations: <100ms
  • Total operation: <200ms (p95)

Credits

Built with ❀️ using Go standard library only.


Version: 1.0.0 Status: Production Ready

Directories ΒΆ

Path Synopsis
cmd
gitcommit command
Package main provides the entry point for the gitcommit CLI tool.
Package main provides the entry point for the gitcommit CLI tool.
internal
cli
Package cli provides the command-line interface logic and orchestration for gitcommit.
Package cli provides the command-line interface logic and orchestration for gitcommit.
datetime
Package datetime provides date parsing, validation, and formatting utilities for gitcommit.
Package datetime provides date parsing, validation, and formatting utilities for gitcommit.
git
Package git provides Git repository operations and commit execution for gitcommit.
Package git provides Git repository operations and commit execution for gitcommit.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL