import { Executor } from './executor';
import { LogReporter } from './log-reporter';
export interface GitCommit {
    message: string;
    date: Date;
    hash: string;
}
export interface GitTag {
    tagName: string;
    hash?: string;
}
export declare class Git {
    private cwd;
    private dryRun;
    private logger;
    private executor;
    private commandCache;
    private extraArgs;
    private _overrideCurrentBranch?;
    private _overrideCurrentRef?;
    addConfiguration(key: string, value: string): void;
    set overrideCurrentBranch(branch: string);
    set overrideCurrentRef(ref: string);
    static root(): Promise<string>;
    constructor(cwd: string, dryRun: boolean, logger: LogReporter, executor: Executor);
    exec(...args: string[]): Promise<string>;
    execSilent(...args: string[]): Promise<string | null>;
    logs(sinceHash?: string, relativeCwd?: string): Promise<GitCommit[]>;
    versionTags(prefix?: string): Promise<GitTag[]>;
    addTag(tag: string, message: string): Promise<void>;
    addAndCommitFiles(message: string, files: string[]): Promise<void>;
    push(): Promise<void>;
    currentBranch(): Promise<string | null>;
    currentRef(): Promise<string | null>;
    gitStatusHash(): Promise<string>;
    currentCommit(): Promise<string>;
    cleanChangeLogs(): Promise<void>;
    remoteName(): Promise<string | null>;
    remoteUrl(maxTries?: number): Promise<string | null>;
}
