- Rust 98.7%
- Meson 0.6%
- Nix 0.5%
- CSS 0.1%
- Shell 0.1%
Gitte
A GTK4/libadwaita Git client for the GNOME desktop, written in Rust. It is heavily inspired by Git Tower. The name Gitte is a play on words. It is the diminutive form of the German female first name Brigitte and is pronounced "Git-ty" in English (with a hard G like in GIF).
See SCREENSHOTS.md for more screenshots.
Features
Repository Management
- Add, rename, and remove repositories; initialize new Git repos
- Copy paths or open them in the file manager
- Search across repositories on the start screen
- Configurable sort order (manual, by name, by last opened)
Working Copy
- See all changed files with their status (modified, added, deleted, renamed)
- Stage and unstage at the file, hunk, or individual line level
- Discard changes at file, hunk, or line level
- Copy file paths or open them in the file manager
Interactive Diff Viewer
- Syntax-highlighted additions and deletions (green and red)
- Stage, unstage, or discard changes per hunk or per line
- Sticky hunk headers while scrolling
- View diffs for commits and stashes
Commits
- Write commit messages with subject and body
- Amend the last commit
- Browse commit history with pagination
- View commit diffs with tag and upstream markers
Branches
- Create, rename, and delete branches
- Checkout local and remote branches
- Track upstream branches with ahead/behind counts
- Smart handling of dirty working directories (stash-before-switch)
- Collapsible branch groups in the sidebar
Tags
- Create lightweight and annotated tags
- Delete tags
- Push tags to remotes (with force push option)
- Multiple sort methods (semver, alphabetical, date) with ascending/descending order
Pull
- Pull from any remote with branch selection
- Fast-forward, merge, and rebase strategies
- Auto-stash uncommitted changes before pulling
- Prune remote tracking branches during pull
- Fetch tags option
- Conflict detection for merge and rebase
Push
- Push to any remote with branch selection
- Set upstream tracking branch automatically
- Force push option (with visual warning)
- Push tags to remotes
- No-op detection to skip redundant pushes
Remotes
- List remotes and their remote-tracking branches
- Push branches with upstream configuration
- Fetch from single or all remotes
- Auto-fetch at configurable intervals
Stashes
- Create stashes (with or without untracked files)
- Apply, pop, and drop stashes
- Inspect stash diffs
Credentials
- SSH key agent support
- HTTP basic auth with secure keychain storage via Secret Service (D-Bus)
UI & Integration
- Built with libadwaita for a modern GNOME look and feel
- Resizable split panes with persistent positions; window size persistence
- Multi-window support
- Gettext-based internationalization (i18n)
Keyboard Shortcuts
| Action | Shortcut |
|---|---|
| New Window | Ctrl+N |
| Search | Ctrl+F |
| Add Repository | Ctrl+Shift+A |
| Preferences | Ctrl+, |
| Quit | Ctrl+Q |
| Fetch | Ctrl+Shift+F |
| Pull | Ctrl+P |
| Push | Ctrl+Shift+P |
| Stash | Ctrl+Shift+S |
| Stash Including Untracked | Ctrl+Shift+U |
| Pop Latest Stash | Ctrl+Shift+O |
| Create Tag | Ctrl+Shift+T |
| Focus Commit Message | Ctrl+Shift+C |
| Commit | Ctrl+Return |
| Stage/Unstage | Space / Return |
| Discard Changes | Delete |
Building
Dependencies
- Rust toolchain (stable)
- GTK 4 (>= 4.16)
- libadwaita (>= 1.6)
- libgit2
- Meson
- Ninja
On Fedora:
sudo dnf install gtk4-devel libadwaita-devel libgit2-devel meson ninja-build
On Arch Linux:
sudo pacman -S gtk4 libadwaita libgit2 meson ninja
On NixOS (or with Nix):
nix develop
This enters a dev shell with all dependencies provided via flake.nix.
Build & Install
meson setup builddir
meson compile -C builddir
meson install -C builddir
Note:
src/config.rsis generated by Meson fromsrc/config.rs.in. You need to runmeson compileat least once beforecargo checkorcargo buildwill work.
Flatpak
The Flatpak version of Gitte uses the --filesystem=home permission to access Git repositories in your home directory. This means that system-wide configuration files like /etc/gitconfig cannot be read from within the sandbox.
If you need settings from /etc/gitconfig, you can override the Flatpak permissions:
flatpak override --user --filesystem=/etc/gitconfig:ro de.wwwtech.gitte
Alternatively, you can copy the relevant settings into your user-specific ~/.gitconfig.
Contributing
Contributions are welcome! Please make sure your code passes cargo clippy without warnings before submitting a pull request. However, code generated fully or partially by Large Language Models (LLMs) such as ChatGPT, Copilot, or similar tools is not accepted. Please ensure that all submitted code is written and understood by you, so it can be properly reviewed and maintained.
License
Gitte is licensed under the AGPL-3.0-or-later.