Bukan di repositori Git , melainkan di GitHub secara khusus - bagaimana cara mencari hanya pesan komit dari repositori / cabang tertentu?
Bukan di repositori Git , melainkan di GitHub secara khusus - bagaimana cara mencari hanya pesan komit dari repositori / cabang tertentu?
Jawaban:
Pada 2017 ini merupakan fungsi yang termasuk dalam GitHub itu sendiri .
Contoh pencarian yang digunakan oleh mereka adalah repo:torvalds/linux merge:false crypto policy
Gambar GIF dari https://github.com/blog/2299-search-commit-messages
Anda dulu bisa melakukan ini, tetapi GitHub menghapus fitur ini di beberapa titik pertengahan 2013. Untuk mencapai ini secara lokal, Anda dapat melakukan:
git log -g --grep=STRING
(Gunakan -g
bendera jika Anda ingin mencari cabang lain dan menggantung komit.)
-g, --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from
the most recent one to older ones.
-g
tanda untuk kasus penggunaan yang paling umum. Saya belum melihat terlalu banyak tentang hal ini, tetapi dengan -g
, pencarian tampaknya kembali hanya satu bulan. git log -g --grep=fix
sementara di develop
cabang repo yang memiliki ~ 8000 komitmen mencakup dua tahun, hanya berjalan sejauh 2 Februari.
-g
bendera.
Pembaruan (2017/01/05):
GitHub telah menerbitkan pembaruan yang memungkinkan Anda sekarang untuk mencari di dalam pesan komit dari dalam UI mereka. Lihat posting blog untuk informasi lebih lanjut.
Saya memiliki pertanyaan yang sama dan menghubungi seseorang GitHub kemarin:
Karena mereka mengganti mesin pencarian mereka ke Elasticsearch, tidak mungkin untuk mencari pesan komit menggunakan UI GitHub. Tetapi fitur itu ada di wishlist tim.
Sayangnya tidak ada tanggal rilis untuk fungsi itu sekarang.
Jawaban singkatnya adalah, Anda tidak dapat mencari pesan komit langsung di situs web github.com. Untuk saat ini kami merekomendasikan git grep
solusi lokal yang diajukan orang lain pada utas ini.
Pada satu titik waktu GitHub memang menawarkan git grep
pencarian gaya atas pesan komit untuk repositori tunggal. Sayangnya, pendekatan ini mengekspos penolakan layanan yang dapat membuat server file tidak dapat diakses. Karena alasan ini, kami menghapus git grep
pencarian.
Perkiraan back-of-the envelope saat ini menempatkan jumlah komitmen di GitHub sekitar 80 miliar. Meskipun teknisi Google tertawa di belakang kami, ini adalah sejumlah besar dokumen untuk disimpan di ElasticSearch. Kami ingin membuat dataset ini dapat dicari, tetapi ini bukan proyek sepele.
git diff's
(artinya isi dari komit, bukan metadata komit)
Ini dihapus dari GitHub. Saya menggunakan:
$git log --all --oneline | grep "search query"
Anda juga dapat memfilter menurut penulis:
$git log --all --oneline --author=rickhanlonii | grep "search query"
Dari halaman bantuan tentang pencarian kode , sepertinya ini belum memungkinkan.
Anda dapat mencari teks di repositori Anda, termasuk kemampuan untuk memilih file atau jalur untuk mencari, tetapi Anda tidak dapat menentukan bahwa Anda ingin mencari dalam komit.
Mungkin menyarankan ini kepada mereka ?
Anda dapat melakukan ini dengan repositori yang telah dirayapi oleh Google (hasil bervariasi dari repositori ke repositori).
Situs "ubah lisensi": https://github.com/*/*/commits
Situs "ubah lisensi": https://github.com/*/*/commits/master
Situs "ubah lisensi": https://github.com/twitter/*/commits/master
Situs "ubah lisensi": https://github.com/twitter/some_project/commits
Perbarui Januari 2017 (dua tahun kemudian):
Anda sekarang dapat mencari pesan komit ! (masih hanya di cabang master)
Februari 2015: Tidak yakin itu mungkin, mengingat basis infrastruktur pencarian saat ini di Elasticsearch (diperkenalkan pada Januari 2013 ).
Sebagai jawaban "menarik dari sumber yang kredibel dan / atau resmi", berikut adalah wawancara yang dilakukan dengan orang-orang GitHub yang bertugas memperkenalkan Elasticsearch di GitHub (Agustus 2013)
Tim Pease : Kami memiliki dua jenis dokumen di sana: Satu adalah file kode sumber dan yang lainnya adalah repositori. Cara git bekerja adalah Anda memiliki commit dan Anda memiliki cabang untuk setiap commit. Dokumen repositori melacak komit terbaru untuk repositori tertentu yang telah diindeks. Ketika pengguna mendorong komit baru hingga Github, kami kemudian menarik dokumen repositori itu dari elasticsearch. Kami kemudian melihat komit yang terakhir diindeks dan kemudian kami mendapatkan daftar semua file yang telah dimodifikasi, atau ditambahkan, atau dihapus antara dorongan terbaru ini dan apa yang sebelumnya telah kami indeks. Kemudian kita dapat melanjutkan dan memperbarui dokumen-dokumen yang telah diubah. Kami tidak perlu mengindeks ulang seluruh pohon kode sumber setiap kali seseorang mendorong.
Andrew Cholakian: Jadi, kalian hanya mengindeks, saya berasumsi, cabang utama.
Tim Pease: Benar. Hanya kepala cabang master yang akan Anda masuki dan masih ada banyak data, dua miliar dokumen, 30 terabyte.
Andrew Cholakian: Itu luar biasa besar.
[...]
Tim Pease: Dengan mengindeks kode sumber saat ditekan, ini adalah proses penyembuhan diri.
Kami memiliki dokumen repositori yang melacak komit yang terakhir diindeks. Jika kami melewatkan, kebetulan melewatkan tiga komit ketika pekerjaan itu gagal, komit berikutnya yang masuk, kami masih melihat perbedaan antara komit sebelumnya yang kami indeks dan yang kami lihat dengan dorongan baru ini.
Anda melakukangit diff
dan mendapatkan semua file yang telah diperbarui, dihapus, atau ditambahkan. Anda bisa mengatakan, “Oke, kita perlu menghapus file-file ini. Kita perlu menambahkan file-file ini, dan semua itu. " Ini penyembuhan diri dan itulah pendekatan yang telah kami ambil dengan hampir semua arsitekturnya.
Itu semua berarti tidak semua cabang dari semua repo akan diindeks dengan pendekatan itu.
Pencarian pesan komit global tidak tersedia untuk saat ini.
Dan Tim Pease sendiri mengkonfirmasi pesan komit tidak diindeks .
Perhatikan bahwa tidak mungkin mendapatkan pengindeksan lokal elasticsearch sendiri dari klon lokal: lihat " Mencari repositori git dengan ElasticSearch "
Tetapi untuk repo tertentu, yang paling mudah adalah tetap mengkloningnya dan melakukan:
git log --all --grep='my search'
(Opsi lainnya di " Bagaimana cara mencari repositori Git dengan mengkomit pesan? ")
Karena ini telah dihapus dari GitHub, saya telah menggunakan gitk
Linux untuk melakukan ini.
Dari terminal buka repositori Anda dan ketik gitk
.
Di tengah GUI, ada kotak pencarian. Ini memberikan pilihan filter yang baik:
Lingkup - mengandung, menyentuh jalur, menambah / menghapus string, mengubah pencocokan garis
Jenis pencocokan - Exact / IgnCase / Regexp
Bidang pencarian - Semua bidang / Judul / Komentar / Pengganti
Ini berfungsi baik dari dalam Eclipse , hingga GitHub menambahkan fitur:
Jika Anda memiliki versi lokal repositori, Anda mungkin ingin mencoba skrip shell mentah yang saya tulis untuk membuka halaman GitHub untuk semua komit yang cocok dengan istilah pencarian Anda di tab baru di browser default Anda:
#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done
Cukup ganti https://github.com/RepoOwnerUserName/RepoName/
dengan URL GitHub aktual dari repositori Anda, simpan skripnya di suatu tempat (misalnya githubsearch.sh
, buatlah itu dapat dieksekusi ( chmod +x githubsearch.sh
) dan kemudian tambahkan alias berikut ke ~/.bashrc
file Anda :
alias githubsearch='/path/to/githubsearch.sh'
Lalu, dari mana saja di repositori Git Anda, lakukan saja ini di terminal:
githubsearch "what you want to search for"
dan komitmen apa pun yang cocok dengan istilah pencarian Anda (tidak peka huruf besar kecil) akan memiliki halaman GitHub yang sesuai dibuka di browser Anda. (Berhati-hatilah bahwa jika istilah pencarian Anda muncul dalam ratusan komit, ini dapat merusak browser Anda dan memakan CPU PC Anda untuk sementara waktu.)