Menggunakan Git, bagaimana saya bisa mencari di dalam semua file di semua cabang lokal untuk string yang diberikan?
Khusus GitHub: apakah mungkin melakukan pencarian di atas di semua cabang GitHub? (Ada beberapa cabang jarak jauh di repositori GitHub jarak jauh saya yang idealnya tidak perlu saya hentikan untuk pencarian ini ...)
Jawaban:
Anda dapat melakukan ini di repositori Git:
Pencarian lanjutan GitHub memiliki kemampuan pencarian kode:
Pencarian kode akan melihat semua kode yang dihosting secara publik di GitHub. Anda juga dapat memfilter menurut:
language:
repo:
path:
sumber
git grep ...
. Lihatlah jawaban yang lain, mereka jauh lebih baik daripada yang ini meskipun itu ditandai sebagai jawaban yang diterima!path:
, karena dokumentasi sekilas tidak terlihat jelas di mana menerapkan filter ini, apakah saya berasumsi sebelum kutipan dalam contoh permintaan Anda?Jika Anda menggunakan perintah @manojlds Git grep dan mendapatkan kesalahan:
maka Anda harus menggunakan xargs :
Lihat juga Cara grep (cari) kode yang dilakukan dalam sejarah Git
sumber
Dalam banyak kasus
git rev-list --all
dapat mengembalikan sejumlah besar komitmen, membutuhkan waktu lama untuk memindai. Jika Anda, alih-alih mencari melalui setiap komit pada setiap cabang dalam riwayat repositori Anda, hanya ingin mencari semua tips cabang, Anda dapat menggantinya dengangit show-ref --heads
. Jadi totalnya:atau:
Kiat: Anda dapat menulis keluaran dalam file untuk dilihat di editor:
sumber
git show-ref --heads
daftar hash dan nama ref sehingga (baris 2) akan mencari dua kali. jadigit show-ref --heads | cut -d' ' -f2
lebih baik karena hanya akan mencantumkan nama-nama ref.git show-ref --heads -s
hanya mengeluarkan hash SHA1. Juga, jika ada beberapa cabang yang menunjuk ke komit yang sama, Anda akan memiliki duplikat. Anda dapat menghapusnya dengansort -u
, sepertigit show-ref --heads -s | sort -u | xargs git grep ...
function gsearch { git grep $1 $(git show-ref --heads) | grep "refs/heads" | grep $1 } # last grep to keep grep color highlight
Ada beberapa masalah dengan solusi yang tercantum di sini (bahkan diterima).
Anda tidak perlu mendaftar semua hash karena Anda akan mendapatkan duplikat. Juga, itu membutuhkan lebih banyak waktu.
Itu dibangun di sini di mana Anda dapat mencari string
"test -f /"
di beberapa cabangmaster
dandev
sebagaiyang sama dengan
Jadi begini.
Ini menemukan hash untuk tip dari semua cabang lokal dan hanya mencari di dalam komit:
Jika Anda perlu mencari di cabang terpencil juga maka tambahkan
-a
:Lebih lanjut:
sumber
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
atau akan gagal dengan->
simbol dalam daftar file, yang menunjukkan hubungan lokal ke cabang jauhAnda dapat mencoba ini:
sumber
git log --all -s"search_string"