Bagaimana saya bisa mencari pesan komit di GitHub?


328

Bukan di repositori Git , melainkan di GitHub secara khusus - bagaimana cara mencari hanya pesan komit dari repositori / cabang tertentu?


3
Apakah repo itu publik atau pribadi?

2
Bagaimana dengan mencari pesan komit di semua fork? Mencoba menghindari menciptakan kembali roda ketika repositori utama memiliki lebih dari 100 garpu!
Daniel Sokolowski

Adakah perubahan sejak saat itu?
Pavel Šimerda

Saya ingin mencari komit jaringan
frumbert

Jawaban:


68

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

masukkan deskripsi gambar di sini Gambar GIF dari https://github.com/blog/2299-search-commit-messages


Saya mendapatkan kesalahan izin saat mencari repo pribadi yang telah saya akses baca / tulis.
anon58192932

1
Saya telah menonton selama lima menit dan saya tidak tahu ke mana arah mouse setelah diperbesar dan ke kanan.
Kevin Krumwiede

1
@KevinKrumwiede mungkin ke tombol "hentikan perekaman" haha
Corey Cole

Saya menyerah dan menggunakan "git log --all --grep = searhterm"
Edwin Evans

206

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 -gbendera 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.

143
mengapa mereka menghapusnya? Itu fitur yang sangat membantu.
Josh Brown

1
Factor Mystic: I.want.spaces.in.this.string ini biasanya sudah cukup.
dbrower

11
Tip menghilangkan -gtanda 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=fixsementara di developcabang repo yang memiliki ~ 8000 komitmen mencakup dua tahun, hanya berjalan sejauh 2 Februari.
Dan Dascalescu

1
@DanDascalescu Aneh, saya dapat menemukan komitmen akan kembali setidaknya 5 bulan dengan -gbendera.
Chrispy

134

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.


7
+1 Anda telah menghemat waktu saya tanpa hasil di GitHub bertanya-tanya bagaimana cara mencapai apa yang seharusnya menjadi bagian fungsionalitas yang jelas. Jadi sekarang kita harus mengkloning repo secara lokal untuk melakukan grep melalui baris perintah saja. Astaga, itu kemajuannya ?! ;)
McNab

68
Bahkan pencarian lanjutan mereka di Web UI tidak mengizinkan pencarian di bidang yang paling penting - pesan komit yang sebenarnya. Itu benar-benar konyol IMO. Github menyatukan aksi Anda!
Brad Thomas

22
Iya. Lupakan fakta bahwa mereka telah membangun layanan web yang membantu merevolusionerkan dan mempopulerkan perangkat lunak open source, fakta bahwa mereka tidak memiliki fitur yang satu ini membuatnya benar-benar palsu!
Jon Cairns

12
Terima kasih telah meluangkan waktu untuk mempublikasikan konten wacana Anda dengan GitHub di tempat umum yang mudah ditemukan. Tidak masuk akal bahwa ini adalah satu-satunya cara bagi publik untuk mendapatkan informasi seperti itu - sangat bodoh bagi GitHub untuk tidak memiliki pelacak masalah publik - tetapi di hadapan kebodohan seperti itu, apa yang telah Anda lakukan di sini adalah cara yang berguna untuk mencegah ratusan yang lain dari membuang-buang waktu mengirimkan permintaan yang sama. Terima kasih atas ratusan jam kerja produktivitas yang telah Anda hemat.
Mark Amery

1
Yah tidak jauh lebih baik daripada pelacak publik Atlasian, yang penuh dengan 7 tahun masalah terbuka dengan 1000-an
upvote

58

Jawaban singkatnya adalah, Anda tidak dapat mencari pesan komit langsung di situs web github.com. Untuk saat ini kami merekomendasikan git grepsolusi lokal yang diajukan orang lain pada utas ini.

Pada satu titik waktu GitHub memang menawarkan git greppencarian 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 greppencarian.

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.


2
+1. Yang sepertinya mengkonfirmasi apa yang saya pikir menulis jawaban saya : pesan komit tidak diindeks: Anda bekerja dengan pengindeksan git diff's(artinya isi dari komit, bukan metadata komit)
VonC

Bagaimana dengan tombol "lompat untuk melakukan"? Saat ini dapat diakses dari URL - stackoverflow.com/a/12214817/817632 tetapi tidak ada antarmuka untuk itu (bukan yang saya tahu). Gunakan kasing - temukan hash komit di suatu tempat di bower.json alih-alih versi dan ingin melihat apa yang komit ini lakukan dengan tepat. Ini akan menghemat waktu googling.
Olga

44

Ini dihapus dari GitHub. Saya menggunakan:

$git log --all --oneline | grep "search query"

masukkan deskripsi gambar di sini

Anda juga dapat memfilter menurut penulis:

$git log --all --oneline --author=rickhanlonii | grep "search query"

3
Ini berhasil bagi saya, tetapi jawaban yang paling banyak dipilih tidak.
makdad

21

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 ?


18
Ini sepertinya lebih sebagai kasus penggunaan "default" ketika datang untuk mencari melalui repo. Terutama bagi seseorang yang mengenal repositori baru dengan banyak komitmen. Mereka harus mempertimbangkan untuk menambahkan ini.
Jose Browne

19

Anda dapat melakukan ini dengan repositori yang telah dirayapi oleh Google (hasil bervariasi dari repositori ke repositori).

Cari semua cabang dari semua repositori yang dirayapi untuk "ubah lisensi"

Situs "ubah lisensi": https://github.com/*/*/commits

Cari cabang master dari semua repositori rayapan untuk "ubah lisensi":

Situs "ubah lisensi": https://github.com/*/*/commits/master

Cari cabang utama dari semua repositori twitter yang dirayapi untuk "ubah lisensi"

Situs "ubah lisensi": https://github.com/twitter/*/commits/master

Cari semua cabang repositori twitter / some_project untuk "ubah lisensi"

Situs "ubah lisensi": https://github.com/twitter/some_project/commits


4
@DZenBot jika itu bukan repo publik, maka Anda mungkin sudah memiliki salinan lokal untuk git grep, saya hanya meletakkan jawaban ini untuk mereka yang tidak ingin mengkloning seluruh repo publik untuk mencari tahu kapan beberapa perubahan dilakukan. Saya menggunakannya sebagian besar untuk menemukan komitmen yang menghapus dukungan untuk versi gtk yang lebih lama atau ketika lisensi berubah menjadi gpl3
technosaurus

15

Perbarui Januari 2017 (dua tahun kemudian):

Anda sekarang dapat mencari pesan komit ! (masih hanya di cabang master)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


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 melakukan git diffdan 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? ")


7

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:

Bilah pencarian

Lingkup - mengandung, menyentuh jalur, menambah / menghapus string, mengubah pencocokan garis

Jenis pencocokan - Exact / IgnCase / Regexp

Bidang pencarian - Semua bidang / Judul / Komentar / Pengganti



4

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 ~/.bashrcfile 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.)


0

Pada pertengahan 2019, ketikkan saja apa pun yang ingin Anda cari di kotak pencarian kiri atas dan kemudian klik "Komit."

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.