diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ea1f98..93bf7fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,53 @@ All notable user-facing changes to Gitty are documented in this file. The project uses calendar-style versions in the form `YYYY.M.PATCH`. +## [2026.8.8] - 2026-08-29 + +### Added + +- Git hosting integrations for GitHub, GitLab.com, GitLab Self-Managed, + Azure DevOps, and Gitea. Personal access tokens are stored separately in + the operating system keychain. +- Azure DevOps supports multiple independently configurable organizations, + each with its own display name, organization URL, username, and token. +- The Clone dialog has an Integrations tab that loads all repositories + available to the selected account, supports filtering and refresh, sorts + repositories alphabetically, and clones the selected repository directly + with its stored credentials. + +### Changed + +- Repository tabs use a more compact Git-client-style bar. Close buttons + remain visible and turn red only while hovered. +- The integration repository list uses a narrow custom scrollbar that grows + only slightly on hover and no longer covers repository names or metadata. +- Repository loading and status overlays use theme-aware design tokens with + improved contrast and a more compact presentation. + +### Fixed + +- Clearing sync settings on a branch that never had an upstream is now a safe + no-op instead of failing with a fatal Git error. + +## [2026.8.7] - 2026-08-23 + +### Added + +- Appearance settings now offer Modern, Classic, and Custom styles. Custom + themes can define their own persisted color palette, while a complete light + theme is available alongside the refreshed dark appearance. +- The branch visibility dialog groups local and remote branches into + collapsible sections with selected-branch counts. Local branches open by + default, while the remote group starts collapsed for quicker navigation. + +### Changed + +- Dark-theme colors, surfaces, controls, and focus outlines have been refined + for clearer interactive boundaries and more consistent contrast throughout + the application. +- The branch visibility dialog follows the responsive layout and visual + language of the rest of Gitty more closely. + ## [2026.8.6] - 2026-08-18 ### Changed @@ -243,6 +290,8 @@ The project uses calendar-style versions in the form `YYYY.M.PATCH`. [2026.07.22]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.7.22 [2026.07.21]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.7.21 [2026.7.20]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.7.20 +[2026.8.8]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.8 +[2026.8.7]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.7 [2026.8.6]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.6 [2026.8.5]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.5 [2026.8.4]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.4 diff --git a/README.md b/README.md index 9ed6f64..9b70277 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ Fast, simple, and designed for developers who want a clean Git experience withou - 🔄 Pull, Push & Fetch - 🔀 Merge & Rebase - 📦 Repository management +- ☁️ GitHub, GitLab, Azure DevOps, and Gitea integrations - 🗄️ Git LFS detection, tracking and object management - 🎨 Modern and intuitive UI @@ -103,6 +104,21 @@ the running window when Gitty is already open. --- +## Git hosting integrations + +Gitty connects to GitHub, GitLab.com, GitLab Self-Managed, Azure DevOps, and +Gitea from **Settings → Integrations**. Each connection uses a personal access +token that is stored in the operating system keychain instead of application +settings. Azure DevOps can manage multiple organizations with separate URLs, +usernames, and tokens. + +After enabling a connection, open **Clone → Integrations** to load the +repositories available to that account. Repositories are sorted +alphabetically and can be filtered, refreshed, selected, and cloned directly +with the stored credentials. + +--- + ## Development Start the complete desktop application in development mode with: diff --git a/docs/api-contract.md b/docs/api-contract.md index fe103d0..ae822dc 100644 --- a/docs/api-contract.md +++ b/docs/api-contract.md @@ -101,6 +101,20 @@ interface GitLfsFile { oid: string; version: string; } + +type GitIntegrationProvider = "github" | "gitlab" | "gitlab-self-hosted" | "azure-devops" | "gitea"; + +interface IntegrationRepository { + id: string; + name: string; + fullName: string; + description: string; + cloneUrl: string; + sshUrl: string; + webUrl: string; + updatedAt: string; + private: boolean; +} ``` ## Commands @@ -110,6 +124,7 @@ The command list below includes the repository-management and synchronization AP - `open_repository(path: string): Promise` - `init_repository(path: string, initialBranch?: string): Promise` - `clone_repository(...): Promise` +- `list_integration_repositories(provider: GitIntegrationProvider, baseUrl: string, accountId?: string): Promise`; loads credentials from the operating system keychain and returns every repository accessible through the configured Git hosting account. - `get_status(path: string): Promise` - `git_lfs_status(path: string): Promise` - `git_lfs_install(path: string): Promise` diff --git a/package-lock.json b/package-lock.json index 470f712..d5a7044 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "gitty", - "version": "2026.8.7", + "version": "2026.8.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gitty", - "version": "2026.8.7", + "version": "2026.8.8", "dependencies": { "@lucide/svelte": "^1.21.0", "@tailwindcss/vite": "^4.3.1", diff --git a/package.json b/package.json index 046e133..0b0d480 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gitty", - "version": "2026.8.7", + "version": "2026.8.8", "private": true, "type": "module", "scripts": { diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 7731a91..4d2dd78 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Gitty", - "version": "2026.8.7", + "version": "2026.8.8", "identifier": "com.gitty", "build": { "beforeDevCommand": "npm run prepare:lfs && npm run dev", diff --git a/src/lib/components/HelpOverlay.svelte b/src/lib/components/HelpOverlay.svelte index 8865a27..0dad1b9 100644 --- a/src/lib/components/HelpOverlay.svelte +++ b/src/lib/components/HelpOverlay.svelte @@ -635,6 +635,19 @@ "Öffne das Tab-Kontextmenü, um ein Repository aus der aktuellen Arbeitsfläche zu entfernen, ohne Dateien zu löschen.", ], }, + { + id: "app-integrations", + title: "Git-Hosting-Integrationen und Clone", + summary: "Gitty verbindet sich mit GitHub, GitLab.com, GitLab Self-Managed, Azure DevOps und Gitea. Danach kannst du deine verfügbaren Repositories direkt im Clone-Dialog durchsuchen und laden.", + steps: [ + "Öffne Einstellungen → Integrationen, wähle einen Anbieter und trage Server-URL, Benutzername sowie einen Personal Access Token ein.", + "Für Azure DevOps kannst du mehrere Organisationen anlegen. Jede Organisation besitzt einen eigenen Anzeigenamen, eine Organisations-URL und einen separat gespeicherten Token.", + "Aktiviere die Integration und speichere die Einstellungen. Tokens werden getrennt von den App-Einstellungen im Schlüsselbund des Betriebssystems abgelegt.", + "Öffne Clone → Integrationen und wähle das gewünschte Konto. Gitty lädt alle zugänglichen Repositories und sortiert sie alphabetisch.", + "Filtere bei Bedarf nach Name oder Beschreibung, wähle ein Repository und einen Zielordner und starte den Clone direkt mit den gespeicherten Zugangsdaten.", + ], + note: "Vergib Tokens nur die benötigten Leserechte und eine möglichst kurze Laufzeit. Entfernst du einen gespeicherten Token in Gitty, wird die betroffene Integration automatisch deaktiviert.", + }, { id: "app-commit-detail", title: "Saubere Commits in Gitty erstellen", @@ -1097,6 +1110,19 @@ "Use the tab context menu to remove a repository from the workspace without deleting its files.", ], }, + { + id: "app-integrations", + title: "Git hosting integrations and Clone", + summary: "Gitty connects to GitHub, GitLab.com, GitLab Self-Managed, Azure DevOps, and Gitea. You can then browse and clone the repositories available to your accounts directly from the Clone dialog.", + steps: [ + "Open Settings → Integrations, select a provider, and enter its server URL, username, and personal access token.", + "Azure DevOps supports multiple organizations. Every organization has its own display name, organization URL, and separately stored token.", + "Enable the integration and save the settings. Tokens are kept in the operating system keychain rather than application settings.", + "Open Clone → Integrations and select an account. Gitty loads every accessible repository and sorts the list alphabetically.", + "Filter by name or description when needed, select a repository and destination, and clone it directly with the stored credentials.", + ], + note: "Give tokens only the required read permissions and the shortest practical lifetime. Removing a stored token in Gitty automatically disables the affected integration.", + }, { id: "app-commit-detail", title: "Create clean commits in Gitty", @@ -1522,6 +1548,34 @@ label: "Neu in Gitty", description: "Änderungen seit der letzten veröffentlichten Version und wichtige Neuerungen früherer Releases.", sections: [ + { + id: "changelog-2026-8-8", + title: "Version 2026.8.8", + summary: "Dieses Release verbindet Gitty mit den wichtigsten Git-Hosting-Diensten und macht das Klonen aus deinen eigenen Repository-Listen deutlich schneller.", + steps: [ + "Neue Integrationen für GitHub, GitLab.com, GitLab Self-Managed, Azure DevOps und Gitea lassen sich zentral in den Einstellungen verwalten. Personal Access Tokens werden sicher im Schlüsselbund des Betriebssystems gespeichert.", + "Azure DevOps unterstützt mehrere Organisationen mit jeweils eigenem Anzeigenamen, eigener Organisations-URL, eigenem Benutzernamen und Token.", + "Der Clone-Dialog besitzt einen Integrationen-Reiter. Er lädt alle zugänglichen Repositories des gewählten Kontos, sortiert sie alphabetisch und unterstützt Suche, Aktualisieren und direktes Klonen mit den gespeicherten Zugangsdaten.", + "Die Repository-Tab-Leiste ist kompakter und näher an klassischen Git-Clients gestaltet. Das Schließen-X bleibt sichtbar und wird nur beim Überfahren rot.", + "Eine schmale eigene Scrollbar im Repository-Browser überdeckt weder Namen noch Metadaten und wird beim Überfahren nur leicht breiter.", + "Repository-Loading- und Status-Flächen reagieren konsistenter auf das aktive Theme und sind kompakter und kontrastreicher.", + "Das Entfernen eines nicht vorhandenen Upstreams ist jetzt ein sicherer No-op und löst keinen fatalen Git-Fehler mehr aus.", + ], + note: "Die Integrationen verwenden HTTPS und Personal Access Tokens. Welche Repositories sichtbar sind, richtet sich nach den Berechtigungen des jeweiligen Tokens und Kontos.", + }, + { + id: "changelog-2026-8-7", + title: "Version 2026.8.7", + summary: "Dieses Release erweitert die Darstellungseinstellungen und macht die Branch-Auswahl bei vielen lokalen und entfernten Branches übersichtlicher.", + steps: [ + "In den Einstellungen stehen die Darstellungsstile Aktuell, Klassisch und Eigene zur Verfügung. Beim eigenen Stil lässt sich eine individuelle Farbpalette konfigurieren und dauerhaft speichern.", + "Ein vollständiges helles Theme ergänzt die überarbeitete dunkle Darstellung. Farben, Flächen, Bedienelemente und Fokusrahmen besitzen klarere Grenzen und konsistentere Kontraste.", + "Der Dialog zur Branch-Sichtbarkeit trennt lokale und entfernte Branches in auf- und zuklappbare Gruppen und zeigt für jede Gruppe die Anzahl der ausgewählten Branches.", + "Beim Öffnen ist die lokale Gruppe ausgeklappt und die Remote-Gruppe zunächst geschlossen, damit häufig verwendete Branches schneller erreichbar sind.", + "Die Branch-Auswahl passt sich kleineren Fenstergrößen besser an und folgt dem visuellen Stil der übrigen Gitty-Dialoge.", + ], + note: "Darstellungsstil und eigene Farben werden lokal gespeichert und beim nächsten Start automatisch wieder angewendet.", + }, { id: "changelog-2026-8-6", title: "Version 2026.8.6", @@ -1652,6 +1706,34 @@ label: "What's new", description: "Changes since the latest published version and notable additions from earlier releases.", sections: [ + { + id: "changelog-2026-8-8", + title: "Version 2026.8.8", + summary: "This release connects Gitty to the major Git hosting services and makes cloning from your own repository lists substantially faster.", + steps: [ + "New integrations for GitHub, GitLab.com, GitLab Self-Managed, Azure DevOps, and Gitea can be managed centrally in Settings. Personal access tokens are stored securely in the operating system keychain.", + "Azure DevOps supports multiple organizations, each with its own display name, organization URL, username, and token.", + "The Clone dialog has an Integrations tab. It loads every repository accessible to the selected account, sorts the list alphabetically, and supports search, refresh, and direct cloning with stored credentials.", + "The repository tab bar is more compact and closer to familiar Git clients. Its close button remains visible and turns red only while hovered.", + "A narrow custom scrollbar in the repository browser no longer covers names or metadata and grows only slightly on hover.", + "Repository loading and status surfaces respond more consistently to the active theme with improved contrast and a more compact presentation.", + "Clearing a missing upstream is now a safe no-op instead of producing a fatal Git error.", + ], + note: "Integrations use HTTPS and personal access tokens. The repositories shown depend on the permissions granted to the selected account and token.", + }, + { + id: "changelog-2026-8-7", + title: "Version 2026.8.7", + summary: "This release expands appearance settings and makes branch selection easier to navigate in repositories with many local and remote branches.", + steps: [ + "Settings now provide Modern, Classic, and Custom appearance styles. Custom mode supports an individual color palette that is persisted across restarts.", + "A complete light theme complements the refreshed dark appearance. Colors, surfaces, controls, and focus outlines have clearer boundaries and more consistent contrast.", + "The branch visibility dialog separates local and remote branches into collapsible groups and displays the number of selected branches for each group.", + "The local group opens by default while the remote group starts collapsed, keeping frequently used branches quicker to reach.", + "The branch selector responds better to smaller window sizes and follows the visual language of the other Gitty dialogs.", + ], + note: "The selected appearance style and custom colors are stored locally and restored automatically on the next start.", + }, { id: "changelog-2026-8-6", title: "Version 2026.8.6",