Есть ли способ сказать, прослеживается ли файл путем выполнения некоторых git
команда и проверка ее кода выхода?
Другими словами: мерзавец отслеживает файл?
попробуйте:
git ls-files --error-unmatch <file name>
завершится с 1, если файл не отслеживается
Попробуйте выполнить git status
для файла. Он выдаст ошибку, если он не отслеживается git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
Я не знаю ни одной команды git, которая дает "плохой" код выхода, но кажется, что это простой способ сделать это - использовать команда git, которая не выводит данные для файла, который не отслеживается, например git-log или git-ls-files. Таким образом, вам действительно не нужно выполнять какой-либо синтаксический анализ, вы можете запустить его с помощью другой простой утилиты, такой как grep, чтобы увидеть, был ли какой-либо вывод.
Например,
git-ls-files test_file.c | grep.
завершится с нулевым кодом, если файл отслеживается, и с кодом выхода, равным единице, если файл не отслеживается.
EDIT
Если вам нужно использовать git из bash, есть опция --porcelain
для git status
:
--porcelain
Предоставьте вывод в стабильном, легко разбираемом формате для скриптов. В настоящее время это идентично с --short output, но гарантируется не изменится в будущем, что делает его безопасным для скриптов.
Вывод выглядит так:
> git status --porcelain
M starthudson.sh
?? bla
Или если вы делаете только один файл за раз:
> git status --porcelain bla
?? bla
ORIGINAL
do:
git status
Вы увидите отчет о том, какие файлы были обновлены, а какие не отслеживаются.
Вы видите, что bla.sh
отслеживается и изменен, а newbla
не отслеживается:
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: bla.sh
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# newbla
no changes added to commit (use "git add" and/or "git commit -a")