Git

Tutorial Membagi Git

Tutorial Membagi Git
Mengomentari komit Anda adalah bagian penting dari memelihara kode yang dapat dilacak. Ini membantu Anda melacak masalah. Namun, menemukan bug berdasarkan komentar saja adalah tugas yang membosankan. Butuh waktu lama untuk memilah-milah semua sejarah dan mencari tahu komit mana yang menjadi pelakunya.

Perintah git membagi dua menyediakan cara untuk mempercepat proses deteksi bug. Ini memungkinkan Anda menentukan masalah lebih cepat. Dengan git membagi dua, Anda dapat menentukan berbagai komit yang Anda curigai memiliki kode bermasalah dan kemudian menggunakan metode eliminasi biner untuk menemukan awal masalah. Menemukan bug menjadi lebih cepat dan mudah.

Mari siapkan contoh dan jalankan beberapa kasus uji untuk melihat cara kerjanya.

Contoh Pengaturan

Dalam contoh kami, kami akan membuat tes.txt dan tambahkan baris baru ke file dengan setiap komit. Setelah 16 komit, status akhir file akan terlihat seperti ini:

Ini kode bagus saya 1
Ini kode bagus saya 2
Ini kode bagus saya 3
Ini kode bagus saya 4
Ini kode bagus saya 5
Ini kode bagus saya 6
Ini kode bagus saya 7
Ini kode bagus saya 8
Ini kode buruk saya 1 <-- BUG INTRODUCED HERE
Ini kode buruk saya 2
Ini kode buruk saya 3
Ini kode buruk saya 4
Ini kode buruk saya 5
Ini kode buruk saya 6
Ini kode buruk saya 7
Ini kode buruk saya 8
Ini kode buruk saya 9

Dalam contoh di atas, bug masuk ke kode setelah 8 komit. Kami terus mengembangkan kode bahkan setelah memperkenalkan bug.

Anda dapat membuat folder bernama my_bisect_test dan menggunakan perintah berikut dari dalam folder untuk membuat contoh situasi:

git init
echo "Ini kode bagus saya 1" > tes.txt
git add -A && git commit -m "Komit saya 1"
echo "Ini kode bagus saya 2" >> tes.txt
git add -A && git commit -m "Komit saya 2 (v1 .).0.0)"
echo "Ini kode bagus saya 3" >> tes.txt
git add -A && git commit -m "Komit saya 3"
echo "Ini kode bagus saya 4" >> tes.txt
git add -A && git commit -m "Komit saya 4"
echo "Ini kode bagus saya 5" >> tes.txt
git add -A && git commit -m "Komit saya 5 (v1 .).0.1)"
echo "Ini kode bagus saya 6" >> tes.txt
git add -A && git commit -m "Komit saya 6"
echo "Ini kode bagus saya 7" >> tes.txt
git add -A && git commit -m "Komit saya 7 (v1 .).0.2)"
echo "Ini kode bagus saya 8" >> tes.txt
git add -A && git commit -m "Komit saya 8"
echo "Ini kode buruk saya 1" > tes.txt
git add -A && git commit -m "Komit saya 9"
echo "Ini kode buruk saya 2" >> tes.txt
git add -A && git commit -m "Komit saya 10"
echo "Ini kode buruk saya 3" >> tes.txt
git add -A && git commit -m "Komit saya 11"
echo "Ini kode buruk saya 4" >> tes.txt
git add -A && git commit -m "Komit saya 12 (v1 .).0.3)"
echo "Ini kode buruk saya 5" >> tes.txt
git add -A && git commit -m "Komit saya 13"
echo "Ini kode buruk saya 6" >> tes.txt
git add -A && git commit -m "Komit saya 14"
echo "Ini kode buruk saya 7" >> tes.txt
git add -A && git commit -m "Komit saya 15 (v1 .).0.4)"
echo "Ini kode buruk saya 8" >> tes.txt
git add -A && git commit -m "Komit saya 16"

Memeriksa Riwayat

Jika Anda melihat riwayat komit, Anda melihat yang berikut:

$git log
komit 3023b63eb42c7fadc93c2dd18b532a44a0a6888a
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:27 2017 -0800
Komitmen saya 17
komit 10ef0286d6459cd5dea5038a54edf36fc9bfe4c3
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:25 2017 -0800
Komitmen saya 16
komit 598d4c4acaeb14cda0552b6a92aa975c436d337a
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:23 2017 -0800
Komit saya 15 (v1.0.4)
komit b9678b75ac93d532eed22ec2c6617e5a9d70fe7b
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:21 2017 -0800
Komitmen saya 14
komit eb3f2f7b0ebedb732ecb5f18bee786cd3cbbb521
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:19 2017 -0800
Komitmen saya 13
komit 3cb475a4693b704793946a878007b40a1ff67cd1
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:17 2017 -0800
Komit saya 12 (v1.0.3)
komit 0419a38d898e28c4db69064478ecab7736700310
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:15 2017 -0800
Komitmen saya 11
komit 15bc59201ac1f16aeaa233eb485e81fad48fe35f
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:13 2017 -0800
Komitmen saya 10
komit a33e366ad9f6004a61a468b48b36e0c0c802a815
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:11 2017 -0800
Komitmen saya 9
komit ead472d61f516067983d7e29d548fc856d6e6868
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:09 2017 -0800
Komitmen saya 8
komit 8995d427668768af88266f1e78213506586b0157
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:07 2017 -0800
Komit saya 7 (v1.0.2)
komit be3b341559752e733c6392a16d6e87b5af52e701
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:05 2017 -0800
Komitmen saya 6
komit c54b58ba8f73fb464222f30c90aa72f60b99bda9
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:03 2017 -0800
Komit saya 5 (v1.0.1)
komit 264267111643ef5014e92e23fd2f306a10e93a64
Pengarang: Zak H
Tanggal: Min 31 Des 23:07:01 2017 -0800
Komitmen saya 4
komit cfd7127cd35f3c1a55eb7c6608ecab75be30b208
Pengarang: Zak H
Tanggal: Min 31 Des 23:06:59 2017 -0800
Komitmen saya 3
komit 3f90793b631ddce7be509c36b0244606a2c0e8ad
Pengarang: Zak H
Tanggal: Min 31 Des 23:06:57 2017 -0800
Komit saya 2 (v1.0.0)
komit cc163adb8a3f7b7b52411db2b3d8bab9b7fb191e
Pengarang: Zak H
Tanggal: Min 31 Des 23:06:55 2017 -0800
Komitmen saya 1

Bahkan dengan hanya beberapa komit, Anda dapat melihat bahwa sulit menentukan komit yang memulai bug.


Menemukan Bug

Mari gunakan git log -online untuk melihat versi riwayat komit yang lebih bersih.

$ git log --oneline
3023b63 Komitmen saya 17
10ef028 Komitmen saya 16
598d4c4 Komit saya 15 (v1.0.4)
b9678b7 Komitmen saya 14
eb3f2f7 Komitmen saya 13
3cb475a Komit saya 12 (v1.0.3)
0419a38 Komitmen saya 11
15bc592 Komitmen saya 10
a33e366 Komitmen saya 9
ead472d Komitmen saya 8
8995d42 Komit saya 7 (v1.0.2)
be3b341 Komitmen saya 6
c54b58b Komit saya 5 (v1.0.1)
2642671 Komitmen saya 4
cfd7127 Komitmen saya 3
3f90793 Komit saya 2 (v1.0.0)
cc163ad Komitmen saya 1

Kami ingin menemukan situasi di mana baris "Ini kode buruk saya 1" <- BUG INTRODUCED HERE” entered the picture.

Situasi 1

Misalkan kita ingat bahwa kode kita bagus sampai v1.0.2 dan kami ingin memeriksa dari saat itu hingga komit terbaru. Pertama-tama kita memulai perintah membagi dua:

$ git membagi dua mulai

Kami memberikan batas baik dan batas buruk (tidak ada hash berarti kode terbaru):

$ git membagi dua baik 8995d42
$ git membagi dua buruk

Keluaran:

Membagi dua: 4 revisi tersisa untuk diuji setelah ini (kira-kira 2 langkah)
[3cb475a4693b704793946a878007b40a1ff67cd1] Komit saya 12 (v1.0.3)

Perintah membagi dua telah menemukan titik tengah dalam rentang yang ditentukan dan secara otomatis memindahkan kode untuk melakukan 12. Kami dapat menguji kode kami sekarang. Dalam kasus kami, kami akan menampilkan konten tes.txt:

$tes kucing.txt

Keluaran:

Ini kode bagus saya 1
Ini kode bagus saya 2
Ini kode bagus saya 3
Ini kode bagus saya 4
Ini kode bagus saya 5
Ini kode bagus saya 6
Ini kode bagus saya 7
Ini kode bagus saya 8
Ini kode buruk saya 1 <-- BUG INTRODUCED HERE
Ini kode buruk saya 2
Ini kode buruk saya 3
Ini kode buruk saya 4

Kami melihat bahwa keadaan ujian.txt dalam status pasca-bug. Jadi dalam keadaan buruk. Jadi kami memberi tahu perintah membagi dua:

$ git membagi dua buruk

Keluaran:

Membagi dua: 2 revisi tersisa untuk diuji setelah ini (kira-kira 1 langkah)
[a33e366ad9f6004a61a468b48b36e0c0c802a815] Komit saya 9

Ini memindahkan kode kita untuk melakukan 9. Kami menguji lagi:

$tes kucing.txt

Keluaran:

Ini kode bagus saya 1
Ini kode bagus saya 2
Ini kode bagus saya 3
Ini kode bagus saya 4
Ini kode bagus saya 5
Ini kode bagus saya 6
Ini kode bagus saya 7
Ini kode bagus saya 8
Ini kode buruk saya 1 <-- BUG INTRODUCED HERE

Kami melihat bahwa kami telah menemukan titik awal bug. Komit "a33e366 Komit saya 9" adalah pelakunya.

Akhirnya, kami mengembalikan semuanya ke normal dengan:

$ git membagi dua ulang

Keluaran:

Posisi HEAD sebelumnya adalah a33e366… Komit saya 9
Beralih ke cabang 'master'

Situasi 2

Dalam contoh yang sama, mari kita coba situasi di mana pengembang lain memulai dengan premis bahwa bug diperkenalkan antara v1.0.0 dan v1.0.3. Kita dapat memulai prosesnya lagi:

$ git membagi dua mulai
$ git membagi dua baik 3f90793
$ git membagi dua buruk 3cb475a

Keluaran:

Membagi dua: 4 revisi tersisa untuk diuji setelah ini (kira-kira 2 langkah)
[8995d427668768af88266f1e78213506586b0157] Komit saya 7 (v1.0.2)

Bisect telah memindahkan kode kita ke commit 7 atau v1.0.2. Mari kita jalankan pengujian kita:

$tes kucing.txt

Keluaran:

Ini kode bagus saya 1
Ini kode bagus saya 2
Ini kode bagus saya 3
Ini kode bagus saya 4
Ini kode bagus saya 5
Ini kode bagus saya 6
Ini kode bagus saya 7

Kami tidak melihat kode yang buruk. Jadi, beri tahu git membagi dua:

$ git membagi dua baik

Keluaran:

Membagi dua: 2 revisi tersisa untuk diuji setelah ini (kira-kira 1 langkah)
[a33e366ad9f6004a61a468b48b36e0c0c802a815] Komit saya 9

Itu telah menggerakkan kami untuk melakukan 9. Kami menguji lagi:

$tes kucing.txt

Keluaran:

Ini kode bagus saya 1
Ini kode bagus saya 2
Ini kode bagus saya 3
Ini kode bagus saya 4
Ini kode bagus saya 5
Ini kode bagus saya 6
Ini kode bagus saya 7
Ini kode bagus saya 8
Ini kode buruk saya 1 <-- BUG INTRODUCED HERE

Kami kembali menemukan komit yang memperkenalkan bug. Itu adalah komit "a33e366 Komit saya 9". Meskipun kami memulai dengan rentang kecurigaan yang berbeda, kami menemukan bug yang sama dalam beberapa langkah.

Mari kita ulang:

$ git membagi dua ulang

Keluaran:

Posisi HEAD sebelumnya adalah a33e366… Komit saya 9
Beralih ke cabang 'master'

Kesimpulan

Seperti yang Anda lihat dari contoh, git membagi dua memungkinkan kami menemukan masalah lebih cepat. Ini adalah alat yang hebat untuk meningkatkan produktivitas Anda. Alih-alih menelusuri seluruh sejarah komit, Anda dapat mengambil pendekatan yang lebih sistematis untuk debugging.

Pelajaran lanjutan:

https://git-scm.com/docs/git-bisek
https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git

Kursor melompat atau bergerak secara acak saat mengetik di Windows 10
Jika Anda menemukan bahwa kursor mouse Anda melompat atau bergerak sendiri, secara otomatis, acak saat mengetik di laptop atau komputer Windows, maka ...
Cara membalikkan arah gulir Mouse dan Touchpads di Windows 10
Mouse dan Panel sentuhs tidak hanya membuat komputasi menjadi mudah tetapi juga lebih efisien dan tidak memakan banyak waktu. Kami tidak dapat membaya...
Cara mengubah penunjuk Mouse dan ukuran kursor, warna & skema pada Windows 10
Penunjuk mouse dan kursor di Windows 10 adalah aspek yang sangat penting dari sistem operasi. Ini dapat dikatakan untuk sistem operasi lain juga, jadi...