The change adds a safer LFS activation flow that ensures a root .gitattributes file is not hidden by ignore rules and activates local LFS filters. It also merges patterns from the repository attributes with those reported by Git LFS to avoid duplicates and inaccuracies. - Adds a retry path for large LFS uploads by forcing HTTP/1.1 during pushes when an HTTP 413 error is returned.
141 lines
4.1 KiB
Markdown
141 lines
4.1 KiB
Markdown
<div align="center">
|
|
|
|
<img src="public/splash-icon.png" alt="Gitty Logo" width="360">
|
|
|
|
# Gitty
|
|
|
|
**A lightweight, modern Git client built with Tauri.**
|
|
|
|
Fast, simple, and designed for developers who want a clean Git experience without unnecessary complexity.
|
|
|
|
</div>
|
|
|
|
---
|
|
|
|
## ✨ Features
|
|
|
|
- 🚀 Fast native performance
|
|
- 🌿 Branch management
|
|
- 📝 Commit history
|
|
- 🔄 Pull, Push & Fetch
|
|
- 🔀 Merge & Rebase
|
|
- 📦 Repository management
|
|
- 🗄️ Git LFS detection, tracking and object management
|
|
- 🎨 Modern and intuitive UI
|
|
|
|
---
|
|
|
|
## 📸 Preview
|
|
|
|
> Screenshots coming soon.
|
|
|
|
---
|
|
|
|
## 🛠️ Built With
|
|
|
|
- **Tauri**
|
|
- **Rust**
|
|
- **Svelte**
|
|
|
|
---
|
|
|
|
## 🚧 Status
|
|
|
|
Gitty is currently under active development.
|
|
|
|
Contributions, feedback and feature requests are always welcome!
|
|
|
|
---
|
|
|
|
## 📄 License
|
|
|
|
MIT License
|
|
|
|
---
|
|
|
|
## Arch Linux
|
|
|
|
Install Gitty from the AUR with an AUR helper:
|
|
|
|
```bash
|
|
yay -S gitty-desktop
|
|
```
|
|
|
|
To install the prebuilt native Arch package instead of compiling from source:
|
|
|
|
```bash
|
|
yay -S gitty-desktop-bin
|
|
```
|
|
|
|
Or build the AUR package manually:
|
|
|
|
```bash
|
|
git clone https://aur.archlinux.org/gitty-desktop.git
|
|
cd gitty-desktop
|
|
makepkg -si
|
|
```
|
|
|
|
The source recipe downloads the public Gitea release archive and builds Gitty.
|
|
The `-bin` recipe repackages the native `.pkg.tar.zst` release artifact. The
|
|
release pipeline updates both packages' versions, checksums, and `.SRCINFO`
|
|
files.
|
|
|
|
---
|
|
|
|
## Command line
|
|
|
|
Open an existing repository when Gitty starts:
|
|
|
|
```text
|
|
gitty.exe --repo "D:\Projects\ExistingRepo"
|
|
```
|
|
|
|
Clone a remote into an exact local target folder and open it immediately:
|
|
|
|
```text
|
|
gitty.exe --clone "https://example.com/team/project.git" "D:\Projects\Project"
|
|
gitty clone "git@example.com:team/project.git" "D:\Projects\Project"
|
|
```
|
|
|
|
`--clone=<REMOTE>` is also accepted. Relative target paths are resolved from
|
|
the current working directory. Clone and repository requests are forwarded to
|
|
the running window when Gitty is already open.
|
|
|
|
---
|
|
|
|
## Development
|
|
|
|
Start the complete desktop application in development mode with:
|
|
|
|
```bash
|
|
npm run tauri:dev
|
|
```
|
|
|
|
The development launcher preserves normal proxy settings. If a sandboxed
|
|
development terminal injects the non-routing `127.0.0.1:9` proxy or its
|
|
blocking SSH placeholder, those values are removed only for the Tauri child
|
|
process so Git remotes and Git LFS remain testable in the debug application.
|
|
|
|
---
|
|
|
|
## Git LFS
|
|
|
|
Gitty bundles the `git-lfs` executable in its desktop installers and checks it
|
|
at runtime before offering LFS actions. Arch packages also declare `git-lfs` as
|
|
a dependency so Git hooks and command-line workflows outside Gitty use the same
|
|
extension. The repository toolbar exposes LFS setup, tracked patterns, object
|
|
downloads, and safe cache pruning. After every successful clone or pull, Gitty
|
|
detects LFS usage and automatically downloads the required LFS objects with the
|
|
same remote and credentials, so no second pull is needed. Fresh clones also get
|
|
repository-local LFS filters and the pre-push hook before they are opened.
|
|
|
|
---
|
|
|
|
## SigNoz telemetry
|
|
|
|
After the user opts in, Gitty sends privacy-filtered product events and technical errors as OTLP/HTTP JSON logs. Every Git/Tauri command is also captured as a trace span with its command name, duration and success state, but without command arguments or results. CPU utilization and resident memory usage of the Gitty process are sampled every 30 seconds and exported as OpenTelemetry gauges. The default endpoints are `https://telemetry.cbsk-tech.de/v1/logs`, `https://telemetry.cbsk-tech.de/v1/traces`, and `https://telemetry.cbsk-tech.de/v1/metrics`.
|
|
|
|
The SigNoz reverse proxy must forward all three paths to the Collector's OTLP/HTTP receiver (normally port `4318`). For development or a separate collector hostname, set `GITTY_OTLP_LOGS_ENDPOINT`, `GITTY_OTLP_TRACES_ENDPOINT`, and `GITTY_OTLP_METRICS_ENDPOINT` to the full signal URLs before starting Gitty.
|
|
|
|
Telemetry is non-blocking, bounded, disabled until consent is stored, and never includes repository paths, remote URLs, branch names, commit messages, diffs, file names, credentials, source code, URLs, or email addresses.
|