What's new in 1.3.0
All remote branches in the rail. The REMOTES section now lists every remote-tracking branch, grouped under its remote, instead of only the current branch's upstream:
- Branches show without the remote prefix (
develop,feat/auto-sync— notorigin/develop), grouped under each remote, so multiple remotes are supported (not just a hardcodedorigin). - The branch your current branch tracks is shown bold + accent-colored.
- Single-click a remote branch to view its history; double-click to check it out locally as a tracking branch (or switch to an existing local branch of the same name).
The section is hidden entirely when there are no remote-tracking branches, and the remote-name sub-headers are non-interactive labels (no hover or tap affordance).
Provider changes
GitWorkbenchProvider gains two methods, mirroring the existing loadBranches() / switchBranch(to:) pair:
func loadRemoteBranches() async throws -> [RemoteBranch]
func checkoutRemoteBranch(_ branch: RemoteBranch) async throwsA new RemoteBranch value (Sendable, Hashable, Identifiable) carries the full ref as its id (origin/feat/auto-sync, unique across remotes), the remote name, and the prefix-stripped name for display.
The bundled MockGitProvider and GitWorkbenchGitKit's CLIGitProvider both implement the new methods. CLIGitProvider reads remotes via git for-each-ref … refs/remotes and checks out with git switch --track.
Upgrading from 1.2.0
These two methods are required (no default implementations). If your host implements GitWorkbenchProvider itself, add loadRemoteBranches() and checkoutRemoteBranch(_:) to your conformance — return [] from the former (the REMOTES section then stays hidden) if you don't want remote-branch support. Hosts using the bundled providers need no changes. No existing method signatures or state shapes changed.
Requirements
- macOS 15+
- Swift 6 (language mode v6)
Installation
.package(url: "https://github.com/gpambrozio/GitWorkbench.git", from: "1.3.0"),