Skip to content

Releases: dougcunha/GitTools

v2025.10

25 Jun 18:33
v2025.10
56a1824

Choose a tag to compare

v2025.09.1

25 Jun 14:35
v2025.09.1
b1de50f

Choose a tag to compare

v2025.09.1

v2025.09

25 Jun 13:34
v2025.09
11ad648

Choose a tag to compare

GitTools v2025.09 – 🚀 New Features 🚀

1. Enhanced Repository Scanning and Filtering

  • Repository Filtering 🔍:
    New global options allow you to filter which repositories are managed using wildcard patterns (e.g., --repository-filter "*-service"). The filter applies to commands that scan directories for repositories, making it easy to operate only on subsets of repositories matching specific naming conventions.

  • Submodule Inclusion Control:
    Users can now globally enable or disable scanning for Git submodules using the --include-submodules flag (default: true). This provides flexibility and performance improvements for large monorepos or multi-repo setups.

2. Improved Logging

  • File Logging:
    All console output can now be replicated to a log file using the new --log-file (or -lf) global option. This is especially useful for auditing or debugging batch operations.

  • Serilog Integration:
    Internally, logging uses Serilog for robust, file-based logging support.

3. Cross-Platform Environment Setup

  • Automated Linux/macOS Setup:
    Added setup-environment.sh, a comprehensive script for Linux/macOS to:

    • Install the .NET 9.0 SDK (with fallbacks for earlier versions if needed).
    • Install the ReportGenerator tool for code coverage reports.
    • Configure the PATH for .NET tools.
    • Support a wide range of distributions (Debian/Ubuntu, RHEL/CentOS, Fedora, Arch/Manjaro, snap-based fallback).
    • Provide help and troubleshooting guidance.
  • Cross-Platform Test Coverage:
    Added generate-coverage.sh for Linux/macOS. Now, in addition to the PowerShell script for Windows, users on Unix-like systems can generate and open coverage reports easily.

  • New Documentation:
    Introduced ENVIRONMENT_SETUP.md with detailed instructions for environment setup on all supported platforms.

4. Extended Global Command-Line Options

  • New options in all commands:

    • --repository-filter, -rf: Filter repositories by pattern.
    • --include-submodules, -is: Toggle submodule scanning.
    • --log-file, -lf: Write output to a specified log file.

    These are documented in the updated README.md.

5. Improved Test Suite and Utility Functions

  • Cross-Platform Path Normalization:
    Introduced FileSystemUtils in tests to ensure consistent path handling across Windows and Unix-like systems.

  • Repository Scanner Flexibility:
    The scanner now supports filtering, submodule inclusion toggling, and improved error handling.

  • Logging in Test Console:
    The AnsiConsoleWrapper now supports logging to both the console and a file.


Upgrade Note:
After updating, review README.md and ENVIRONMENT_SETUP.md for details on the new options and scripts. If you use CI or automation, consider updating your workflows to leverage the new environment setup and logging capabilities.

TLDR;

Full Changelog: v2025.08...v2025.09

v2025.08

24 Jun 13:26
v2025.08
5294503

Choose a tag to compare

GitTools v2025.08 – Release Notes

New Features

1. Global Options Support for All Commands

  • Global CLI Options: You can now use the following global options with any command:
    • --log-all-git-commands / -lg: Log all git commands executed by GitTools to the console (great for debugging).
    • --disable-ansi / -da: Disable ANSI color codes in output for plain text or incompatible terminals.
    • --quiet / -q: Suppress all console output for silent or scriptable operation.

Example Usage:

GitTools ls C:/Projects "v1.*" --log-all-git-commands
GitTools rm C:/Projects NET8 --disable-ansi
GitTools sync C:/Projects --quiet

2. Synchronize Command Enhancements

  • New Option: --no-fetch / -nf: The sync command now supports skipping remote fetch with the --no-fetch flag for faster status checks when remote updates are unnecessary.
  • Short Option Aliases: All main options in the sync command now have short aliases for quicker CLI usage:
    • --show-only / -so
    • --with-uncommitted / -wu
    • --push-untracked / -pu
    • --automatic / -a
    • --no-fetch / -nf

3. Improved Logging and Customization

  • Configurable Output: Output behavior (ANSI, quiet mode, logging) is now controlled via global options and is consistent across all commands.
  • Enhanced Command-Line Parsing: The internal CLI parser now supports middleware to handle and apply global options before command execution.

4. API and Internal Improvements

  • Repository Name Extraction: New static utility for reliably extracting repository names from paths.
  • Better Status Reporting: The repository status logic is improved for environments with different directory separators and edge cases.
  • Service Registration Updates: The startup and dependency injection setup now registers the new options and console wrapper services.
  • ANSI Console Wrapper: A new AnsiConsoleWrapper allows conditional console operations based on global flags.

5. Documentation Updates

  • The README now documents all global options and provides usage examples for the new features and command enhancements. The synchronize command documentation was updated to reflect new options and usage.

For a full list of changes, see the GitTools v2025.08 diff.

v2025.07

23 Jun 13:33
v2025.07
0a18724

Choose a tag to compare

New Command: sync (Synchronize)

Overview

A new CLI command, sync, has been added to GitTools to help users check and synchronize the status of local repositories with their remote counterparts. This is particularly useful for identifying and updating repositories that are out-of-sync (behind or ahead) with remote branches.

Usage

GitTools sync <root-directory> [--show-only] [--with-uncommitted] [--push-untracked] [--automatic]

Options

  • --show-only: Lists outdated repositories without making any changes.
  • --with-uncommitted: Includes repositories with uncommitted changes (stashing those changes before updating).
  • --push-untracked: Pushes untracked (local-only) branches to the remote repository.
  • --automatic: Runs without user interaction (suitable for scripts).

Features

  • Detect Out-of-Sync Repositories: Scans all repositories in a given directory and displays which ones are behind (or ahead) of their remote branch.
  • Batch Synchronization: Optionally update multiple repositories at once, with progress reporting.
  • Handles Uncommitted Changes: Optionally stashes and restores local changes for a safe update.
  • Interactive and Scripting Modes: Choose repositories to update interactively or run fully automatic for CI/CD or scripting scenarios.
  • Comprehensive Status Table: Visual status table with ahead/behind counts, tracked/untracked branches, and error indicators.
  • Service and UI Layer: Includes new services for displaying repository status and handling scan errors in a user-friendly way.

Documentation

See the new section in the README under Synchronize (sync) for usage details.


Other Related Improvements

  • Bulk Restore Command (restore):
    • Added a new --force-ssh option to convert all repository URLs in a backup JSON file to SSH before cloning.
    • Example:
      GitTools restore repos.json <target-directory> --force-ssh

Summary of Code Additions

  • Added SynchronizeCommand and associated services (ConsoleDisplayService, status models).
  • Updated the DI setup (Startup.cs) to register new services and the new command.
  • README updated with new documentation and usage examples for the sync command and the new --force-ssh option for restores.

In short:
The v2025.07 release introduces a powerful new sync command for keeping your repositories up-to-date with their remotes, along with enhancements to bulk restore operations. See the README for complete usage!

v2025.06.01

18 Jun 14:15
v2025.06.01
d858706

Choose a tag to compare

🛠 Improvements & Fixes

ReClone Command Overhaul

  • The reclone command now uses the argument name repository-path instead of repository-name, supporting both absolute and relative paths. This better reflects its ability to handle repositories outside the current working directory.
  • All relevant code, help messages, and documentation have been updated to use repository-path.
  • Improved the logic for validating repository paths and normalized handling throughout the codebase and tests.

API Consistency

  • The IGitService.GetGitRepositoryAsync method now takes a repository path instead of just a name, aligning the interface and implementation with practical usage.

Documentation Updates

  • The README.md has been updated:
    • Examples and parameter descriptions for the reclone command now use repository-path.
    • Added more explicit example usages for both relative and absolute paths.

Bug Fixes

  • Fixed a typo in the test output assertion for the message "No repositories selected for restore".
  • Improved test coverage and consistency, particularly in the ReCloneCommandTests and GitServiceTests.

Summary:
This release focuses on making the reclone command more flexible and intuitive, with improved path handling, updated documentation, and better test coverage. It also addresses minor bugs and enhances codebase clarity.

v2025.06

18 Jun 13:16
v2025.06
3d0d0b5

Choose a tag to compare

🚀 New Features

Bulk Backup and Restore Support

  • Bulk Backup Command (bkp): Added a new command to generate a JSON file containing the remote URLs for all Git repositories found under a specified directory. This allows users to easily export the structure of all their repositories for backup purposes.
  • Bulk Restore Command (restore): Introduced a command to restore (clone) repositories in bulk from a JSON configuration file produced by the backup command. The user can interactively select which repositories to restore.

Enhanced Documentation

  • Updated the README.md to include documentation and usage examples for the new bkp and restore commands.
  • The list of available commands in the documentation has been expanded from three to five, reflecting the new features.

🛠 Internal and Testing Improvements

  • Added comprehensive unit tests for the new BulkBackupCommand and BulkRestoreCommand functionality.
  • Improved service registration and ensured singleton lifetimes for the new commands.
  • Updated test coverage for startup and root command registration to include the new features.
  • Consistently use a snake_case naming policy for JSON serialization in GitRepository objects to ensure compatibility and clarity.

⚙️ Other Changes

  • Refactored internal startup routines to register and wire up the new commands.
  • Minor code and code coverage improvements in test files.

Summary:
This release brings powerful new options for bulk backing up and restoring Git repositories, making it easier to manage, migrate, or recover large sets of repositories. The documentation and test suite have been updated to support and verify these enhancements.

v2025.05

16 Jun 21:30
v2025.05
bdb42f2

Choose a tag to compare

What's Changed

Full Changelog: v2025.04...v2025.05

v2025.04

16 Jun 17:57
v2025.04
1516bde

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 2025.03...v2025.04