Определите, находится ли каталог под контролем мерзавца

Как я могу сказать, является ли данный каталог частью мерзавца respository?

(Следующее находится в Python, но удар или что-то были бы прекрасны.)

os.path.isdir('.svn')

скажет Вам, если текущим каталогом будет управлять Подверсия. Подвижный и Мерзавец просто имеют .hg/.git наверху репозитория, таким образом, для hg Я могу использовать

os.system('hg -q stat 2> /dev/null > /dev/null') == 0)

но git status возвращает ненулевое (ошибка) статус выхода, если ничто не изменяется.

Выполняет итерации поиска пути .git самостоятельно лучшее я могу сделать?

63
задан nbro 25 August 2016 в 08:17
поделиться

5 ответов

Вызовите хранимую процедуру .

EDIT : Просто уточните. Построение динамического sql в sp, конечно, может быть столь же опасным, как и в приложении, но привязка пользовательских входов в запрос защитит вас от sql injection, как описано здесь (обсуждение для Oracle, но принцип применим в другом месте):

http://asktom.oracle.com/pls/asktom/f?p=100: 11:0:::: P11 _ QUESTION _ ID: 23863706595353

Это не динамический SQL проблема (весь sql является динамическим в Oracle на самом деле - даже статический sql в pro * c/plsql!). Это " "этого sql, который является проблема. Если пользователь дает вам входные данные - они должны быть ПРИВЯЗАНЫ к запросу -- не конкатенирован. Второй ты объединение пользовательского ввода в SQL - это как если бы вы дали им возможность передать вам код и вы выполнить этот код. Простой и простой.

-121--4631881-

Пусть массивы выполняют задание:

public static void main(String[] args) {
    Object[] numbers = new Object[100];
    Arrays.fill(numbers, new Object() {
        private int count = 0;
        @Override
        public String toString() {
            return Integer.toString(++count);
        }
    });
    System.out.println(Arrays.toString(numbers));
}
-121--1851162-

В системе ruby («git rev-parse») возвращается значение true, если текущий каталог находится в гит-репо, и false в противном случае. Я думаю, что пифонический эквивалент должен работать аналогично.

EDIT: Достаточно:

# in a git repo, running ipython
>>> system('git rev-parse')
0

# not in a git repo
>>> system('git rev-parse')
32768

Обратите внимание, что есть некоторые выходные данные на STDERR, когда вы не находитесь в репо, если это имеет для вас значение.

43
ответ дан 24 November 2019 в 16:13
поделиться

Просто нашел это в Git Help Rev-Parse

git rev-parse --is-inside-work-tree

Prints True Если оно находится в дереве Работа, False ] Если это в дереве «.git» и фатальная ошибка, если это ни один. Оба «TRUE» и «FALSE» напечатаны на STDOUT с состоянием выхода 0, фатальная ошибка напечатана на STDERR с состоянием выхода 128.

82
ответ дан 24 November 2019 в 16:13
поделиться

Для записи, используйте статус Git или подобное, это только для полноты ::)

поиск вверх дерево не имеет большого значения, в Bash вы можете сделать этот простой одноклассник (если вы положите его на один Линия ...);) Возвращает 0, если кто-то найден, 1 иначе.

d=`pwd`
while [ "$d" != "" ]; do
  [ -d "$d"/.git ] && exit 0
  d=${d%/*}
done
exit 1

Поиск в поисках папки .git.

4
ответ дан 24 November 2019 в 16:13
поделиться

Ну, каталог также можно игнорировать файлом .gitignore - поэтому вам нужно проверить для репозитория .git, и если есть один, анализировать .gitignore, чтобы увидеть, действительно ли этот каталог в репозитории Git.

Что именно вы хотите сделать? Там может быть более простая способ сделать это.

Редактировать: Вы имеете в виду: «Это каталог корень репозитория Git» или, вы имеете в виду «это каталог часть репозитория Git»?

для первого, тогда просто проверьте, есть ли. Гит - поскольку Это в корне, и вы закончите. Для второго, как только вы определили, что вы находитесь в репозитории Git, вам нужно проверить .gitignore для подкаталого оказания.

4
ответ дан 24 November 2019 в 16:13
поделиться

Добавьте это к вашему .bash_profile, и ваша подсказка всегда будет отображать активную ветку GIT и независимо от того, будут ли вы незаконные изменения.

function parse_git_dirty {
  [[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*"
}
function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1$(parse_git_dirty)]/"
}

export PS1=' \[\033[0;33m\]\w\[\033[00m\]\[\033[01;00m\]$(parse_git_branch): ' #PS1='\w> '

Вы увидите это:

 ~: 
 ~: cd code/scala-plugin/
 ~/code/scala-plugin[master*]: 
0
ответ дан 24 November 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: