feat(changelog): Add comprehensive changelog and help documentation
publish / publish-tauri (appimage, 1, ubuntu-22.04, linux-x86_64) (release) Successful in 22m46s
publish / publish-tauri (nsis, , windows-latest, windows-x86_64) (release) Successful in 24m51s
publish / Build and publish Arch package (release) Successful in 53m27s

A new Changelog file has been introduced, documenting major user-facing changes across recent releases. Additionally, the HelpOverlay component was updated to include detailed sections on advanced Git workflows, including worktree management, line-level staging, and Arch Linux package automation instructions in both German and English.

- Added full changelog documentation
- Enhanced help with worktrees and line-staging guides
- Implemented Arch Linux package build steps
This commit is contained in:
Christoph Brandau
2026-07-26 22:59:07 +02:00
parent 1721341e62
commit bc3d3e88e0
2 changed files with 297 additions and 0 deletions
+234
View File
@@ -17,6 +17,7 @@
Lightbulb,
ListChecks,
Search,
Sparkles,
Wrench,
X,
} from "@lucide/svelte";
@@ -617,6 +618,87 @@
},
);
deCategories.find((category) => category.id === "app")?.sections.push(
{
id: "app-line-staging",
title: "Änderungen zeilenweise stagen",
summary: "Im Patch-Dialog kannst du nicht nur vollständige Dateien oder Hunks, sondern einzelne hinzugefügte und entfernte Zeilen für den nächsten Commit auswählen.",
steps: [
"Öffne im Bereich Unstaged den Patch einer geänderten Textdatei.",
"Klicke auf die Auswahlfläche vor einer grünen oder roten Zeile. Mit Shift-Klick markierst du einen zusammenhängenden Bereich.",
"Die Auswahlleiste zeigt die Anzahl der gewählten Zeilen. Stage selected übernimmt nur diese Auswahl in den Staging-Bereich.",
"Öffne denselben Dialog unter Staged und nutze Unstage selected, wenn einzelne Zeilen wieder zurück ins Arbeitsverzeichnis sollen.",
"Prüfe danach den Staged-Diff. Er ist die verbindliche Vorschau des nächsten Commits.",
],
note: "Bei einer geänderten Zeile stellt Git intern meist eine entfernte und eine hinzugefügte Zeile dar. Wähle beide Seiten, wenn die vollständige Ersetzung in denselben Commit gehört.",
},
{
id: "app-line-discard",
title: "Hunks und einzelne Zeilen verwerfen",
summary: "Discard selected verwirft nur die markierten Zeilen; Discard Hunk verwirft den vollständigen Abschnitt. Gitty zeigt vor dem Löschen eine Sicherheitsabfrage.",
steps: [
"Kontrolliere, ob der Dialog Staged changes oder Unstaged changes anzeigt.",
"Markiere exakt die Zeilen, die nicht behalten werden sollen.",
"Lies in der Sicherheitsabfrage Pfad und Umfang und bestätige erst danach.",
"Aktualisiere den Patch, falls Dateien während des geöffneten Dialogs extern verändert wurden.",
],
note: "Vorsicht: Verwerfen kann nicht zuverlässig rückgängig gemacht werden. Erstelle bei wichtigen Zwischenständen zuerst einen Commit oder Stash.",
},
{
id: "app-package-updates",
title: "Gitty unter Arch Linux installieren und aktualisieren",
summary: "Ein Pacman-Repository auf der CDN-Seite ermöglicht signierte, versionierte Updates. Alternativ lässt sich eine heruntergeladene .pkg.tar.zst-Datei direkt installieren.",
commands: [
{ command: "sudo pacman --config /pfad/gitty-pacman.conf -Syu gitty", description: "Repository-Konfiguration für genau diesen Aufruf verwenden und Gitty aktualisieren" },
{ command: "sudo pacman -U /pfad/gitty-<version>-x86_64.pkg.tar.zst", description: "Ein einzelnes lokales oder heruntergeladenes Paket installieren" },
{ command: "pacman -Qi gitty", description: "Installierte Version und Paketinformationen anzeigen" },
{ command: "pacman -Si gitty", description: "Im konfigurierten Repository verfügbare Version anzeigen" },
],
steps: [
"Für normale Systemupdates trägst du das Gitty-Repository einmal dauerhaft in /etc/pacman.conf ein.",
"Wenn du die Systemdatei nicht ändern möchtest, gib --config bei jedem Pacman-Aufruf erneut an oder verwende ein eigenes Wrapper-Skript.",
"Die Build-Pipeline erzeugt das Paket aus dem PKGBUILD, aktualisiert die Repository-Datenbank und veröffentlicht beides auf dem CDN.",
"Pacman installiert nur dann eine neue Version, wenn Paketversion und Repository-Datenbank entsprechend aktualisiert wurden.",
],
note: "--config gilt nur für den aktuellen Pacman-Prozess. Ein späteres sudo pacman -Syu erinnert sich nicht automatisch an den zuvor angegebenen Pfad.",
},
);
deCategories.find((category) => category.id === "branches")?.sections.push(
{
id: "branches-worktrees-concept",
title: "Was ein Worktree ist",
summary: "Ein Repository besitzt eine gemeinsame Git-Datenbank, kann aber mehrere Arbeitsordner haben. Jeder Worktree hat eigene ausgecheckte Dateien und normalerweise einen eigenen Branch; Commits und Referenzen sind sofort in allen Worktrees sichtbar.",
steps: [
"Das Haupt-Worktree ist der Ordner, den du ursprünglich als Repository geöffnet hast.",
"Ein zusätzlicher Worktree ist kein vollständiger Clone: Git-Objekte und Historie werden gemeinsam genutzt, nur Arbeitsordner und Index sind getrennt.",
"Änderungen in Dateien bleiben im jeweiligen Worktree. Ein dort erstellter Commit ist dagegen sofort Teil desselben Repositorys.",
"Worktrees eignen sich besonders für parallele Features, dringende Hotfixes, Reviews oder längere Builds auf einem zweiten Branch.",
"Für vollständig unabhängige Remotes, Konfigurationen oder Experimente ist ein eigener Clone weiterhin die passendere Wahl.",
],
note: "Ein Branch kann normalerweise nicht gleichzeitig in zwei Worktrees ausgecheckt werden. Das verhindert, dass zwei Ordner denselben Branch widersprüchlich verändern.",
},
{
id: "branches-worktrees",
title: "Mehrere Branches mit Worktrees parallel öffnen",
summary: "Ein Worktree checkt einen weiteren Branch in einen eigenen Ordner aus. So kannst du an mehreren Aufgaben arbeiten, ohne Branches im Hauptordner umzuschalten oder lokale Änderungen zu stashen.",
steps: [
"Öffne im Branch-Panel unter Tags den Reiter Worktrees.",
"Wähle Existing branch für einen vorhandenen lokalen Branch, New branch für einen neuen Branch oder Detached für einen festen Commit ohne Branch.",
"Lege einen leeren Zielordner fest und erstelle den Worktree. Open tab öffnet ihn anschließend als eigenen Repository-Tab.",
"Move verschiebt einen nicht aktiven Worktree. Lock schützt ihn vor versehentlichem Prune oder Entfernen, etwa auf einem externen Laufwerk.",
"Remove löscht den Worktree-Ordner und seine Registrierung, behält aber den Branch. Prune entfernt nur veraltete Registrierungen nicht mehr vorhandener Ordner.",
],
commands: [
{ command: "git worktree list", description: "Alle registrierten Worktrees anzeigen" },
{ command: "git worktree add ../projekt-fix fix/login", description: "Vorhandenen Branch in neuem Ordner auschecken" },
{ command: "git worktree add -b feature/name ../projekt-feature main", description: "Neuen Branch und Worktree von main erstellen" },
{ command: "git worktree prune --dry-run", description: "Veraltete Registrierungen vor dem Aufräumen prüfen" },
],
note: "Ein Branch kann normalerweise nur in einem Worktree gleichzeitig ausgecheckt sein. Ein Worktree mit lokalen Änderungen sollte vor Remove committed, gestasht oder bewusst erzwungen entfernt werden.",
},
);
deCategories.find((category) => category.id === "branches")?.sections.push(
{
id: "branches-strategy",
@@ -979,6 +1061,87 @@
},
);
enCategories.find((category) => category.id === "app")?.sections.push(
{
id: "app-line-staging",
title: "Stage changes line by line",
summary: "The patch dialog lets you prepare individual added and deleted lines instead of staging an entire file or hunk.",
steps: [
"Open the patch of a changed text file in Unstaged.",
"Click the selector in front of a green or red line. Shift-click selects a continuous range.",
"The selection bar shows the number of selected lines. Stage selected moves only that selection into Staged.",
"Open the same dialog under Staged and use Unstage selected to return individual lines to the working tree.",
"Review the Staged diff afterward. It is the authoritative preview of the next commit.",
],
note: "Git usually represents one edited line as one deletion plus one addition. Select both sides when the complete replacement belongs in the same commit.",
},
{
id: "app-line-discard",
title: "Discard hunks or individual lines",
summary: "Discard selected removes only selected lines; Discard Hunk removes the complete section. Gitty shows a confirmation before deleting changes.",
steps: [
"Check whether the dialog currently shows Staged changes or Unstaged changes.",
"Select exactly the lines that should not be kept.",
"Review the file path and scope in the confirmation, then confirm.",
"Refresh the patch if another application changed the file while the dialog was open.",
],
note: "Caution: discarded work cannot always be recovered. Commit or stash important intermediate work first.",
},
{
id: "app-package-updates",
title: "Install and update Gitty on Arch Linux",
summary: "A Pacman repository hosted on the CDN provides versioned updates. Alternatively, install a downloaded .pkg.tar.zst package directly.",
commands: [
{ command: "sudo pacman --config /path/gitty-pacman.conf -Syu gitty", description: "Use the custom repository configuration for this invocation and update Gitty" },
{ command: "sudo pacman -U /path/gitty-<version>-x86_64.pkg.tar.zst", description: "Install one local or downloaded package file" },
{ command: "pacman -Qi gitty", description: "Show the installed version and package information" },
{ command: "pacman -Si gitty", description: "Show the version available from configured repositories" },
],
steps: [
"For regular system upgrades, add the Gitty repository to /etc/pacman.conf once.",
"If you do not want to change the system file, pass --config on every Pacman invocation or create a dedicated wrapper script.",
"The build pipeline creates the package from PKGBUILD, updates the repository database, and publishes both to the CDN.",
"Pacman offers an update only after both the package version and repository database have been updated.",
],
note: "--config applies only to the current Pacman process. A later sudo pacman -Syu does not remember a previously supplied configuration path.",
},
);
enCategories.find((category) => category.id === "branches")?.sections.push(
{
id: "branches-worktrees-concept",
title: "What a worktree is",
summary: "One repository has a shared Git database but can have multiple working folders. Each worktree has its own checked-out files and usually its own branch; commits and references are immediately visible from every worktree.",
steps: [
"The main worktree is the folder you originally opened as the repository.",
"An additional worktree is not a full clone: Git objects and history are shared while the working folder and index remain separate.",
"File changes stay inside their worktree. A commit created there immediately becomes part of the shared repository.",
"Worktrees are useful for parallel features, urgent hotfixes, reviews, or long-running builds on another branch.",
"Use a separate clone when you need independent remotes, configuration, or isolated experiments.",
],
note: "A branch normally cannot be checked out in two worktrees at once. This prevents two folders from changing the same branch inconsistently.",
},
{
id: "branches-worktrees",
title: "Open multiple branches in parallel with worktrees",
summary: "A worktree checks out another branch into a separate folder. This lets you work on multiple tasks without switching the main folder or stashing local changes.",
steps: [
"Open Worktrees below Tags in the Branch panel.",
"Choose Existing branch for a local branch, New branch to create one, or Detached for a fixed commit without a branch.",
"Choose an empty destination folder and create the worktree. Open tab then opens it as a separate repository tab.",
"Move relocates an inactive worktree. Lock protects it from accidental pruning or removal, for example while stored on an external drive.",
"Remove deletes the worktree folder and registration but keeps its branch. Prune removes only stale registrations for missing folders.",
],
commands: [
{ command: "git worktree list", description: "Show all registered worktrees" },
{ command: "git worktree add ../project-fix fix/login", description: "Check out an existing branch in a new folder" },
{ command: "git worktree add -b feature/name ../project-feature main", description: "Create a branch and worktree from main" },
{ command: "git worktree prune --dry-run", description: "Preview stale registrations before pruning" },
],
note: "A branch can normally be checked out in only one worktree at a time. Commit, stash, or deliberately force removal of local changes before removing a worktree.",
},
);
enCategories.find((category) => category.id === "branches")?.sections.push(
{
id: "branches-strategy",
@@ -1193,6 +1356,76 @@
},
);
deCategories.splice(1, 0, {
id: "changelog",
label: "Neu in Gitty",
description: "Änderungen seit der letzten veröffentlichten Version und wichtige Neuerungen früherer Releases.",
sections: [
{
id: "changelog-2026-07-21",
title: "Version 2026.07.21",
summary: "Dieses Release bündelt paralleles Arbeiten mit Worktrees, präzisere Commits und die neue Arch-Linux-Verteilung.",
steps: [
"Worktree-Verwaltung: zusätzliche Arbeitsordner erstellen, öffnen, verschieben, sperren, entsperren, reparieren, entfernen und veraltete Registrierungen aufräumen.",
"Worktrees sind direkt über den neuen Reiter unter Tags erreichbar; Branches lassen sich außerdem aus ihrem Kontextmenü in einem Worktree öffnen.",
"Zeilenweises Staging: einzelne Ergänzungen und Löschungen auswählen, per Shift-Klick Bereiche markieren sowie ausgewählte Zeilen stagen, unstagen oder verwerfen.",
"Sicherere Dialoge: verständlichere Branch-Löschabfrage und weichgezeichneter Hintergrund bei geöffneten Dialogen.",
"Arch-Linux-Pakete: automatisierter Build aus dem PKGBUILD, Veröffentlichung von .pkg.tar.zst und Repository-Datenbank für Pacman auf dem CDN.",
"Robustere Remote-Aktionen, zentrale Fehlermeldungen und strukturierte, datensparsame Telemetrie.",
"Erweiterte zweisprachige Hilfe mit Worktree-, Pacman- und Line-Staging-Anleitungen.",
],
note: "In Paketdateien kann dieselbe Version als 2026.7.21 erscheinen, weil Paketmanager numerische Versionssegmente ohne führende Null verwenden.",
},
{
id: "changelog-2026-7-20",
title: "Version 2026.7.20",
summary: "Der letzte veröffentlichte Stand konzentrierte sich auf produktiveres Arbeiten, bessere Orientierung und einen stabileren Paket-Build.",
steps: [
"Vor dem Commit kann eine AI-gestützte Codeprüfung den Staged-Diff analysieren.",
"Automatische Aktualisierung hält Repository-Status und Arbeitsbereich auf Wunsch aktuell.",
"Repository-Aktionsleiste, Statusdarstellung, Tabs und Diff-Ansicht wurden übersichtlicher gestaltet.",
"Die integrierte Hilfe wurde um ausführliche deutsche Git-Dokumentation ergänzt.",
"PKGBUILD und Build-Skripte wurden für die Arch-Linux-Verteilung vorbereitet.",
],
},
],
});
enCategories.splice(1, 0, {
id: "changelog",
label: "What's new",
description: "Changes since the latest published version and notable additions from earlier releases.",
sections: [
{
id: "changelog-2026-07-21",
title: "Version 2026.07.21",
summary: "This release combines parallel worktree workflows, more precise commits, and the new Arch Linux distribution.",
steps: [
"Worktree management: create, open, move, lock, unlock, repair, remove, and prune additional working folders.",
"Worktrees are available from the new entry below Tags; branches can also be opened in a worktree from their context menu.",
"Line-level staging: select additions and deletions, Shift-click ranges, and stage, unstage, or discard selected lines.",
"Safer dialogs: a clearer branch deletion confirmation and a blurred background while dialogs are open.",
"Arch Linux packages: automated PKGBUILD builds plus publication of .pkg.tar.zst and the Pacman repository database to the CDN.",
"More robust remote operations, centralized error messages, and structured privacy-conscious telemetry.",
"Expanded bilingual help for worktrees, Pacman installation, and line-level staging.",
],
note: "Package metadata may represent the same release as 2026.7.21 because package managers use numeric version segments without leading zeroes.",
},
{
id: "changelog-2026-7-20",
title: "Version 2026.7.20",
summary: "The latest published version focused on productivity, clearer navigation, and a more stable package build.",
steps: [
"AI-assisted pre-commit review can analyze the staged diff before committing.",
"Optional automatic refresh keeps repository status and the workspace current.",
"The repository action bar, status presentation, tabs, and diff view became easier to scan.",
"The built-in help gained comprehensive German Git documentation.",
"PKGBUILD and build scripts prepared the Arch Linux distribution workflow.",
],
},
],
});
let { language = "en", onClose = () => {} }: Props = $props();
const isGerman = $derived(language === "de");
const categories = $derived(isGerman ? deCategories : enCategories);
@@ -1297,6 +1530,7 @@
>
<span class="help-nav-icon">
{#if category.id === "start"}<Home size={17} aria-hidden="true" />
{:else if category.id === "changelog"}<Sparkles size={17} aria-hidden="true" />
{:else if category.id === "app"}<BookOpen size={17} aria-hidden="true" />
{:else if category.id === "basics"}<GitCommitHorizontal size={17} aria-hidden="true" />
{:else if category.id === "branches"}<GitBranch size={17} aria-hidden="true" />