Bagaimana cara menambahkan file secara rekursif berdasarkan pola (atau gumpalan) yang terletak di direktori yang berbeda?
Sebagai contoh, saya ingin menambahkan A/B/C/foo.java
dan D/E/F/bar.java
(dan beberapa file java lainnya) dengan satu perintah:
git add '*.java'
Sayangnya, itu tidak berfungsi seperti yang diharapkan.
git
glob
filepattern
Michel Krämer
sumber
sumber
.java
file (sudah dilacak) di direktori Anda saat ini, Anda mungkin berlari ke, eh, penanganan wildcard yang rumit antara bash dan "helper" baris perintah msys . Saya tidak yakin tentang solusi. Anda dapat mencoba beberapa lapis tanda kutip:git add '"*.java"'
(tanda kutip tunggal diambil oleh bash untuk mencegah ekspansi glob, tanda kutip ganda diambil oleh lapisan msys untuk mencegah ekspansi glob).git add *.java
bekerja untuk saya (di PowerShell dengan klien GitHub)Jawaban:
Jawaban Sergio Acosta mungkin adalah taruhan terbaik Anda jika beberapa file yang akan ditambahkan mungkin belum dilacak. Jika Anda ingin membatasi diri Anda pada file yang sudah diketahui git, Anda bisa menggabungkannya
git-ls-files
dengan filter:Git tidak menyediakan mekanisme mewah untuk melakukan ini sendiri, karena pada dasarnya masalah shell: bagaimana Anda mendapatkan daftar file untuk diberikan sebagai argumen untuk perintah yang diberikan.
sumber
git ls-files -co --exclude-standard | grep '\.java$' | xargs git add
Anda dapat menggunakan
git add [path]/\*.java
untuk menambahkan file java dari subdirektori,misalnya
git add ./\*.java
untuk direktori saat ini.Dari
git add
dokumentasi :sumber
Dengan
zsh
Anda dapat menjalankan:dan semua
*.java
file Anda akan ditambahkan secara rekursif.sumber
zsh
shell untuk windows ... Anda akan melakukan kebaikan untuk menggunakannya daripada bash, imho.ls
).Sedikit topik (tidak terkait git), tetapi jika Anda menggunakan linux / unix, solusinya adalah:
Dan jika Anda mengharapkan jalur dengan spasi:
Tapi saya tahu bukan itu yang Anda minta.
sumber
Jawaban Sergey (jangan kreditkan saya) berfungsi:
dengan git terbaru:
File untuk ujian:
Status git:
Menambahkan * .txt:
Status yang diperbarui:
sumber
Jika Anda sudah melacak file Anda dan telah membuat perubahan padanya dan sekarang Anda ingin menambahkannya secara selektif berdasarkan suatu pola, Anda dapat menggunakan
--modified
benderaMisalnya, jika Anda hanya ingin menambahkan perubahan CSS ke komit ini, Anda bisa melakukannya
Lihat
man git-ls-files
lebih banyak benderasumber
Gunakan saja
git add *\*.java
. Ini akan menambahkan semua file .java di direktori root dan semua subdirektori.sumber
Menambahkan solusi baris perintah Windows yang belum disebutkan:
sumber
Saya hanya ingin menambahkan file yang memiliki string tertentu berdasarkan
git status
:git status | grep string | xargs git add
dan kemudian dapat
git commit -m 'commit msg
melakukan semua file yang diubah dengan "string" pada judul filesumber
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)Secara historis bahasa pathspec yang didukung oleh "
diff-index
" lebih lemah, tetapi tidak lagi demikian.sumber
masukkan baris ~ / .gitconfig
[alias] addt = !sh -c 'git ls-files | grep \"\\.$1*\" | xargs git add' -
Jika Anda ingin menambahkan semua file java yang dimodifikasi, cukup lakukan:
git addt java
Samely, jika Anda ingin menambahkan semua file python yang dimodifikasi, cukup lakukan:
git addt py
sumber