Saya telah menemukan perintah yang menampilkan file di proyek saya:
find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
-a -not -path './coverage*' -a -not -path './bower_components*' \
-a -not -name '*~'
Bagaimana saya bisa memfilter file sehingga tidak menunjukkan yang ada di .gitignore?
Saya pikir saya menggunakan:
while read file; do
grep $file .gitignore > /dev/null && echo $file;
done
tetapi file .gitignore dapat memiliki pola glob (juga tidak akan bekerja dengan path jika file ada di .gitignore), Bagaimana saya bisa memfilter file berdasarkan pola yang mungkin memiliki gumpalan?
find-sh {} +
akhirnya?find-sh
?find /tmp -exec sh -c ': "${non_existed_var:?foo}"' find-sh {} +
misalnyaada perintah git untuk melakukan hal ini: mis
Seperti yang Anda nyatakan, itu akan melakukan grep dasar akan sebagian besar opsi grep normal, tetapi itu tidak akan mencari
.git
atau file atau folder di.gitignore
file Anda .Untuk lebih jelasnya, lihat
man git-grep
Submodules:
Jika Anda memiliki repo git lain di dalam repo git ini, (mereka harus dalam submodul) maka Anda dapat menggunakan flag
--recurse-submodules
untuk mencari dalam submodul jugasumber
Untuk menampilkan file yang ada di checkout Anda dan yang dilacak oleh Git, gunakan
Perintah ini memiliki sejumlah opsi untuk ditampilkan, misalnya file dalam cache, file yang tidak dilacak, file yang dimodifikasi, file yang diabaikan dll
git ls-files --help
. Lihat .sumber
git ls-files
tetapi tidak berpikir itu memiliki opsi untuk menampilkan file yang tidak terlacak, yang mana?-o
(lainnya). Misalnya,git ls-files -o -X .gitignore
.gitignore
.git ls-files
output ./foo.txt sementarafind
akan output ./Foo.txtAnda bisa menggunakan array di mana bash glob akan dijalankan.
Memiliki file seperti ini:
Dan memiliki
ignore
file seperti iniMenggunakan
Akan menghasilkan ini:
Anda kemudian dapat menggunakan teknik apa pun untuk memanipulasi data tersebut.
Saya pribadi lebih suka yang seperti ini:
sumber
gitignore
adalah superset daribash
glob, Anda akan melewatkan sesuatu seperti!file*
!file*
? Sebagai pola gumpalan dalam mengabaikan file atau sebagai nama file?gitignore
menerima pola file seperti!file*
untuk mengecualikan file mulai denganfile
, dan juga double star**
.gitignore
memiliki banyak fitur, yang semuanya mungkin tidak mudah diimplementasikan secara langsung di Bash: git-scm.com/docs/gitignore . Meskipun pengabaian yang hanya terdiri dari gumpalan sederhana harus dapat dilakukan dalam Bash biasa, tanpa awk atau semacamnya!
bukan? Mungkin globing yang diperluas dapat menangani situasi ini. Tentang doublestar, bash dapat mengatasinyashopt -s globstar
.