Як згадується в " git: Як мені рекурсивно додати всі файли в піддерево каталогів, що відповідають глобальному шаблону? ", Якщо ви належним чином уникнути або процитувати ваш глобус pathspec (наприклад,'*.java'
), то так, git add'*.java'
Git 2.13 (Q2 2017) покращує показник для інтерактивного додавання:
Див. Запис 7288e12 (14 березня 2017 р.) Від Джеффа Кінга ( peff
) .
(Об'єднав Хуніо С Хамано - gitster
- у комітеті 153e0d7 , 17 березня 2017 р.)
add --interactive
: не розгортайте проспекти шляху за допомогою ls-files
Коли ми хочемо отримати список модифікованих файлів, ми спочатку розширюємо будь-які надані користувачем спекуляції за допомогою " ls-files
", а потім подаємо отриманий список шляхів як аргументи до " diff-index
" і " diff-files
".
Якщо ваш pathspec розшириться на велику кількість шляхів, ви можете зіткнутися з однією з двох проблем:
ОС може скаржитися на розмір списку аргументів і відмовлятися від запуску. Наприклад:
$ (ulimit -s 128 && git add -p drivers)
Can't exec "git": Argument list too long at .../git-add--interactive line 177.
Died at .../git-add--interactive line 177.
Це в linux.git
сховищі, яке містить близько 20 К файлів у каталозі "драйвери" (жоден з них не змінюється в цьому випадку). " ulimit -s
" Трюк необхідний, щоб показати проблему в Linux навіть для такого гігантського набору шляхів.
Інші операційні системи мають набагато менші обмеження (наприклад, в реальному світі було викладено лише 5K файлів на OS X).
Навіть коли це працює, це дуже повільно. Код pathspec не оптимізований для величезної кількості шляхів. Ось той самий випадок без уваги:
$ time git add -p drivers
No changes.
real 0m16.559s
user 0m53.140s
sys 0m0.220s
Ми можемо покращити це, пропустивши ls-files
повністю " " "і просто подавши початкові особливості шляху до команд diff.
Історично мова " diff-index
", яка підтримується " ", була слабшою, але це вже не так.