Есть ли способ получить корневой каталог git одной командой? - PullRequest
575 голосов
/ 06 июня 2009

Mercurial имеет способ печати корневого каталога (который содержит .hg) через

hg root

Есть ли что-то эквивалентное в git для получения каталога, содержащего каталог .git?

Ответы [ 22 ]

1 голос
/ 05 июля 2010

Пришлось решить это самому сегодня. Решил это в C # так, как мне было нужно для программы, но, думаю, это можно переписать. Считайте, что это общественное достояние.

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;

}
0 голосов
/ 30 декабря 2018

Я хотел бы остановиться на превосходном комментарии Дэниела Брокмана.

Определение git config --global alias.exec '!exec ' позволяет вам выполнять такие действия, как git exec make, поскольку man git-config указывает:

Если расширение псевдонима начинается с восклицательного знака, оно будет рассматриваться как команда оболочки. [...] Обратите внимание, что команды оболочки будут выполняться из каталога верхнего уровня репозитория, который не обязательно может быть текущим каталогом.

Также полезно знать, что $GIT_PREFIX будет путем к текущему каталогу относительно каталога верхнего уровня репозитория. Но, зная, что это только полдела ™. Расширение переменной оболочки делает его довольно сложным в использовании. Поэтому я предлагаю использовать bash -c примерно так:

git exec bash -c 'ls -l $GIT_PREFIX'

другие команды включают в себя:

git exec pwd
git exec make
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...