Использование двух звездочек для добавления файла в 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 добавил Все, когда нашел два матча... поскольку сухой прогон ведет себя иначе, чем фактический прогон, я думаю, что должна быть ошибка, но я думаю, что обсуждение должно проводиться в другом месте (если кто-то не думает, что это не ошибка).