Я думаю, дело в том, каковы критерии для определения файла как отслеженного или не отслеженного. Там должен быть какой-то отслеживаемый набор файлов для поиска.
По крайней мере, в моей более старой (1.6.0) версии git вам нужно поставить --error-unmatchопцию перед именем файла, чтобы получить ошибку. Каким-то образом опция применяется только к именам файлов, которые следуют за ней.
Алекс Дюпюи
На самом деле проблема заключается в том, что перестановка опций GNU getopt не включена, и при появлении после имени файла (или после --) --error-unmatchон обрабатывается как просто другое (не в индексе) имя файла и не имеет никакого эффекта.
[Наивный способ] Внесите небольшое изменение в файл (добавьте / удалите пробел). И посмотрите, есть ли файл в списке при наборе 'git status'. Глупый путь, но может сэкономить время.
BraveNinja
Но я добавил и зафиксировал его с помощью команды "git add -A && git commit -m" blah ". Даже файлы целиком вижу с помощью команды" git ls-tree --name-only -r sha1 ".
Dr.jacky
66
Если вы не хотите загромождать консоль сообщениями об ошибках, вы также можете запустить
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
dechimp
16
РЕДАКТИРОВАТЬ
Если вам нужно использовать 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Ваш друг, если вам нужно проанализировать вывод по сценарию, посмотрите на связанный документ, он покажет некоторые другие полезные опции
stefanB
Хихи, не работает с очень старым Git: git status --porcelain error: unknown option porcelain 'Версия 1.6.0 :-)
Laryx Decidua
@ user465139 это правильно ... вам нужен git 1.7.0 или новее (опция фарфора до этого не добавлялась).
mason81
13
Попробуйте запустить git statusфайл. Он напечатает ошибку, если он не отслеживается git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
Ух ты. Я должен был запустить его в каталоге, и он действовал так, как будто проверял весь репозиторий. Спасибо.
Дейл Форестер
4
На самом деле, если я запускаю, git status trackedfileя получаю код выхода 1 (ожидаемый 0, который будет полезен), но он не выдает мне «error:» в выходных данных. Я бы лучше проанализировал код выхода, чем вывод строки.
Дейл Форестер
43
Я обнаружил, что не возникает никакой ошибки, если я запускаю git status для файла, который существует в моей рабочей копии git, но который исключен .gitignore. (Т.е. этот ответ не подойдет.)
JellicleCat
Обратите внимание, что он не работает должным образом, если файл находится в списке игнорирования, то есть в файле.gitignore
Робин Хсу
8
Это не работает Он всегда печатает одно и то же, даже если файл не существует. $ git status notthere:On branch master nothing to commit, working directory clean
Хлоя
6
Я не знаю ни одной команды git, которая выдает «плохой» код завершения, но кажется, что простой способ сделать это - использовать команду git, которая не выводит файл, который не отслеживается, например: git-log или git-ls-files. Таким образом, вам не нужно выполнять какой-либо анализ, вы можете запустить его с помощью другой простой утилиты, такой как grep, чтобы увидеть, есть ли какие-либо выходные данные.
Например,
git-ls-files test_file.c | grep.
выйдет с нулевым кодом, если файл отслеживается, но с кодом выхода, равным единице, если файл не отслеживается.
Ответы:
пытаться:
выйдет с 1, если файл не отслежен
источник
--error-unmatch
опцию перед именем файла, чтобы получить ошибку. Каким-то образом опция применяется только к именам файлов, которые следуют за ней.--
)--error-unmatch
он обрабатывается как просто другое (не в индексе) имя файла и не имеет никакого эффекта.git ls-files | grep <PATTERN>
? пример:git ls-files | grep Main.h
Если вы не хотите загромождать консоль сообщениями об ошибках, вы также можете запустить
а затем проверьте результат. Если git ничего не возвращает, файл не отслеживается. Если он отслеживается, git вернет путь к файлу.
Это удобно, если вы хотите объединить его в сценарии, например PowerShell:
источник
file_name
должно быть точное совпадение (полный путь + имя файла), но может использоваться с подстановочными знаками:git ls-files *foo.rb
РЕДАКТИРОВАТЬ
Если вам нужно использовать git из bash, есть
--porcelain
возможностьgit status
:Вывод выглядит так:
Или, если вы делаете только один файл за раз:
ОРИГИНАЛ
делать:
Вы увидите отчет о том, какие файлы были обновлены, а какие нет.
Вы можете видеть
bla.sh
, отслеживается и изменяется иnewbla
не отслеживается:источник
git status --porcelain
Ваш друг, если вам нужно проанализировать вывод по сценарию, посмотрите на связанный документ, он покажет некоторые другие полезные опцииgit status --porcelain error: unknown option
porcelain 'Версия 1.6.0 :-)Попробуйте запустить
git status
файл. Он напечатает ошибку, если он не отслеживается 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, чтобы увидеть, есть ли какие-либо выходные данные.
Например,
выйдет с нулевым кодом, если файл отслеживается, но с кодом выхода, равным единице, если файл не отслеживается.
источник
Я предлагаю пользовательский псевдоним на вас
.gitconfig
.Вы должны сделать способ:
1) С помощью команды git:
2) Редактирование
~/.gitconfig
и добавление этой строки в разделе псевдонимов:После запуска команды (1) или сохраненного файла (2) в своей рабочей области вы можете проверить это:
источник
Использование
git log
даст информацию об этом. Если файл отслеживается в git, команда показывает некоторые результаты (логи). Остальное пусто.Например, если файл отслеживается Git,
Если файл не отслеживается,
источник
Просто мои два цента:
git ls-files | grep -x relative/path
где
relative/path
можно легко определить, нажавtab
внутри оболочки автозаполнения. Добавьте дополнительный,| wc -l
чтобы получить 1 или 0 выход.источник
grep
опцию--fixed-strings
.