Seperti disebutkan dalam " git: Bagaimana cara menambahkan semua file secara rekursif dalam subtree direktori yang cocok dengan pola glob? ", Jika Anda benar-benar lolos atau mengutip pathspec globbing (seperti '*.java'
) Anda, maka ya, git add'*.java'
Git 2.13 (Q2 2017) meningkatkannya untuk penambahan interaktif:
Lihat komit 7288e12 (14 Mar 2017) oleh Jeff King ( peff
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 153e0d7 , 17 Mar 2017)
add --interactive
: jangan perluas pathspecs dengan ls-files
Saat kami ingin mendapatkan daftar file yang dimodifikasi, pertama-tama kita perluas pathspec yang disediakan oleh pengguna dengan " ls-files
", dan kemudian berikan daftar path yang dihasilkan sebagai argumen untuk " diff-index
" dan " diff-files
".
Jika pathspec Anda berkembang menjadi sejumlah besar jalur, Anda dapat mengalami salah satu dari dua masalah:
OS mungkin mengeluh tentang ukuran daftar argumen, dan menolak untuk menjalankan. Sebagai contoh:
$ (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.
Itu ada di linux.git
repositori, yang memiliki sekitar 20 ribu file di direktori "driver" (tidak ada yang dimodifikasi dalam hal ini). ulimit -s
Trik " " diperlukan untuk menunjukkan masalah di Linux bahkan untuk set path raksasa seperti itu.
Sistem operasi lain memiliki batas yang jauh lebih kecil (misalnya, kasus dunia nyata terlihat dengan hanya 5K file pada OS X).
Bahkan ketika itu berhasil, itu sangat lambat. Kode pathspec tidak dioptimalkan untuk sejumlah besar jalur. Inilah kasus yang sama tanpa ulimit:
$ time git add -p drivers
No changes.
real 0m16.559s
user 0m53.140s
sys 0m0.220s
Kami dapat meningkatkan ini dengan melewatkan " ls-files
" sepenuhnya, dan hanya memberi makan pathspec asli ke perintah diff.
Secara historis bahasa pathspec yang didukung oleh " diff-index
" lebih lemah, tetapi tidak lagi demikian.