Skip to content

Latest commit

 

History

1,252 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProjectDirector

A desktop application for managing and comparing many Git repositories side by side.

License GitHub commit activity GitHub contributors GitHub Actions Workflow Status

Introduction

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.

Features

  • 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.

Requirements

  • .NET 9.0
  • Windows (the application uses a Dear ImGui desktop window)

Installation

git clone https://github.com/ktsu-dev/ProjectDirector.git
cd ProjectDirector
dotnet build

Usage

# Run the application
dotnet run

# Publish a distributable build
dotnet publish --configuration Release --output ./staging

On first run, set the development directory that ProjectDirector should scan and add the GitHub owners you want listed (File > Add New GitHub Owner). Give an owner a personal access token with File > Set GitHub Owner Token if its repositories are private or you want a higher rate limit.

The development directory, the owner list and the repository cache are persisted to the application data folder. Tokens are not: they go to the operating system's secret store — Windows Credential Manager, macOS Keychain, or libsecret (Secret Service) on Linux. A token saved by an earlier version is moved there on the next start and emptied where it was, so nothing needs re-entering.

Typical Workflow

  1. Point ProjectDirector at your development directory.
  2. Let it scan for local clones and fetch the remote repository list.
  3. Select a repository to see its details, or select a file to diff it across every repository that has one.
  4. Choose the version you want to keep and propagate it to the others.
  5. Review the log panel, then commit and push from your normal Git tooling.

Architecture

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, configured GitHub owners, repository cache, and UI state. Deliberately holds no tokens.
TokenStorage GitHub tokens in the OS secret store, keyed by a persona derived from the login or owner name, plus the one-time migration off the old plaintext fields.
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.

Key Dependencies

Package Used for
ktsu.RunCommand Runs the git command line — 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

Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

License

This project is licensed under the MIT License. See the LICENSE.md file for details.

About

A .NET desktop application for managing and comparing many Git repositories side by side. Scans a local development directory, browses GitHub and Azure DevOps remotes, fetches and pulls in bulk, diffs individual files across repositories, and propagates a chosen version of a file to the others.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages