Git bisect: Bagaimana cara mengidentifikasi bug dalam kode Anda?



Artikel tentang git bisect ini, pelajari bagaimana perintah 'git bisect' membantu mendeteksi komit buruk pertama yang memperkenalkan bug menggunakan algoritme penelusuran biner.

Kode saya berfungsi dengan baik sampai kemarin, tetapi tidak sampai penarikan baru-baru ini dari repositori jarak jauh memecahkan kode !!!

Jika Anda berada dalam situasi yang sama dan tidak tahu perubahan apa memecahkan kodenya atau WHO dari banyak kontributor memiliki ini bug / fitur , maka git bisect adalah jalan keluar Anda. Jadi, dalam artikel tentang git bisect ini Anda akan mempelajari bagaimana 'git bisect'Perintah datang ke penyelamatan dalam mendeteksi komit buruk pertama yang memperkenalkan bug menggunakan algoritma pencarian biner.

Topik yang dibahas dalam artikel ini adalah sebagai berikut:





Mengapa menggunakan git bisect?

Tidak diragukan lagi bahwa Anda cenderung membuat sejumlah commit untuk setiap perubahan kecil di . Dalam skenario seperti itu, men-debug kode menjadi tugas yang membosankan, karena Anda harus kembali ke masa lalu secara manual ke setiap revisi snapshot proyek untuk menguji kode yang berfungsi dan mendeteksi bug. Sekarang, ini bahkan lebih kompleks ketika Anda memiliki pekerjaan lain untuk diperiksa tanpa titik awal, juga meminta masing-masing untuk membersihkan kesalahan mereka sendiri juga kedengarannya tidak mungkin.
Sepanjang jalan, Anda juga dapat membuat dan membuang sejumlah cabang 'fitur' (atau perbaikan terbaru) dalam proses dan akhirnya membuang-buang waktu dan tenaga sambil menyimpang dari jalur utama pengembangan.



Jadi, untuk menghindari skenario seperti itu, Anda bisa menggunakangit bisectperintah untuk menemukan revisi proyek yang buruk (atau snapshot) dan akhirnya memperbaikinya dengangit kembaliperintah.

Bagaimana cara penelusuran 'git bisect'?



Perintah ini membagi dua (membagi) riwayat Anda di antara baik dan buruk melakukan jarak. Ini menunjukkan Anda arus proyek negara ke a kelas menengah melakukan foto. Perintah git bisect kemudian berpindah setiap id komit antara rentang ini sementara berhenti di setiap snapshot untuk memungkinkan Anda uji kodenya . Jika bug ada, Anda mendeklarasikan komit sebagai buruk, jika tidak sebagai baik kecuali pencarian berakhir.

Sintaksis

git bisect

Untuk memahami git bisect dengan lebih baik, mari kita buat proyek yang mengembangkan kode untuk aplikasi navigasi sederhana untuk digunakan di dalam mobil.

Penyiapan proyek awal

Untuk membuat proyek yang mengembangkan kode untuk aplikasi navigasi sederhana untuk digunakan di dalam mobil, Anda dapat mengikuti langkah-langkah di bawah ini:

Langkah 1: Buat direktori baru di folder $ HOME Anda:

cd $ HOME mkdir my_nav_app

Langkah 2: Arahkan ke direktori baru:

cd $ my_nav_app

Langkah 3: Clone untuk mendownload proyek dari halaman GitHub saya:

git clone https://github.com/divyabhushan/my_nav_app.git

Sekarang, mari kita pahami direktori proyek dan tata letak file, seperti yang dicetak oleh perintah:ls -lTR

Tata Letak Kode Sumber - Git Bisect - Edureka

Selanjutnya, mari kita lihat jurnal sejarah proyek untuk melihat komitmen yang saya buat untuk menghasilkan kode ini-

Misalnya, perintah log git sederhana mencetak riwayat secara detail, namun, saya suka memformat dan menyesuaikan riwayat. Oleh karena itu, mari kita setel nama alias - 'hist' menggunakan git alias perintah seperti yang ditunjukkan di bawah ini:

git alias.hist 'log --pretty = format:'% C (kuning)% h% Creset% ad | % C (hijau)% s% Creset% C (merah)% d% Creset% C (biru) [% an] '--graph --decorate --date = short'

Sekarang, saya akan menjalankan fitur perbaikan bug ini di cabang terpisah, agar tidak mengganggu pengembangan utama di cabang 'master'. Untuk melakukan itu, ikuti set perintah di bawah ini:

  • Buat cabang 'dev': [master] $git branch dev
  • Beralih ke cabang 'dev': $git checkout dev
  • Cantumkan log riwayat: [dev] $pergi hist[Catatan: perintah 'alias' digunakan di sini]

Selanjutnya, saya telah menyoroti komit baik terakhir yang diketahui yang saya tahu di mana skrip saya bekerja dengan baik dengan hasil kasus uji yang diharapkan, snapshot komit ini adalah diberi tag sebagai v1.0.

Jadi, setelah kita mengetahui komitmen baik terakhir kita, mari kita lanjutkan dalam artikel ini tentang 'git bisect' dan menguji aplikasinya.

Uji aplikasinya

Jalankan skrip sebagai - $./scripts/myApplication.sh[pengujian pertama kali]

nilai default java char array



Jelas, status proyek saya saat ini dalam kesalahan , dan saya tidak yakin perubahan apa yang saya buat di komitmen mana yang memperkenalkan perubahan ini. Jadi, selanjutnya dalam artikel ini tentang git bisect, mari kita lihat bagaimana mengidentifikasi komit buruk.

Identifikasi komit buruk

Untuk mulai memeriksa komit buruk, Anda harus mengikuti langkah-langkah di bawah ini:

  • Mulai perintah bisect :git bisect start
  • Sebutkan id komit buruk: git bisect bad HEADataugit bisect c5b3ca8
  • Sebutkan id terakhir-diketahui-baik-komit: git bisect good v1.0ataugit bisect 93859d8

Ini membagi dua rentang riwayat komit kira-kira di tengah-tengah antara komit baik dan buruk yang membawa kita ke id komit: f61a7e8

Oleh karena itu, perintah telah memeriksa versi proyek seperti di id komit ini. Sekarang, mari kita lanjutkan dan uji aplikasi kita lagi.

Perintah untuk menjalankan aplikasi : $./scripts/myApplication.sh[menguji kedua kalinya]


Sejak aplikasi lulus dalam komitmen ini, komitmen ini tentu saja bukan komitmen yang buruk. Jadi, selanjutnya, Anda harus menginformasikan hal yang sama ke perintah bisect sebagai - $git bisect bagus


Sekarang, ini akan mempersempit hasil pencarian ke paruh pertama rentang seperti yang ditunjukkan -


Uji aplikasi Anda lagi - Perintah: $./scripts/myApplication.sh[menguji ketiga kalinya]


Jadi, karena kita melihat kesalahan seperti di atas, ini adalah kesalahan yang buruk.

Beri tahu perintah bisect, jalankan $git bisect bad


Itu semakin mempersempit pencarian dan membawa Anda ke revisi tengah yang dilingkari biru terakhir: a6ac769.dll

Jadi, saya menguji aplikasi saya untuk terakhir kalinya menggunakan perintah yang sama: $./scripts/myApplication.sh[menguji keempat kalinya]

Sekarang, karena aplikasi gagal lagi, itu masih komit yang buruk. Jadi, mari jalankan perintah berikut:

Jalankan perintahnya: git bisect bad

Komitmen buruk ditemukan

Ini menyimpulkan satu-satunya komit terakhir yang tersisa yang buruk-


Jadi Anda tahu di sinilah kode rusak. Apa selanjutnya?

Pahami file apa yang memiliki bug

Dalam hal ini, keluarannya memberi Anda informasi minimal tentang file komit id , nama penulis , dan tanggal penulisan Bersama dengan melakukan pesan dan jalan yang telah dimodifikasi.

Jika Anda ingin men-debug lebih lanjut, Anda perlu Baca itu komit objek id .

Perintah: git tampilkan a6ac76994b3f6c7519204f910fc787b7928cf8ef

Ini akan membaca objek komit dan mencetak pesan log dan perbedaan tekstual.

Anda mungkin juga menggunakan perintah 'git menyalahkan' untuk menganalisis bagaimana dan di mana komit setiap baris diubah oleh pembuat mana, jalankan perintah sebagai:git menyalahkan kode / develop_nav.sh

Hentikan pencarian

Untuk menghentikan pencarian, gunakan perintah berikut:

Perintah: git bisect reset


Dengan demikian, proses pembagian dua dihentikan dan Anda kembali ke cabang tempat Anda memulai pencarian. Sekarang, langkah selanjutnya adalah memperbaiki atau men-debug kode.

Bagaimana cara memperbaiki / men-debug kode?

Nah, ada beberapa solusi yang dapat Anda lakukan untuk memperbaiki status proyek saat ini setelah Anda mengidentifikasi komit yang membawa bug di tempat pertama.
Namun, jika Anda mengubah komit pada a repositori bersama itu yang terbaik kembali perubahan menggunakan ' git kembali 'Perintah.

Tugas: Kembalikan perubahan yang dilakukan oleh komit buruk yang disebutkan

Perintah: git kembali a6ac769

Akibatnya, mengembalikan perubahan yang dibuat oleh komit ini melakukan 2 hal:

  • Ini menghapus 3 baris terakhir yang ditambahkan (ditunjukkan dengan warna hijau) dan menambahkan kembali baris yang dihapus (ditunjukkan dengan warna merah). (kebalikan dari a6ac769)
  • Membuat komit ekstra dengan informasi pesan pengembalian

'Perintah kembalikan juga memudahkan untuk melacak perubahan yang Anda kembalikan dari pengubahan asli'

Menggunakan 'menunjukkan' perintah lagi untuk membaca id objek, seperti begitu-

Perintah: git show 801f029

Sekarang, maju dan uji aplikasinya. Ini akan dijalankan dengan benar.

Perintah: $./scripts/myApplication.sh

Sebaliknya, jika Anda ingin menghapus komit buruk dari riwayat:

  • Anda bisa menggunakan ' git reset 'Perintah dengan '--keras”(Meskipun tidak direkomendasikan dalam repositori bersama).

  • Lihat versi sebelumnya dari satu file menggunakan 'git checkout'Perintah dengan'-' pilihan.

Perlu dicatat, ini hanya akan membuat perubahan di repositori lokal Anda sampai Anda mendorong perubahan ke repositori jarak jauh. Karena beberapa perubahan membuat id objek komit baru seperti dalam kasus kami di atas dalam kasus seperti itu dorongan normal ke repositori jarak jauh ditolak karena riwayat akan menyimpang. Anda harus menggunakan ' git push 'Perintah dengan'--memaksa' pilihan.

algoritma pembelajaran mesin di r

Perbarui cabang 'master'

Sementara saya memperbaiki bug di cabang 'dev' saya, saya sekarang bisa menggabungkan perubahan ini dengan cabang 'master' juga-

  • beralih ke 'master', perintah:git checkout master
  • tarik pembaruan terkini dari 'origin / master' ke 'master', perintah:asal git pull
  • gabungkan perubahan 'dev', perintah:git merge giant

Namun, penggabungan Anda dapat menimbulkan konflik jika ada lebih banyak komit dari repositori jarak jauh. Selesaikan konflik dan lanjutkan dengan penggabungan.
Terakhir, dorong hanya cabang 'master' yang stabil yang berkomitmen ke repositori jarak jauh sementara Anda menyelesaikan pekerjaan kotor (bug, fitur, penyempurnaan) hanya pada cabang fitur seperti 'dev' dalam contoh ini.
Selain itu, yang terbaik adalah mengadopsi logika strategi percabangan untuk menyederhanakan dan mengamankan proses alur kerja git Anda.

Singkatnya, 'git bisect' adalah perintah praktis dan berguna dengan cepat mengenali itu komit id bahwa diperkenalkan untuk kesalahan dalam kode yang Anda jalankan dengan bantuan ekstensif pencarian biner dengan logis pemisah komit log di tengah-tengah antara baik dan buruk melakukan jarak . Untuk menyimpulkan, Anda telah belajar mendeteksi komit yang salah dan kembali perubahan yang dibuat olehnya.

Selain itu, untuk subperintah 'baik' dan 'buruk', Anda juga dapat menggunakan istilah seperti baru dan lama untuk mendeskripsikan status revisi. Anda dapat menjalankan perintah beberapa kali dengan meneruskan sub-perintah yang berbeda dan ID revisi / komit untuk mengidentifikasi ID komit (she-1) yang berbeda. Sebagai alternatif, skrip pengujian otomatis juga dapat dijalankan untuk membuat kode yang rusak menggunakan perintah ini. Selain itu, temukan penjelasan mendetail tentang perintah ini dengan menjalankangit bisect --helpdi terminal. Jadi, sekalian dengan ini, kami mengakhiri artikel ini di Git Bisect.

Tujuan DevOps adalah untuk membuat perangkat lunak berkualitas lebih baik dengan lebih cepat dan lebih andal sambil mengundang komunikasi dan kolaborasi yang lebih baik antar tim. Jika Anda tertarik dengan artikel ini, c lihat saja oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus Pelatihan Sertifikasi DevOps Edureka membantu peserta didik untuk memahami apa itu DevOps dan mendapatkan keahlian dalam berbagai proses dan alat DevOps seperti Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack, dan GIT untuk mengotomatiskan berbagai langkah di SDLC.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar artikel 'Git Bisect' dan kami akan menghubungi Anda secepatnya.