What Is GitManager
GitManager solves the "commit push" problem. If you maintain multiple projects that share code, skills, configs, or any files from external upstream repositories, GitManager automates the entire pipeline:
Upstream Repo A (GitHub)
Upstream Repo B (GitHub) → git pull → Forward selected paths → git commit + push
Upstream Repo C (GitHub) to your project dirs to your repo
No more manually pulling repos, copying folders, and committing changes. GitManager does it all — on a schedule, in the background, with a beautiful dashboard to control everything.
No cloud. No account required. Runs entirely on your machine.
How It Works
Step 1 — Create a Project
Click + in the sidebar. Give it a name and the absolute path to your local Git repository.
Step 2 — Add Upstreams
For each upstream source, define:
- Name — a label (e.g.
claude-skills) - URL — the GitHub clone URL (optional if already cloned locally)
- Branch — which branch to track (default:
main) - Path — where to clone it on your machine
Step 3 — Define Path Forwards
For each upstream, specify which directories or files to copy into your project:
FROM: /home/user/.claude-skills/skills/python-patterns
TO: /home/user/my-project/skills/python-patterns
Step 4 — Set the Schedule
Set the sync interval in minutes in the toolbar. Click Run to start the background worker — it will pull upstreams, forward paths, commit changes, and push automatically.
API Reference
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/auth/login |
Login with username & password |
POST |
/api/auth/logout |
Logout (requires auth) |
GET |
/api/auth/check |
Check current session |
GET |
/api/projects |
List all projects |
POST |
/api/projects |
Create a new project |
GET |
/api/projects/{id} |
Get project details |
PUT |
/api/projects/{id} |
Update project config |
DELETE |
/api/projects/{id} |
Delete a project |
POST |
/api/projects/{id}/run |
Start background sync worker |
POST |
/api/projects/{id}/stop |
Stop background sync worker |
1. First Launch
Start the server:
python main.py
Open http://localhost:8000 in your browser. You will see the login page.
GitManager automatically kills any stale process on port 8000 before
starting — no manual cleanup needed if you left a session running in the background.
Enter the credentials you set in .env:
GM_USERNAME=admin
GM_PASSWORD=your_password
After login, you land directly on the dashboard. Your session is stored as an HMAC-signed cookie that survives server restarts — you will stay logged in until you explicitly click Exit.
2. Creating a Project
Click the + button at the top-right of the sidebar.
Fill in:
- Project Name — a human-readable label (e.g.
human-skills) - Project Path — the absolute path to your local Git repository (e.g.
/home/user/human-skills)
Click Create. The project appears in the sidebar and is immediately selected.
Your project directory must already be a Git repository (git init or
cloned). GitManager does not initialize Git repos for you.
3. Adding Upstreams
Click + Upstream in the toolbar. A new empty row appears in the Upstreams section.
Fill in each field:
| Field | Description | Example |
|---|---|---|
| Name | Identifier for this upstream | claude-skills |
| URL | GitHub clone URL (optional if path already exists) | https://github.com/user/repo.git |
| Branch | Which branch to track | main |
| Path | Where to clone/pull the upstream repo | /home/user/.claude-skills |
| Toggle | Enable or disable pulling this upstream | ON |
Auto-Clone: If the path does not exist and a URL is provided,
GitManager will run git clone -b <branch> <url> <path>
on the first sync.
Branch Sync Strategy: GitManager uses
git fetch origin <branch> +
git reset --hard origin/<branch> instead of plain
git pull. This guarantees a clean sync even if the upstream had a
force-push, without merge conflicts.
4. Defining Path Forwards
Path Forwards define which files or directories from an upstream get copied into your project.
Click + Forward in the toolbar. A new row appears in the Path Forwards section.
| Field | Description | Example |
|---|---|---|
| From | Source path (inside the upstream clone) | /home/user/.claude-skills/skills/python-patterns |
| To | Destination path (inside your project) | /home/user/my-project/skills/python-patterns |
| Toggle | Enable or disable this forward rule | ON |
Rules:
- If
Fromis a directory, the entire directory is copied recursively. - If
Fromis a file, only that file is copied. - Multiple forwards can safely write to the same destination directory using the Wipe-Once Merge Strategy (the destination is cleared only once before the first forward rule writes to it, preserving subsequent copies).
5. Configuring Git Settings
In the Manual Commit Template section, customize the commit message format.
Available placeholders:
{count}— number of files changed{datetime}— timestamp of the sync
6. Running the Sync Worker
Once your upstreams and forwards are configured, click Save to persist the configuration. Then click Run.
What happens on each sync cycle:
- Pull (or clone) all enabled upstreams
- Copy all enabled path forwards into the project
- Stage all changes (
git add .) - Commit with the configured message template
- Push to remote (if Push is enabled)
7. Understanding the Toolbar
| Element | Description |
|---|---|
| Path | Project path (username is masked for privacy) |
| Status badge | Current worker status |
| Branch | Editable Git branch name |
| Interval | Sync frequency in minutes (editable) |
| Push | Toggle for auto-push |
| + Upstream | Add a new upstream row |
| + Forward | Add a new path forward row |
| Save | Persist all changes to disk |
| Run / Stop | Start or stop the background worker |
8. Data Storage
All project data is stored as JSON files under data/:
data/
├── projects.json
└── projects/
└── <project-id>/
├── upstream.json
├── forward.json
├── automation.json
└── memory.json
9. Environment Variables
| Variable | Required | Description |
|---|---|---|
GM_USERNAME |
✅ | Dashboard login username |
GM_PASSWORD |
✅ | Dashboard login password |
GM_SECRET_KEY |
✅ | HMAC signing key |