A desktop application for managing and comparing many Git repositories side by side.
ProjectDirector is a .NET desktop application for working across a large collection of related Git repositories at once. It scans a local development directory, pairs what it finds with your remote repositories on GitHub and Azure DevOps, and gives you a single window from which to fetch, pull, diff, and propagate changes.
It exists for the case where the same file — a workflow, an editorconfig, a shared props file — drifts across dozens of sibling repositories, and you want to see the differences and push one canonical version out to the rest.
- Repository Discovery: Scans a configured development directory for local clones and lists them alongside your remote repositories.
- Multi-Provider Remotes: Browses repositories from GitHub (via Octokit) and Azure DevOps.
- Bulk Git Operations: Fetch and pull across many repositories, with per-repository status and timing.
- Cross-Repository Diffing: Compares a given file across every repository that contains it and shows a line-by-line diff.
- File Propagation: Copies a chosen version of a file out to the other repositories that have it, so a shared file can be reconciled in one step.
- Three-Panel Layout: Repository list on the left, repository detail and diff view on the right, and an operation log along the bottom.
- Persistent State: Development directory, credentials, repository cache, and UI layout are saved between sessions.
- .NET 9.0
- Windows (the application uses a Dear ImGui desktop window)
git clone https://github.com/ktsu-dev/ProjectDirector.git
cd ProjectDirector
dotnet build# Run the application
dotnet run
# Publish a distributable build
dotnet publish --configuration Release --output ./stagingOn first run, set the development directory that ProjectDirector should scan and supply GitHub credentials if you want remote repositories listed. Both are persisted to the application data folder, so subsequent runs start where you left off.
- Point ProjectDirector at your development directory.
- Let it scan for local clones and fetch the remote repository list.
- Select a repository to see its details, or select a file to diff it across every repository that has one.
- Choose the version you want to keep and propagate it to the others.
- Review the log panel, then commit and push from your normal Git tooling.
| Component | Responsibility |
|---|---|
ProjectDirector |
Main application class: ImGui loop, three-panel layout, and the fetch/pull/diff/propagate operations. |
ProjectDirectorOptions |
Application state persisted as JSON — dev directory, credentials, repository cache, and UI state. |
GitRepository |
Abstract repository model with polymorphic JSON serialization. |
GitHubRepository / AzureDevOpsRepository |
Provider-specific repository implementations. |
PopupPropagateFile |
Modal that drives the file propagation flow. |
DictionaryOfHashSets |
Helper collection for grouping repositories by file hash. |
| Package | Used for |
|---|---|
| LibGit2Sharp | Git operations — clone, fetch, pull, status |
| Octokit | GitHub API access |
| DiffPlex | Line-by-line file diffing |
| ktsu.ImGuiApp | Application shell and window management |
| ktsu.AppDataStorage | Persistent options storage |
| ktsu.Semantics | Type-safe paths and identifiers |
Contributions are welcome! Feel free to open issues or submit pull requests.
This project is licensed under the MIT License. See the LICENSE.md file for details.