Files
GitLite/docs/api-contract.md
T
Christoph Brandau 7800f0fb24 feat(git): expand core git repository management features
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.
2026-07-13 23:24:36 +02:00

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> (the file argument 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[]> (the file argument can also be a folder path)