• Stars
    star
    16,690
  • Rank 1,565 (Top 0.04 %)
  • Language
    Rust
  • License
    MIT License
  • Created about 4 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Blazing 💥 fast terminal-ui for git written in rust 🦀

CI crates MIT UNSAFE ITCH DISC TWEET

GitUI provides you with the comfort of a git GUI but right in your terminal

Table of Contents

  1. Features
  2. Motivation
  3. Benchmarks
  4. Roadmap
  5. Limitations
  6. Installation
  7. Build
  8. FAQs
  9. Diagnostics
  10. Color Theme
  11. Key Bindings
  12. Sponsoring
  13. Inspiration

1. Features Top ▲

  • Fast and intuitive keyboard only control
  • Context based help (no need to memorize tons of hot-keys)
  • Inspect, commit, and amend changes (incl. hooks: pre-commit,commit-msg,post-commit)
  • Stage, unstage, revert and reset files, hunks and lines
  • Stashing (save, pop, apply, drop, and inspect)
  • Push/Fetch to/from remote
  • Branch List (create, rename, delete, checkout, remotes)
  • Browse commit log, diff committed changes
  • Scalable terminal UI layout
  • Async git API for fluid control
  • Submodule support

2. Motivation Top ▲

I do most of my git work in a terminal but I frequently found myself using git GUIs for some use-cases like: index, commit, diff, stash, blame and log.

Unfortunately popular git GUIs all fail on giant repositories or become unresponsive and unusable.

GitUI provides you with the user experience and comfort of a git GUI but right in your terminal while being portable, fast, free and opensource.

3. Benchmarks Top ▲

For a RustBerlin meetup presentation (slides) I compared lazygit,tig and gitui by parsing the entire Linux git repository (which contains over 900k commits):

Time Memory (GB) Binary (MB) Freezes Crashes
gitui 24 s 0.17 1.4 No No
lazygit 57 s 2.6 16 Yes Sometimes
tig 4 m 20 s 1.3 0.6 Sometimes No

4. Road(map) to 1.0 Top ▲

These are the high level goals before calling out 1.0:

  • log search (commit, author, sha) (#449,#429)
  • visualize branching structure in log tab (#81)
  • interactive rebase (#32)

5. Known Limitations Top ▲

  • no sparse repo support (see #1226)
  • no support for GPG signing (see #97)
  • no git-lfs support (see #1089)
  • credential.helper for https needs to be explicitly configured (see #800)

Currently, this tool does not fully substitute the git shell, however both tools work well in tandem.

The priorities for gitui are on features that are making me mad when done on the git shell, like stashing, staging lines or hunks. Eventually, I will be able to work on making gitui a one stop solution - but for that I need help - this is just a spare time project for now.

All support is welcomed! Sponsors as well! ❤️

6. Installation Top ▲

For the time being this product is in alpha and is not considered production ready. However, for personal use it is reasonably stable and is being used while developing itself.

Arch Linux

pacman -S gitui

Fedora

sudo dnf install gitui

Gentoo

Available in dm9pZCAq overlay

sudo eselect repository enable dm9pZCAq
sudo emerge --sync dm9pZCAq
sudo emerge dev-vcs/gitui::dm9pZCAq

openSUSE (Tumbleweed)

sudo zypper install gitui

Homebrew (macOS)

brew install gitui

MacPorts (macOS)

port install gitui

Winget (Windows)

winget install gitui

Scoop (Windows)

scoop install gitui

Chocolatey (Windows)

choco install gitui

Nix (Nix/NixOS)

Nixpkg

nix-env -iA nixpkgs.gitui

NixOS

nix-env -iA nixos.gitui

Termux (Android)

pkg install gitui

Release Binaries

Available for download in releases

Binaries available for:

Linux

  • gitui-linux-musl.tar.gz (linux on x86_64)
  • gitui-linux-aarch64.tar.gz (linux on 64 bit arm)
  • gitui-linux-arm.tar.gz
  • gitui-linux-armv7.tar.gz

All contain a single binary file

macOS

  • gitui-mac.tar.gz (intel Mac, uses Rosetta on Apple silicon, single binary)

Windows

  • gitui-win.tar.gz (single 64bit binary)
  • gitui.msi (64bit Installer package)

7. Build Top ▲

Requirements

Cargo Install

The simplest way to start playing around with gitui is to have cargo build and install it with cargo install gitui. If you are not familiar with rust and cargo: Getting Started with Rust

Cargo Features

trace-libgit

enable libgit2 tracing

works if libgit2 builded with -DENABLE_TRACE=ON

this feature enabled by default, to disable: cargo install --no-default-features

8. FAQs Top ▲

see FAQs page

9. Diagnostics Top ▲

To run with logging enabled run gitui -l.

This will log to:

  • macOS: $HOME/Library/Caches/gitui/gitui.log
  • Linux using XDG: $XDG_CACHE_HOME/gitui/gitui.log
  • Linux: $HOME/.cache/gitui/gitui.log
  • Windows: %LOCALAPPDATA%/gitui/gitui.log

10. Color Theme Top ▲

gitui should automatically work on both light and dark terminal themes.

However, you can customize everything to your liking: See Themes.

11. Key Bindings Top ▲

The key bindings can be customized: See Key Config on how to set them to vim-like bindings.

12. Sponsoring Top ▲

github

Donate using Liberapay

Buy Me a Coffee at ko-fi.com

13. Inspiration Top ▲

More Repositories

1

rust-webview-todomvc-yew

lightweight desktop todomvc implementation using rust,wasm and web-view
Rust
106
star
2

godot-vs-rapier

compare gdnative rust based physics against Godot built-in physics
Rust
87
star
3

ip2country

fast ip -> country lookup using asn database
Rust
65
star
4

unecht

Game Engine Framework for the D programming language
D
53
star
5

DerelictImgui

Dynamic bindings to the cimgui library (a c-api for IMGUI) for the D programming language
D
50
star
6

DerelictLibui

Dynamic Binding for libui (https://github.com/andlabs/libui) in D
D
33
star
7

sockjs-unity3d-xhr

sockjs client implementation for unity3D using xhr polling (so this works with unity free license)
C#
28
star
8

presentui

small and simple terminal presentation tool written in rust
Rust
23
star
9

easy-ocr

Makefile
21
star
10

unity3d-google-analytics

Simple scripts to be able to use tracking via google analytics app profiles
C#
19
star
11

rust-electron-demo

rust electron demo using yew
JavaScript
18
star
12

godot-rust-benchmark

gdscript vs. visual scripting vs. gdnative (rust)
Rust
14
star
13

DerelictSteamworks

Dynamic bindings to the Steamworks API for the D programming language
D
14
star
14

forever-d

Ensures that a given program runs continuously
D
12
star
15

rapier-determinism

Rapier based physics testing determinism inside Godot
Rust
10
star
16

sockjs-d

SockJs implementation for vibe.d
D
10
star
17

gitui-presentation

retro terminal presentation of gitui at @RustBerlin meetup
Rust
9
star
18

cc-accounting

simple credit card accounting tool written in rust 🦀 with ❤️
Rust
8
star
19

imgui_d_test

small example usage of the cimgui wrapper for D
D
8
star
20

godot-ios-impact-plugin

Python
8
star
21

xtea-d

XTEA cryptography algorithm implementation in D (eXtended Tiny Encryption Algorithm)
D
6
star
22

elo-rating-d

ELO rating system in the D programming language
D
5
star
23

DerelictFmod

Dynamic bindings of the fmod sound library in the D programming language
D
5
star
24

bgfxd-examples

port of the bgfx examples to D
D
5
star
25

apn-d

Apple Push Notification (apn) service for D using vibe.d (roughly based on node-apn)
D
5
star
26

bevy_extern_events

Bevy plugin for generic external events forwarded to Bevy EventReaders 🦀
Rust
5
star
27

aws-sdk-dlang-gen

tool to convert aws sdk to dlang
D
4
star
28

file2d

simple tool to create embedable files in D
D
4
star
29

multiplayer-games-rust-book

Rust
4
star
30

alpaca-rust

Offer access to the alpaca trading API in Rust
Rust
4
star
31

gcm-d

Google Cloud Messaging (GCM) for D (using vibe.d)
D
3
star
32

pdf-text-diff

Text based diff between two PDF files
Rust
3
star
33

extrawurst.github.io

My github pages driven blog
HTML
3
star
34

DerelictNuklear

Dynamics bindings to the immediate gui library Nuklear in D
D
3
star
35

DerelictCF

A dynamic binding to the OSX CoreFoundation library for the D Programming Language.
D
3
star
36

twir-bot

Little 🤖 helping TWIR 🦀 authors extracting gathered content from discord
Rust
2
star
37

brewdump

Ruby
2
star
38

docker-awscli

minimalistic docker container for awscli
Dockerfile
2
star
39

sockjs-unity3d-xhr-example

usage examples of sockjs-unity3d-xhr lib
C#
2
star
40

gr-discord-bot

company internal discord bot written in rust
Rust
1
star
41

WinPing

code for simple raw socket pinging on win32 (winsock2 API)
1
star
42

office365-d

Office 365 REST API written in D
D
1
star
43

aws-d-metadata

helper library to fetch meta data of an ec2 instance from within a vide.d application
D
1
star
44

twitter-d

twitter api binding for #dlang based on vibe.d
D
1
star
45

tinyurl-rs

Use tinyurl.com in async rust to shorten URLs
Rust
1
star
46

syslogservice

webservice that gathers arbitrary requests in syslog format on disk (we use this primarily to feed splunk)
D
1
star
47

docker-dlang-vibe

see docker-hub:
Dockerfile
1
star
48

fb-rs

Facebook Graph API for Rust
Rust
1
star
49

homebrew-tap

personal homebrew tap for the gitui tool
Ruby
1
star
50

docker-ip2location

small docker'd webservice providing ip location lookup using free https://lite.ip2location.com
Go
1
star