/** Git is a trigger; this does not describe uncommitted working-tree content. */
export interface GitState {
    ref: string | null;
    head: string;
}
/** One refresh keeps its storage identity even if the checkout moves. */
export interface GitRefreshTarget {
    projectId: string;
    allowCreate: boolean;
    assertCurrent(): Promise<void>;
}
/** Resolve an observed branch through the existing project-identity rules. */
export declare function gitProjectId(projectPath: string, state: GitState): string;
/** Capture storage identity and a guard that rejects subsequent checkout changes. */
export declare function gitRefreshTarget(projectPath: string, state: GitState, allowCreate: boolean): GitRefreshTarget;
/** Read both ref and commit so a same-commit branch switch is still a change. */
export declare function readGitState(projectPath: string): Promise<GitState>;
/** Match both ref and commit; two absent observations are not synchronized. */
export declare function sameGitState(left: GitState | undefined, right: GitState | undefined): boolean;
//# sourceMappingURL=git-state.d.ts.map