Подтвердить что ты не робот

"git add" использование подстановочного знака не работает, как я надеялся - должен ли я записываться в определенные каталоги?

Когда я пытаюсь сделать базовый git add *.erb (или любые простые подстановочные выражения), git не распознает его (их). Как примечание, я никогда не делал этого раньше, поэтому я уверен, что это ошибка новичка, но я не нашел помощи в других постах SO или в списке рассылки моих школьных выпускников, поэтому я подумал, что этот пост может быть подходящим.

Для (другого) примера git status дает мне:

#   modified:   config/routes.rb
#   modified:   spec/models/question_spec.rb

Я хотел только поставить файл маршрутов, поэтому я попытался git add * s.rb и не играл в кости. Я нахожусь в корне приложения... мне нужно находиться в каталоге, содержащем файлы, к которым я пытаюсь применить шаблонное выражение? Это было бы больно, но... на самом деле... это просто сработало.

Надеюсь, это не должен быть отдельный пост, но есть ли более простой способ использовать подстановочные знаки, когда вам не нужно переходить в конкретный каталог?

4b9b3361

Ответ 1

Поместите его одинарные кавычки. Это должно работать.

git add '*s.rb'

UPDATE

После большего тестирования я узнаю, что я даже могу сделать git add *s.rb без кавычек. Это может работать только с моей версией git версии 1.7.10.4 (Mac OSX Lion, homebrew). Мое объяснение состоит в том, что если расширение wildcards оболочки не соответствует ни одному файлу, оно предоставит исходный нерасширенный аргумент '* s.rb' на git add.

sh-3.2$ git status
#
#   modified:   config/routes.rb
#   modified:   spec/models/products_spec.rb
#

Теперь я git add без кавычек.

sh-3.2$ git add *s.rb

Удивительно, но это работает!

sh-3.2$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   config/routes.rb
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   spec/models/products_spec.rb
#

Если шаблон подстановки не соответствует ни одному файлу, git выдаст эту ошибку.

sh-3.2$ git add *x.rb
fatal: pathspec '*x.rb' did not match any files

Ответ 2

Я не могу заставить рекурсивные глобусы работать для меня, так как моя версия bash слишком стар. Так что я делаю

find . -name "*.rb" | xargs git add

Работает с обработкой, и я могу добавить туда другие фильтры, если мне нужно - поэтому, если я хочу добавить все, кроме одного файла, я могу это сделать.

find . -name "*.rb" | grep -v "not_me.rb" | xargs git add

Есть несколько других случаев, которые могут быть полезны.

Если вы просто хотите добавить файлы, которые уже существуют в вашем репо, вы можете

git add -u .

Если вы хотите добавить все, то

git add .

Ответ 3

По моему опыту (возможно, мне не хватает опции или что-то еще), git add только просматривает файлы в текущем каталоге и подкаталоге. Поэтому, если вы хотите добавить все, перейдите в корневую директорию репо. Хотя, если репо действительно велико, это может занять некоторое время, особенно если вы не передаете флаг -u.