This update significantly expands the available Git functionality by adding robust support for initializing repositories, managing remotes, and improving complex workflow operations like merging and reverting commits. New API endpoints are exposed across the backend and frontend to handle remote setup, branch tracking, and conflict resolution workflows. - Added full remote management capabilities (add, update, remove). - Implemented advanced merge strategies and commit reversion logic. - Introduced a dedicated UI component for synchronization settings.
3.4 KiB
3.4 KiB
API Contract
The frontend calls Tauri commands with @tauri-apps/api/core.invoke.
Shared payloads
type FileStatusKind = "modified" | "added" | "deleted" | "renamed" | "untracked" | "conflicted" | "unknown";
interface GitStatus {
repo_path: string;
current_branch: string | null;
upstream: string | null;
ahead: number;
behind: number;
files: GitFileStatus[];
clean: boolean;
rebase_in_progress: boolean;
cherry_pick_in_progress: boolean;
merge_in_progress: boolean;
}
interface GitFileStatus {
path: string;
old_path: string | null;
staged: FileStatusKind | null;
unstaged: FileStatusKind | null;
}
interface GitBranch {
name: string;
current: boolean;
remote: boolean;
}
interface GitCommit {
hash: string;
short_hash: string;
summary: string;
author_name: string;
author_email: string;
date: string;
refs: string[];
files: GitCommitFile[];
}
interface GitCommitFile {
path: string;
old_path: string | null;
status: FileStatusKind;
}
interface GitRepositoryFile {
path: string;
tracked: boolean;
status: FileStatusKind | null;
}
Commands
The command list below includes the repository-management and synchronization API. The TypeScript wrappers in src/lib/git.ts are the authoritative full list.
open_repository(path: string): Promise<GitStatus>init_repository(path: string, initialBranch?: string): Promise<GitStatus>clone_repository(...): Promise<RepositoryBundle>get_status(path: string): Promise<GitStatus>list_branches(path: string): Promise<GitBranch[]>list_remotes(path: string): Promise<GitRemote[]>add_remote(path: string, name: string, url: string): Promise<GitRemote[]>update_remote(path: string, name: string, url: string): Promise<GitRemote[]>remove_remote(path: string, name: string): Promise<GitRemote[]>set_branch_upstream(path: string, branch: string, upstream?: string): Promise<GitStatus>delete_remote_branch(path: string, remote: string, branch: string): Promise<GitStatus>checkout_branch(path: string, branch: string): Promise<GitStatus>stage_files(path: string, files: string[]): Promise<GitStatus>unstage_files(path: string, files: string[]): Promise<GitStatus>restore_files(path: string, files: string[], staged: boolean): Promise<GitStatus>commit(path: string, message: string): Promise<GitStatus>fetch(path: string, prune?: boolean, remote?: string): Promise<GitStatus>pull(path: string, strategy?: "merge" | "rebase" | "ff-only", remote?: string, branch?: string): Promise<GitStatus>push(path: string, forceWithLease?: boolean, remote?: string): Promise<GitStatus>list_commits(path: string, limit?: number): Promise<GitCommit[]>restore_to_commit(path: string, commit: string): Promise<GitStatus>restore_file_from_commit(path: string, commit: string, file: string): Promise<GitStatus>(thefileargument can also be a folder path)merge_branch(path: string, branch: string, strategy?: "default" | "squash" | "ff-only" | "no-ff"): Promise<GitStatus>merge_continue(path: string): Promise<GitStatus>merge_abort(path: string): Promise<GitStatus>revert_commit(path: string, commit: string): Promise<GitStatus>list_repository_files(path: string): Promise<GitRepositoryFile[]>list_file_history(path: string, file: string, limit?: number): Promise<GitCommit[]>(thefileargument can also be a folder path)