A lightweight, self-hosted Git repository manager for browsing repos stored on a shared network drive. Features local caching and automatic sync for fast performance.
β
Browse Repositories - List all Git repos from shared drive
β
Create Bare Repos - Initialize --bare repos via PowerShell for LAN shared drives
β
View Branches - See all branches in each repository
β
View Commits - Browse commit history with hash, message, and author
β
Clone Commands - Copy-to-clipboard git clone commands (UNC + local)
β
Auto Sync - Automatically clones repos and pulls every minute
β
Local Cache - Stores repos locally for fast access
β
Network Resilient - Handles shared drive unavailability gracefully
β
Multi-User - Run on each PC to access shared repos
β
Permission Error Help - Shows exact PowerShell commands if bare init fails
When creating repositories on a LAN shared drive, bare repositories are strongly recommended. Unlike normal repos, bare repos:
- Have no working directory β no checked-out files to conflict with
- Allow multiple users to push without "refusing to update checked out branch" errors
- Act as a central remote that everyone clones from and pushes to
In the web UI, check "Bare repo (recommended for shared drives)" when creating a new repository. The app will use PowerShell to run:
git init --bare "\\192.168.1.100\sharedrive\repos\my-project"If the app cannot create the bare repo due to permissions, it will show an error page with the exact commands to run manually. Open PowerShell as Administrator and execute the displayed command, then refresh the page.
A normal (non-bare) repo on a shared drive has a working directory. Git refuses pushes to the currently checked-out branch by default, causing errors when team members try to push their work. A bare repo avoids this entirely.
βββββββββββββββββββββββββββββββββββββββββββββββ
β Shared Drive (\\192.168.1.0\repos) β
β - Stores master copies of all repos β
β - Accessed simultaneously by all users β
βββββββββββββββββββββββββββββββββββββββββββββββ
β (initial clone)
β (pull every 1 min)
β
βββββββββββββββββββββββββββββββββββββββββββββββ
β User PC #1 (temp_local/) β
β App discovers & clones repos locally β
β Auto-syncs every 60 seconds β
β Shows in GitHub-like UI β
βββββββββββββββββββββββββββββββββββββββββββββββ
Same for User PC #2, PC #3, etc.
- User opens app β App discovers repos on shared drive
- First access to repo β Repo is cloned to local
temp_local_{reponame}folder - Background sync β Every 1 minute, all repos are auto-pulled to stay in sync
- UI displays β Shows commits, branches from local cache (fast!)
- Next user opens β Their app does the same independently
python -m venv venv
venv\Scripts\activate
pip install fastapi uvicorn gitpython jinja2Edit config.py and set your paths:
# Shared drive (master repos)
REPO_BASE = r"\\192.168.1.0\sharedrive\repos"
# Local cache folder
TEMP_LOCAL_BASE = r"C:\Users\rakib\Desktop\GitSimu\temp_local"
# Auto-sync interval (seconds)
SYNC_INTERVAL = 60 # Pull every 1 minuteuvicorn app:app --reloadAccess at: http://127.0.0.1:8000
webserver/
βββ app.py # Main FastAPI application
βββ config.py # Configuration (shared drive & local paths)
βββ requirements.txt # Python dependencies
βββ templates/
β βββ index.html # Repo dashboard with sync status
β βββ repo.html # Repository view with branches
β βββ commits.html # Commit history
β βββ error.html # Error page
βββ venv/ # Virtual environment
[Auto-Generated]
temp_local/ # Local cache (per machine)
βββ repo1/ # Auto-cloned from shared drive
βββ repo2/
βββ repo3/
REPO_BASE = r"C:\repos\shared"
TEMP_LOCAL_BASE = r"C:\repos\temp_local"REPO_BASE = r"\\192.168.1.100\sharedrive\repos"
TEMP_LOCAL_BASE = r"C:\cached_repos"REPO_BASE = r"\\fileserver\shared\git\repos"
TEMP_LOCAL_BASE = r"C:\users\username\AppData\Local\git_cache"- Open app on your PC:
http://localhost:8000 - Browse repos, view commits, branches
- Copy clone command (points to shared drive)
- Clone to your local machine with:
git clone "\\192.168.1.100\repos\my-repo"
- Shared Drive = Central storage (all repos)
- Each PC's temp_local = Personal cache (auto-synced every minute)
- UI = Browse from cache (fast, reliable)
- Clone = Still from shared drive (latest source of truth)
The UI shows sync status for each repository:
- β Synced - Repo is up-to-date with shared drive
- β³ Syncing... - Currently pulling from shared drive
β οΈ Error - Problem accessing or syncing repo
Change this in repo.html based on your network setup:
# For UNC path
git clone "\\192.168.1.100\repos\repo-name"
# For mapped drive letter
git clone "Z:\repos\repo-name"
# For local path (testing)
git clone "C:\SharedDrive\repos\repo-name"
GET /- Repository listingGET /repo/{name}- Repository detailsGET /repo/{name}/commits- Commit historyPOST /create- Create new repository
GET /api/status- Returns{"last_sync": "...", "syncing": false, "repos": {...}}
- Python 3.7+
- Git installed (for managing repos)
- Network access to shared drive
- Default: Uses local testing path (works out of box!)
- Check network connection
- Verify shared drive is online and accessible
- Run:
ping 192.168.1.100(replace with your share) - Check file permissions on shared drive
- Check if
TEMP_LOCAL_BASEdirectory is writable - Verify Git is installed:
git --version - Check server logs for error details
- Manually trigger sync by refreshing the page
- Ensure you use correct network path in clone command
- If on different PC, map the shared drive first:
net use Z: \\192.168.1.100\sharedrive git clone Z:\repos\my-repo
- File browser - view/edit repo contents in web UI
- Web editor - edit files directly
- Push operations - commit and push via UI
- User authentication - per-user access control
- Repo settings - description, README display
- Pull/Merge requests - code review interface
pip install -r requirements.txt- First time? Start with local testing paths - it all works locally!
- Production? Update
config.pywith your actual shared drive path - Performance? Local caching makes it fast even with network latency
- Automation? Set up Windows Task Scheduler to run app on startup
Made with β€οΈ for teams sharing Git repos