feat(changelog): Add comprehensive changelog and help documentation
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:
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user