Есть ли способ узнать, отслеживается ли файл, выполнив какую-либо gitкоманду и проверив код ее выхода?
Другими словами: git отслеживает файл?
Есть ли способ узнать, отслеживается ли файл, выполнив какую-либо gitкоманду и проверив код ее выхода?
Другими словами: git отслеживает файл?
Ответы:
пытаться:
git ls-files --error-unmatch <file name>
выйдет с 1, если файл не отслежен
--error-unmatchопцию перед именем файла, чтобы получить ошибку. Каким-то образом опция применяется только к именам файлов, которые следуют за ней.
--) --error-unmatchон обрабатывается как просто другое (не в индексе) имя файла и не имеет никакого эффекта.
git ls-files | grep <PATTERN>? пример:git ls-files | grep Main.h
Если вы не хотите загромождать консоль сообщениями об ошибках, вы также можете запустить
git ls-files file_name
а затем проверьте результат. Если git ничего не возвращает, файл не отслеживается. Если он отслеживается, git вернет путь к файлу.
Это удобно, если вы хотите объединить его в сценарии, например PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
file_nameдолжно быть точное совпадение (полный путь + имя файла), но может использоваться с подстановочными знаками:git ls-files *foo.rb
РЕДАКТИРОВАТЬ
Если вам нужно использовать git из bash, есть --porcelainвозможность git status:
--фарфор
Дайте вывод в стабильном, простом для анализа формате для скриптов. В настоящее время это идентично выводу --short, но гарантированно не изменится в будущем, что делает его безопасным для сценариев.
Вывод выглядит так:
> git status --porcelain
M starthudson.sh
?? bla
Или, если вы делаете только один файл за раз:
> git status --porcelain bla
?? bla
ОРИГИНАЛ
делать:
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")
git status --porcelainВаш друг, если вам нужно проанализировать вывод по сценарию, посмотрите на связанный документ, он покажет некоторые другие полезные опции
git status --porcelain error: unknown option porcelain 'Версия 1.6.0 :-)
Попробуйте запустить git statusфайл. Он напечатает ошибку, если он не отслеживается git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
git status trackedfileя получаю код выхода 1 (ожидаемый 0, который будет полезен), но он не выдает мне «error:» в выходных данных. Я бы лучше проанализировал код выхода, чем вывод строки.
.gitignore
$ git status notthere:On branch master nothing to commit, working directory clean
Я не знаю ни одной команды git, которая выдает «плохой» код завершения, но кажется, что простой способ сделать это - использовать команду git, которая не выводит файл, который не отслеживается, например: git-log или git-ls-files. Таким образом, вам не нужно выполнять какой-либо анализ, вы можете запустить его с помощью другой простой утилиты, такой как grep, чтобы увидеть, есть ли какие-либо выходные данные.
Например,
git-ls-files test_file.c | grep.
выйдет с нулевым кодом, если файл отслеживается, но с кодом выхода, равным единице, если файл не отслеживается.
Я предлагаю пользовательский псевдоним на вас .gitconfig.
Вы должны сделать способ:
1) С помощью команды git:
git config --global alias.check-file <command>
2) Редактирование ~/.gitconfigи добавление этой строки в разделе псевдонимов:
[alias]
check-file = "!f() { if [ $# -eq 0 ]; then echo 'Filename missing!'; else tracked=$(git ls-files ${1}); if [[ -z ${tracked} ]]; then echo 'File not tracked'; else echo 'File tracked'; fi; fi; }; f"
После запуска команды (1) или сохраненного файла (2) в своей рабочей области вы можете проверить это:
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
Использование git logдаст информацию об этом. Если файл отслеживается в git, команда показывает некоторые результаты (логи). Остальное пусто.
Например, если файл отслеживается Git,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <someone@somedomain.com>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
Если файл не отслеживается,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
Просто мои два цента:
git ls-files | grep -x relative/path
где relative/pathможно легко определить, нажав tabвнутри оболочки автозаполнения. Добавьте дополнительный, | wc -l чтобы получить 1 или 0 выход.
grepопцию --fixed-strings.