Если */test*
соответствует некоторым файлам, оболочка расширит это выражение. Попытайтесь:
echo */test*
в командной строке. Сравните, например:
$ cd /tmp
$ mkdir empty
$ cd empty
$ echo */test*
*/test*
/tmp/empty
пуст, так */test*
не совпадает ни с чем.Но тогда:
$ mkdir dir; touch dir/test.file
$ echo */test*
dir/test.file
Так что, если вы не имеете ничего соответствие */test*
и запуск:
$ somegitcommand */test*
команда мерзавец будет видеть */test*
в качестве аргумента; но если у вас есть что-то, что соответствует, команда git увидит в качестве аргумента dir/test.file
. *
s исчезли.
Исправление действительно супер-простой: процитировать */test*
части:
$ git log --oneline -- '*/test*'
git log
Теперь будет видеть */test*
, а не dir/test.file
и мерзавец будет в состоянии сделать рекурсивное согласование.
Следует отметить, что не все раковины ведут себя одинаково. В CSH и Tcsh, если нет совпадения для Glob оболочки, как */test.*
, вы получите:
> rm -r dir
> echo */test*
echo: No match.
В Баш, вы можете выбрать поведение:
bash$ echo */test*
*/test*
bash$ shopt -s failglob
bash$ echo */test*
bash: no match: */test*
(на самом деле вы можете сделать то же самое в csh и tcsh, оно просто инвертируется: set nonomatch
и */test*
передается до echo
).
Кроме того, это иллюстрирует разницу между подстановочным подстановочным шрифтом оболочки (который не рекурсирует в подкаталоги) и git (что делает). См. Jubobs' answer и попробуйте (в оболочке) echo */*/test*
vs echo */test*
(все без кавычек). Некоторые оболочки имеют рекурсивное глобирование, которое может быть включено различными способами, например, с использованием **
для указания рекурсии: echo **/test*
.
Последнее замечание: соответствие шаблону Git и несколько изменилось с одной версии на другую, особенно в .gitignore
файлах. В частности, **
, что означает «нуль или более каталогов» (в частности, в файлах .gitignore
), был добавлен в git в version 1.8.2.
Я просто попробовал 'git log - */test *' на фиктивном репо, и он показывает записи журнала, в которых, например, было создано 'foo/bar/test1.py'. Какую версию Git вы используете? Я запускаю Git 2.0.1. – Jubobs
@Jubobs - в какой версии git вы работаете? Шахта (1.8.4) этого не делает. – ArjunShankar
Я отправлю пример моего ребенка, показывающий, что он работает в Git 2.0.1. Возможно, источник изменился между вашей версией и моей ... – Jubobs