Как рекурсивно добавить файлы по шаблону (или глобусу), расположенным в разных каталогах?
Например, я хотел бы добавить A/B/C/foo.java
и D/E/F/bar.java
(и несколько других файлов Java) с помощью одной команды:
git add '*.java'
К сожалению, это не работает, как ожидалось.
git
glob
filepattern
Мишель Крамер
источник
источник
.java
файлы в текущем каталоге, вы можете столкнуться со сложной обработкой подстановочных знаков между bash и «помощником» командной строки msys . Я не уверен насчет решения. Вы можете попробовать несколько слоев кавычек:git add '"*.java"'
(одинарные кавычки используются bash для предотвращения расширения глобуса, двойные кавычки берутся слоем msys для предотвращения расширения глоба).git add *.java
работает для меня (на PowerShell с клиентом GitHub)Ответы:
Ответ Серхио Акосты, вероятно, является лучшим выбором, если некоторые из файлов, которые будут добавлены, возможно, еще не отслежены. Если вы хотите ограничить себя файлами, о которых git уже знает, вы можете
git-ls-files
использовать фильтр:Git не предоставляет каких-либо причудливых механизмов для того, чтобы делать это самому, поскольку это в основном проблема оболочки: как получить список файлов, которые будут предоставлены в качестве аргументов для данной команды.
источник
git ls-files -co --exclude-standard | grep '\.java$' | xargs git add
Вы можете использовать
git add [path]/\*.java
для добавления файлов Java из подкаталогов,например,
git add ./\*.java
для текущего каталога.Из
git add
документации :источник
С помощью
zsh
вы можете запустить:и все ваши
*.java
файлы будут добавлены рекурсивно.источник
zsh
оболочка для окон ... вы сделаете себе одолжение, чтобы использовать ее вместо bash, imho.ls
).Немного не по теме (не относящийся конкретно к git), но если вы используете Linux / Unix, обходной путь может быть:
И если вы ожидаете пути с пробелами:
Но я знаю, что это не совсем то, что вы спросили.
источник
Ответ Сергея (не верить мне) работает:
с недавним мерзавцем:
Файлы для теста:
Git статус:
Добавление * .txt:
Обновленный статус:
источник
Если вы уже отслеживаете свои файлы и внесли изменения в них, и теперь вы хотите добавить их выборочно на основе шаблона, вы можете использовать
--modified
флагНапример, если вы хотите добавить только изменения CSS в этот коммит, вы можете сделать
Смотрите
man git-ls-files
больше флаговисточник
Просто используйте
git add *\*.java
. Это добавит все файлы .java в корневой каталог и все подкаталоги.источник
Добавление решения для командной строки Windows, которое еще не было упомянуто:
источник
Я хотел добавить только файлы, которые имели определенную строку на основе
git status
:git status | grep string | xargs git add
а затем смог
git commit -m 'commit msg
зафиксировать все измененные файлы со «строкой» в заголовке файлаисточник
Как упомянуто в « git: Как я могу рекурсивно добавить все файлы в поддереве каталога, которые соответствуют шаблону glob? », Если вы правильно экранируете или цитируете свой globbing pathspec (например,
'*.java'
), тогда да, git add'*.java'
Git 2.13 (второй квартал 2017 года) улучшает это для интерактивного добавления
Смотрите коммит 7288e12 (14 марта 2017 г.) Джеффа Кинга (
peff
) .(Слиты Junio C Hamano -
gitster
- в фиксации 153e0d7 , 17 марта 2017)Исторически язык pathspec, поддерживаемый "
diff-index
", был слабее, но это уже не так.источник
поместите строку в ~ / .gitconfig
[alias] addt = !sh -c 'git ls-files | grep \"\\.$1*\" | xargs git add' -
Если вы хотите добавить все измененные файлы Java, просто сделайте:
git addt java
Точно так же, если вы хотите добавить все измененные файлы Python, можете просто:
git addt py
источник