# git-tui A single-file terminal UI for common Git workflows. `git-tui` gives you a keyboard-driven interface for staging, committing, syncing, and bootstrapping repositories without leaving the terminal. ![git-tui avatar](assets/logo-avatar.png) ## Highlights - Single-file executable (`git-tui`) - Curses-based terminal UI - Stage all or select individual files - Commit with message prompt - Push, pull (rebase), fetch, status - Non-repo bootstrap flow: - Initialize local repository - Optionally create and publish a new remote repository - Supports GitHub and Gitea - Existing local repo without remote: - Offers connection to an existing GitHub or Gitea remote repository - Can continue without remote setup if preferred ## Requirements - Linux or Unix-like terminal with curses support - Python 3 - Git - GitHub CLI `gh` only if you choose GitHub publish flow - Gitea personal access token only if you choose Gitea publish flow ## Installation ```bash chmod +x git-tui sudo install -m 755 git-tui /usr/local/bin/gtui ``` ## Quick Start Run from any project directory: ```bash gtui ``` If the directory is not a Git repository, `git-tui` offers: - Initialize repository only - Initialize, create a Gitea remote, and sync local commits to it - Initialize, connect an existing Gitea remote, and synchronize both sides If the directory is already a Git repository but has no remote configured, `git-tui` offers: - Create a Gitea remote and sync - Connect an existing Gitea remote and sync - Continue without remote When a remote is configured, the normal operations menu includes an action to disconnect it. Disconnecting removes only the local remote configuration; it does not delete the Gitea repository. ## Gitea Setup For Gitea publish flow, you can provide values interactively in the TUI or pre-set environment variables: ```bash export GITEA_URL="https://git.example.com" export GITEA_OWNER="your-user-or-org" export GITEA_TOKEN="your-token" ``` Supported variable names: - `GITEA_URL` or `GITEA_BASE_URL` - `GITEA_OWNER` - `GITEA_TOKEN` or `GITEA_ACCESS_TOKEN` - `GITEA_SSH_USER` (defaults to `git`) - `GITEA_SSH_PORT` (only needed for a non-default SSH port) Token handling behavior: - Token is read from environment when present - Otherwise token is requested in the TUI - Token is not persisted by `git-tui` When connecting an existing Gitea repository by `owner/name`, choose SSH to use an SSH key already configured on the machine, or HTTPS to use a configured Git credential helper. You can also paste a complete clone URL to use it unchanged. Creating a Gitea repository still uses an API token, because Git/SSH cannot create repositories. The Git remote transport is selected separately; choosing SSH leaves the new `origin` configured with Gitea's SSH clone URL. Synchronization compares local and remote commit history. It fast-forwards or pushes automatically when one side is ahead. If the histories diverge, the UI offers to merge, replace local history after creating a backup branch, or force-push local history with `--force-with-lease`. Uncommitted changes must be committed or stashed first and are never silently discarded. ## Keybindings - Main menu: - `Up/Down` or `j/k` move - `Enter` run action - `q` or `Esc` quit - File picker: - `Space` toggle - `a` toggle all - `Enter` confirm - `q` or `Esc` cancel ## Documentation - `doc/README.md` - `doc/usage.md` - `doc/architecture.md` - `CHANGELOG.md` ## License No license file is currently included in this repository.