1
0
Fork
You've already forked Gitte
0
forked from ckruse/Gitte
A GTK4/libadwaita Git client for the GNOME desktop, written in Rust with Relm4.
  • Rust 98.7%
  • CSS 0.5%
  • Meson 0.4%
  • Nix 0.3%
Christian Kruse 734cf49d5e macOS: also set gettext path dynamically
in an application bundle, set the gettext path dynamically.
Regarding #47 
2026年05月11日 19:56:02 +02:00
data fix: ignore aliases and credential helpers in flatpak 2026年05月11日 12:49:22 +02:00
po add merge UI 2026年05月09日 07:45:07 +02:00
scripts
src macOS: also set gettext path dynamically 2026年05月11日 19:56:02 +02:00
.envrc
.gitignore
.rustfmt.toml
cargo-sources.json update deps 2026年05月11日 10:10:42 +02:00
Cargo.lock update deps 2026年05月11日 10:10:42 +02:00
Cargo.toml use a text view with a gutter now for displaying diffs 2026年05月08日 13:21:25 +02:00
COPYING
de.wwwtech.gitte.json Build: Remove CARGO_NET_OFFLINE 2026年05月07日 12:14:08 +02:00
flake.lock
flake.nix
gitte.doap add a DOAP file 2026年05月08日 15:54:30 +02:00
meson.build
meson.options
README.md add a note about the GNOME CoC 2026年05月08日 16:00:49 +02:00
SCREENSHOTS.md

Gitte

A GTK4/libadwaita Git client for the GNOME desktop, written in Rust. It is heavily inspired by Git Tower and Magit. 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).

Git GUI showing staged and unstaged changes with a diff view of a Rust file, highlighting modified lines and chunk actions

See SCREENSHOTS.md for more screenshots.

Get it on Flathub

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)
  • Open a repository directly from the command line: gitte <path> focuses an existing window for that repo, or opens it in a new one

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
  • Interactive rebase: squash/fixup, reorder via drag & drop, reword, and drop commits

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

or use the community maintained AUR package

yay -S gitte-git

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.rs is generated by Meson from src/config.rs.in. You need to run meson compile at least once before cargo check or cargo build will 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.

Using the host's git binary

History-rewriting operations shell out to git. By default Gitte invokes the bundled git inside the sandbox; user and system Git config files are bridged in via env vars so this normally Just Works.

If you'd rather have Gitte run the git installed on the host (for example, to pick up a custom build, host-only hooks, or credential helpers that depend on host services), you need to do two things:

  1. Grant the Flatpak permission to spawn host commands:

    flatpak override --user --talk-name=org.freedesktop.Flatpak de.wwwtech.gitte
    

    ⚠️ This permission effectively allows the app to escape the sandbox by spawning arbitrary host processes. Only enable it if you trust the application and understand the implication.

  2. Point Gitte at flatpak-spawn via dconf (there is no UI for this on purpose):

    dconf write /de/wwwtech/gitte/git-command "'flatpak-spawn --host git'"
    

    The setting takes a single shell-style command line, it's split by shell-words rules. Common values:

    • 'git': default, sandbox-internal git
    • 'flatpak-spawn --host git': host's git via the Flatpak portal
    • '/path/to/some/custom/git': absolute path to a specific binary

    To revert to the default:

    dconf reset /de/wwwtech/gitte/git-command
    

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.

Code of Conduct

This project follows the GNOME Code of Conduct.

License

Gitte is licensed under the AGPL-3.0-or-later.