View on GitHub Download

Multi-Repository Git Dependency Manager

A PowerShell tool that checks out multiple Git repositories to specified versions with recursive dependency resolution, SemVer support, cross-platform SSH, and API compatibility checking.

PowerShell 7.6 LTS Cross-Platform SemVer v8.0.1
# Clone and checkout dependencies to specified versions
pwsh ./LsiGitCheckout.ps1 -InputFile dependencies.json

Features

SemVer Dependency Resolution

Automatic version resolution with floating version patterns (x.y.*, x.*). Cross-major version conflicts are rejected by convention.

Recursive Dependencies

Walk dependency trees with configurable max depth, conflict detection, and API compatibility checking in Strict or Permissive mode.

Cross-Platform SSH

PuTTY/Pageant on Windows, OpenSSH on macOS/Linux. Same credential file format, platform-appropriate transport. Handles HTTPS repos with SSH submodules.

Structured JSON Output

Machine-readable results via -OutputFile with per-repo status, requestedBy parent chain, and post-checkout script tracking.

Post-Checkout Scripts

Execute PowerShell scripts after successful checkouts for integration with external build systems and dependency managers.

Automated Testing

65 unit tests and 18 integration tests with Pester 5.x. Full coverage of SemVer parsing, version compatibility, and all test configurations.

Supported Platforms

Component Windows macOS Linux
PowerShell 7.6 LTS (side-by-side with 5.1) 7.6 LTS 7.6 LTS
SSH Transport PuTTY/plink + Pageant (.ppk) OpenSSH (bundled) OpenSSH (bundled)
HTTPS Auth Git Credential Manager Git Credential Manager GCM or PAT
Git LFS Optional Optional Optional

Quick Start

1

Create a dependency file

Define your repositories, versions, and resolution mode in a JSON configuration file.

2

Configure SSH credentials

Map hostnames to SSH key paths in git_credentials.json. Supports both PuTTY and OpenSSH key formats.

3

Run the checkout

Execute pwsh ./LsiGitCheckout.ps1 -InputFile dependencies.json and all repositories are cloned, checked out to the right version, with submodules initialized.

Read the Full Documentation