1014 Stimmen

Gibt es eine Möglichkeit, das git Root-Verzeichnis mit einem einzigen Befehl zu erhalten?

Mercurial hat eine Möglichkeit, das Root-Verzeichnis (das .hg enthält) über

hg root

Gibt es etwas Äquivalentes in Git, um das Verzeichnis zu erhalten, das das .git-Verzeichnis enthält?

2voto

swalog Punkte 4159

Für den Fall, dass jemand eine POSIX-konforme Methode braucht, um dies zu tun, ohne dass er git ausführbar:

git-root :

#$1: Path to child directory
git_root_recurse_parent() {
    # Check if cwd is a git root directory
    if [ -d .git/objects -a -d .git/refs -a -f .git/HEAD ] ; then
        pwd
        return 0
    fi

    # Check if recursion should end (typically if cwd is /)
    if [ "${1}" = "$(pwd)" ] ; then
        return 1
    fi

    # Check parent directory in the same way
    local cwd=$(pwd)
    cd ..
    git_root_recurse_parent "${cwd}"
}

git_root_recurse_parent

Wenn Sie die Funktionalität nur als Teil eines Skripts benötigen, entfernen Sie den Shebang und ersetzen Sie das letzte git_root_recurse_parent Linie mit:

git_root() {
    (git_root_recurse_parent)
}

-2voto

Hylke Bons Punkte 135

Ich musste dieses Problem heute selbst lösen. Gelöst es in C#, wie ich es für ein Programm benötigt, aber ich denke, es kann esily umgeschrieben werden. Betrachten Sie dies als Public Domain.

public static string GetGitRoot (string file_path) {

    file_path = System.IO.Path.GetDirectoryName (file_path);

    while (file_path != null) {

        if (Directory.Exists (System.IO.Path.Combine (file_path, ".git")))
            return file_path;

        file_path = Directory.GetParent (file_path).FullName;

    }

    return null;

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X