Использование двух звездочек для добавления файла в git

Я хочу добавить файл, который имеет уникальное имя файла, но длинный предыдущий путь (например, A/b/c/D/filename.ява.) Обычно я бы добавил Это в свой репозиторий, выполнив

git add *filename.java.

однако я также сделал это раньше:

git add a/b/c/d/filename*

поэтому я попытался объединить два:

git add *filename*

но это совсем что-то странное. Он добавляет каждый неотслеженный файл. Я вижу возможные причины неудачи, но все они должны произойти в один из двух предыдущих команд, поэтому я не знаю, почему это происходит.

мой вопрос не столько о том, как добавить файл в репозиторий Git с просто имени файла (хотя это было бы полезно). Мой вопрос в том, каково мое непонимание * операции, которая заставляет меня думать, что выше должно работать.

Info:

Я использую Git Bash для Windows, который основан на по MinGW.

1 ответов


вы смотрите на шарики (не регулярные выражения, которые являются другим языком сопоставления шаблонов), и они расширяются вашей оболочкой, а не git.

если вы хотите увидеть, как они будут соответствовать, просто передайте тот же шар другой команде, например.

$ ls -d *filename.java

vs

$ ls -d *filename*

(Я только что добавил -d поэтому ls не показывает содержимое любых каталогов, которые соответствуют)


так как вы используете Git bash, и возможно, что расширение glob ведет себя иначе, чем обычная оболочка, попробуйте

$ git add --dry-run --verbose -- *filename*

например: это должно показать вам, как он действительно расширяет глобус и какой эффект это имеет.

Примечание -- ... если вы используете globs, что может сопоставьте имя файла с ведущим -, важно убедиться, что git знает, что это имя файла, а не опция.

к сожалению, это покажет вам только файлы, которые оба соответствуют glob, и имеют некоторую разницу между индексом и рабочей копией.


ответ от автора: Сухой пробег очень помог, вот что я нашел:

Я забыл о папке bin, которую я не добавил, Поэтому, когда я выполнил сухой прогон, я понял, что нашел два совпадения: имя файла.java и имя файла.класс. Когда я изменил Глоб на *filename.j* это сработало.

моим следующим шагом было удалить .класс и повторите попытку команды: it сработало! До сих пор непонятно, почему Git bash добавил Все, когда нашел два матча... поскольку сухой прогон ведет себя иначе, чем фактический прогон, я думаю, что должна быть ошибка, но я думаю, что обсуждение должно проводиться в другом месте (если кто-то не думает, что это не ошибка).