Git bisect: Bagaimana mengenal pasti pepijat dalam kod anda?



Artikel ini mengenai git bisect, pelajari bagaimana perintah 'git bisect' membantu dalam mengesan komit buruk pertama yang memperkenalkan bug menggunakan algoritma carian binari.

Kod saya berfungsi dengan baik sehingga semalam, tetapi tidak sehingga penarikan baru-baru ini dari repositori jauh melanggar kod !!!

Sekiranya anda berada dalam situasi yang serupa dan tidak tahu perubahan apa melanggar kod atau who daripada banyak penyumbang memiliki ini pepijat / ciri , maka git bisect adalah jalan keluar anda. Oleh itu, dalam artikel mengenai git bisect ini, anda akan belajar bagaimana ‘git dua belah'Perintah datang ke menyelamatkan dalam mengesan komit buruk pertama yang memperkenalkan bug menggunakan algoritma carian binari.

Topik yang dibahas dalam artikel ini adalah seperti berikut:





Mengapa menggunakan git bisect?

Tidak ada keraguan dalam kenyataan bahawa anda cenderung membuat sejumlah komitmen untuk setiap perubahan kecil di . Dalam senario seperti itu, penyahpepijatan kod menjadi tugas yang membosankan, kerana anda harus secara manual kembali ke masa ke setiap semakan snapshot projek untuk menguji kod kerja dan mengesan bug. Sekarang, ini semakin bertambah kompleks apabila anda mempunyai pekerjaan yang lain untuk diperiksa tanpa petunjuk utama, juga meminta setiap orang untuk membersihkan kesilapan mereka tidak kedengaran.
Sepanjang perjalanan, anda mungkin juga membuat dan membuang sebilangan cabang ‘feature’ (atau hotfix) dalam proses dan akhirnya membuang masa dan usaha sambil menyimpang dari garis utama pembangunan.



Jadi, untuk mengelakkan senario seperti itu, anda boleh menggunakangit dua belaharahan untuk mencari semakan projek yang buruk (atau snapshot) dan akhirnya memperbaikinya dengangit membalikkanarahan.

Bagaimana carian 'git bisect'?



Perintah ini dua belah (membahagikan) sejarah anda antara baik dan juga buruk komited julat. Ini menunjukkan anda semasa projek negeri ke a jarak pertengahan komited gambar. Perintah git bisect kemudian bergerak setiap id komit antara julat ini sementara berhenti seketika pada setiap tangkapan untuk membolehkan anda menguji kod . Sekiranya bug wujud, anda menyatakan komit sebagai buruk, jika tidak seperti baik melainkan carian berakhir.

Sintaks

git dua belah

Untuk memahami git bisect dengan lebih baik, marilah kita membuat projek yang mengembangkan kod untuk aplikasi navigasi mudah untuk digunakan di dalam kereta.

Penyediaan projek awal

Untuk membuat projek yang mengembangkan kod untuk aplikasi navigasi mudah digunakan di dalam kereta, anda boleh mengikuti langkah-langkah berikut:

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

cd $ RUMAH mkdir my_nav_app

Langkah 2: Navigasi ke direktori baru:

cd $ my_nav_app

Langkah 3: Klon untuk memuat turun projek dari halaman GitHub saya:

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

Sekarang, mari kita memahami direktori projek dan susun atur fail, seperti yang dicetak oleh arahan:ls -lTR

Susun Atur Kod Sumber - Git Bisect - Edureka

Seterusnya, mari kita lihat jurnal sejarah projek untuk melihat komit yang saya buat untuk menghasilkan kod ini-

Sebagai contoh, perintah log git yang sederhana mencetak sejarah secara terperinci, namun, saya suka memformat dan menyesuaikan sejarah dengan cantik. Dengan itu, marilah kita tetapkan nama alias - ‘hist’ menggunakan git alias arahan seperti di bawah:

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

Sekarang, saya akan menjalankan ciri pembetulan pepijat ini di cawangan yang terpisah, agar tidak mengganggu perkembangan utama di cawangan 'master'. Untuk melakukannya, ikuti arahan berikut:

  • Buat cawangan ‘dev’: [tuan] $dev cabang git
  • Tukar ke cawangan ‘dev’: $git checkout dev
  • Senaraikan log sejarah: [dev] $pergi hist[Catatan: Perintah ‘alias’ digunakan di sini]

Selanjutnya, saya telah menunjukkan komitmen terakhir yang diketahui yang saya tahu di mana skrip saya berfungsi dengan baik dengan hasil kes ujian yang diharapkan, snapshot komitmen ini adalah bertanda sebagai v1.0.

Oleh itu, setelah kita mengetahui komitmen baik terakhir kita, marilah kita maju dalam artikel ini mengenai 'git bisect' dan menguji aplikasinya.

Uji aplikasi

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



Jelas, keadaan projek saya sekarang adalah kesilapan , dan saya tidak pasti apa perubahan yang saya buat dalam komitmen yang memperkenalkan perubahan ini. Jadi, seterusnya dalam artikel ini mengenai git bisect, mari kita lihat bagaimana mengenal pasti komitmen buruk.

Mengenal pasti perbuatan buruk

Untuk mula memeriksa komit buruk, anda akan mengikuti langkah-langkah berikut:

  • Mulakan arahan dua bahagian :git bisect start
  • Sebutkan id komitmen buruk: git bisect KEPALA burukataugit bisect c5b3ca8
  • Sebutkan id komited terakhir yang terkenal: git bisect baik v1.0ataugit bisect 93859d8

Ini membahagi jarak sejarah komitmen kira-kira di antara komitmen baik dan buruk yang membawa kita ke id komitmen: f61a7e8

kerangka yang didorong oleh data dalam contoh pemacu web selenium

Oleh itu, arahan telah memeriksa versi projek seperti yang terdapat dalam id komitmen ini. Sekarang, mari kita teruskan dan menguji aplikasi kita lagi.

Perintah untuk menjalankan aplikasi : $./scripts/myApplication.sh[ujian kali kedua]


Sejak permohonan berlalu dalam komitmen ini, komitmen ini pastinya bukan komitmen buruk. Jadi, seterusnya, anda harus memberitahu perkara yang sama dengan perintah dua bahagian seperti - $git bisect bagus


Sekarang, ini akan menyempitkan hasil carian hingga separuh pertama julat seperti yang ditunjukkan -


Uji aplikasi anda sekali lagi - Perintah: $./scripts/myApplication.sh[menguji kali ketiga]


Oleh itu, kerana kami melihat ralat seperti di atas, ini adalah komitmen yang tidak baik.

Beritahu arahan dua bahagian, jalankan $git bisect buruk


Itu semakin menyempitkan carian dan membawa anda ke semakan tengah terakhir yang dilingkari biru: a6ac769

Oleh itu, saya menguji aplikasi saya untuk kali terakhir menggunakan arahan yang sama: $./scripts/myApplication.sh[menguji kali keempat]

Sekarang, kerana aplikasinya gagal lagi, ini masih merupakan komitmen buruk. Oleh itu, mari jalankan arahan berikut:

Jalankan arahan: git bisect buruk

Komitmen buruk dijumpai

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


Jadi anda tahu di sinilah kodnya rosak. Apa selepas ini?

Fahami fail apa yang mempunyai pepijat

Dalam kes ini, output memberi anda sedikit maklumat mengenai komit id , nama pengarang , dan juga tarikh dikarang bersama dengan komit mesej dan juga jalan yang diubah suai.

Sekiranya anda ingin melakukan debug lebih jauh, anda perlu membaca yang melakukan objek id .

Perintah: pertunjukan git a6ac76994b3f6c7519204f910fc787b7928cf8ef

Ini akan membaca objek komit dan mencetak mesej log dan perbezaan teks.

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

Hentikan carian

Untuk menghentikan carian, gunakan arahan berikut:

Perintah: tetapkan semula bisit git


Oleh itu, proses pembahagian dihentikan dan anda kembali ke cawangan dari mana anda memulakan pencarian. Sekarang, langkah seterusnya adalah memperbaiki atau menyahpepijat kodnya.

Bagaimana membetulkan / menyahpepijat kod?

Baiklah, ada beberapa jalan penyelesaian yang boleh anda lakukan untuk memperbaiki keadaan projek sekarang kerana anda telah mengenal pasti komitmen yang membawa bug tersebut.
Walau bagaimanapun, jika anda mengubah komit pada repositori dikongsi yang terbaik adalah membalikkan perubahan menggunakan ‘ git membalikkan Perintah.

Tugas: Kembalikan perubahan yang dilakukan oleh komit buruk yang disebutkan

Perintah: git membalikkan a6ac769

Akibatnya, mengembalikan perubahan yang dibuat oleh komitmen ini melakukan 2 perkara:

  • Ia menghapuskan 3 baris terakhir yang ditambahkan (ditunjukkan dengan warna hijau) dan menambah baris yang dihapus (ditunjukkan dengan warna merah) kembali. (kebalikan dari a6ac769)
  • Membuat komitmen tambahan dengan maklumat mesej balik

'Perintah kembalikan juga menjadikannya lebih mudah untuk melacak perubahan yang anda kembalikan dari komit asal'

Menggunakan 'Pertunjukan' arahan lagi untuk membaca id objek, seperti-

Perintah: pertunjukan git 801f029

Sekarang, teruskan dan uji aplikasinya. Ia akan dilaksanakan dengan betul.

Perintah: $./scripts/myApplication.sh

Sebaliknya, jika anda ingin membuang komit buruk dari sejarah:

  • Anda boleh menggunakan ‘ tetapkan semula git Perintah dengan '--kerasPilihan (walaupun tidak disyorkan di repositori bersama).

  • Lihat versi satu fail yang lebih awal menggunakan ‘git checkout'Perintah dengan'-'Pilihan.

Perlu diperhatikan, ini hanya akan membuat perubahan pada repositori tempatan anda sehingga anda mendorong perubahan ke repositori jauh. Oleh kerana beberapa perubahan membuat id objek komit baru seperti dalam kes kami di atas dalam kes seperti itu, dorongan normal ke repositori jauh ditolak kerana sejarah akan berubah. Anda mesti menggunakan ‘ tolak git 'Perintah dengan'- kekuatan'Pilihan.

Kemas kini cawangan ‘master’

Semasa saya memperbaiki pepijat di cawangan ‘dev’ saya, saya kini dapat menggabungkan perubahan ini dengan cabang ‘master’ juga-

  • beralih ke ‘master’, arahan:git master checkout
  • tarik kemas kini baru-baru ini dari 'origin / master' ke 'master', perintah:asal tarik git
  • menggabungkan perubahan ‘dev’, perintah:git menggabungkan gergasi

Walau bagaimanapun, penggabungan anda dapat menimbulkan konflik jika terdapat lebih banyak komit dari repositori jauh. Selesaikan konflik dan teruskan dengan penggabungan.
Akhirnya, tekan hanya cawangan ‘master’ yang stabil ke repositori jauh semasa anda membuat kerja kotor anda (bug, ciri, penambahbaikan) hanya dilakukan pada cabang ciri seperti ‘dev’ dalam contoh ini.
Lebih-lebih lagi, lebih baik menggunakan logik strategi bercabang untuk menyelaraskan dan mengamankan proses aliran kerja git anda.

Ringkasnya, ‘git bisect’ adalah arahan yang berguna dan berguna dengan cepat mengenal pasti yang komit id itu diperkenalkan ke kesalahan dalam kod berjalan anda dengan bantuan yang luas carian binari secara logik membahagi komit log di antara jalan baik dan buruk komited julat . Sebagai kesimpulan, anda belajar mengesan kesalahan yang salah dan membalikkan perubahan yang dibuat olehnya.

Di samping itu, untuk subkomersial 'baik' dan 'buruk' anda juga boleh menggunakan istilah seperti baru dan lama untuk menggambarkan keadaan semakan. Anda boleh menjalankan perintah beberapa kali melewati subkomando yang berbeza dan id revisi / komit untuk mengenal pasti id komit (dia-1) yang berbeza. Sebagai alternatif, skrip ujian automatik juga dapat dijalankan untuk membina kod yang rosak menggunakan perintah ini. Juga, cari penerangan terperinci mengenai perintah ini dengan menjalankangit bisect --helpdi terminal. Oleh itu, kita akan mengakhiri artikel ini mengenai Git Bisect.

Tujuan DevOps adalah untuk mencipta perisian berkualiti lebih cepat dan lebih dipercayai dengan mengundang komunikasi dan kerjasama yang lebih baik antara pasukan. Sekiranya anda tertarik dengan artikel ini, c lihatlah oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar berpuas hati yang tersebar di seluruh dunia. Kursus Latihan Persijilan Edureka DevOps membantu pelajar memahami apa itu DevOps dan memperoleh kepakaran dalam pelbagai proses dan alat DevOps seperti Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack dan GIT untuk mengautomasikan beberapa langkah dalam SDLC.

Ada soalan untuk kami? Sila sebutkan di bahagian komen artikel 'Git Bisect' dan kami akan menghubungi anda secepat mungkin.

qtp vs selenium yang mana lebih baik