GitHub: menelusuri file versi lama

98

Saya tahu bahwa dengan menggunakan GitHub, saya dapat mencari semua versi file saya saat ini di repo. Namun, saya juga ingin mencari versi lama dari file repo saya. Misalnya, saya dulu memiliki fungsi bernama get_info () di kode saya, tetapi menghapusnya beberapa versi yang lalu, apakah mungkin untuk mencari get_info dan menemukan kodenya. Jika tidak memungkinkan menggunakan GitHub, apakah mungkin dari baris perintah git?

EDIT

Terima kasih kepada @Mark Longair yang telah menunjukkan bagaimana hal ini dapat dilakukan dari baris perintah git. Jika tidak memungkinkan di GitHub, itu akan menjadi fitur yang bagus untuk dimiliki.

normski
sumber

Jawaban:

121

Saat ini, saya tidak percaya bahwa mungkin untuk mencari di dalam sejarah lengkap kode repositori di situs web github - yang terdekat hanya mencari di dalam kode saat ini dari sebuah repositori dengan opsi "pencarian kode" di halaman ini .

Namun, dari baris perintah, Anda dapat menemukan komit apa pun yang memasukkan atau menghapus baris yang disebutkan get_infodengan -Sopsi untuk git log. misalnya:

git log -Sget_info -p

(nb tidak boleh ada spasi antara -Sdan istilah pencarian)

(juga perhatikan: untuk mencari lebih dari satu kata, surround in '):

git log -S'get info' -p

Jadi, minimal harus menemukan komit di mana fungsi pertama kali diperkenalkan dan yang menghapusnya. Saya menambahkan -psehingga Anda juga dapat melihat tambalan - jika banyak komit memperkenalkan perubahan yang menyebutkan fungsi yang mungkin berguna. Jika fungsinya hanya di cabang lain mungkin juga berguna untuk digunakan --alluntuk mencari semua cabang.

Jefromi menunjukkan dalam komentar di bawah bahwa git 1.7.4 akan memperkenalkan -Gopsi sebagai alternatif - perubahan ini dirangkum dalam entri blog terbaru dari Junio ​​Hamano (pengelola git): http://gitster.livejournal.com/48191.html

Mark Longair
sumber
2
Ya, saya tahu saya bisa mencari komentar, tapi bagaimana dengan mencari kode?
normski
10
Opsi -S memang terlihat di kode - ia menemukan komit apa pun get_infoyang terkandung dalam diff yang diperkenalkan oleh komit. Anda mungkin bingung dengan --grepopsi yang mencari pesan log.
Mark Longair
2
@normski: Dan versi terbaru git telah menambahkan -Gopsi serupa , yang menggunakan regex, bukan string tetap.
Cascabel
@Jefromi: terima kasih telah menyebutkan itu - Saya telah menambahkan itu ke jawaban, harap tidak apa-apa.
Mark Longair
2
@Anthony Damico: ya, cukup kutip string pencarian, misalnyagit log -S'get info' -p
Mark Longair