ulasan kode dengan git-flow dan github

43

Dengan git dan github biasa saya bisa melakukan review kode hanya dengan membuat permintaan tarik dari cabang fitur yang saya kerjakan ke cabang utama. Bagaimana saya melakukan review kode dengan git-flow? Dengan alur kerja seperti "fitur git flow selesai, saya bingung di mana ulasan kode benar-benar terjadi dan bagaimana git-flow atau git dapat memfasilitasi tinjauan itu.

AdamT
sumber
Anda mungkin melihat gerrit meskipun saya tidak yakin bagaimana itu terintegrasi dengan baik dengan git-flow. Bagaimanapun, apa alur kerja tim Anda ?
OnesimusUnbound

Jawaban:

29

Kami menemukan masalah persis ini baru-baru ini. Kami sangat suka aliran git, karena menggunakan tingkat semantik yang baik (menggunakan tingkat yang sama yang Anda gunakan dalam diskusi tim: "Saya akan mulai fitur A" lebih dari "Saya akan membuat cabang, checkout itu"), sementara git sangat "implementasi" tingkat (yang baik dan bermanfaat juga, tetapi berbeda).

Masalah yang kita miliki adalah git feature finish, ketika menggabungkan cabang ke dalam pengembangan, sementara kami ingin permintaan tarik dikirim dan (ini penting) digabung oleh reviewer , bukan committer, untuk menekankan kepemilikan tim.

Solusi kami saat ini:

  1. Seseorang menggunakan aliran git untuk membuat cabang fitur
  2. Setelah selesai, ia membuat permintaan tarik (menggunakan github)
  3. Tinjauan berlangsung, dengan potensi komitmen tambahan
  4. Permintaan tarik digabung menggunakan GitHub oleh reviewer .
  5. Tidak ada penyelesaian fitur git flow (karena cabang sudah digabung)

Ini konsisten dengan praktik kami, dengan kelemahan mengharuskan kami untuk menghapus cabang sendiri (karena kami tidak mendapatkan penyelesaian alur). Langkah selanjutnya kita mungkin akan menerapkan kembali beberapa bagian dari aliran git (karena ini terutama tentang perintah chaining git) untuk memperhitungkan ini (memiliki bagian "pembersihan" dari akhir, tanpa penggabungan).

Martin
sumber
3
Bagaimana dengan membuat cabang rilis? Apa yang terjadi dengan tag?
E-Riddie
16

Proses tim saya bekerja dengan menggunakan untuk ini adalah sebagai berikut:

  1. Buat cabang fitur: git flow feature start module_1
  2. Kode diperbarui pada cabang fitur
  3. Saat perubahan dilakukan, mereka didorong ke GitHub (atau sekali di akhir jika diinginkan)
  4. Ketika fitur ini selesai permintaan tarik dibuka di GitHub membandingkan developdan cabang fiturmodule_1
  5. Tim meninjau permintaan tarik dan memberikan komentar
  6. Setiap perubahan dari permintaan tarik dilakukan ke cabang fitur
  7. Setelah semua perubahan dimasukkan pada cabang fitur, cabang fitur selesai: git flow feature finish module_1
  8. The developcabang didorong ke GitHub (GitHub otomatis akan menandai permintaan tarik sebagai / tertutup digabungkan ketika hal ini terjadi)

Biasanya semua proses ini dilakukan oleh penulis asli tetapi itu tidak diperlukan. Siapa pun di tim kami dapat ikut serta dan mengambil proses ini kapan saja. Yang harus mereka lakukan adalah checkout cabang fitur dan melanjutkan proses. Siapa yang pernah menjalankan git flow feature finish module_1akan mengalami kemewahan cabang fitur lokal mereka dihapus tetapi siapa pun yang memeriksa cabang harus melakukan ini secara manual jika mereka ingin menggunakan sesuatu seperti git branch -D feature/module_1.

Untuk perbaikan terbaru kami menggunakan pendekatan serupa dan membuat permintaan tarik di GitHub sebelum kami menyelesaikan perbaikan terbaru.

brainimus
sumber
Terima kasih atas jawaban ini. Saya tidak menyadari bahwa git akan menandai PR ditutup setelah penggabungan.
vicTROLLA
3

Jika Anda melakukan tinjauan kode, maka saya akan menganggap bahwa Anda memiliki repositori pusat yang berisi kode "resmi". Pengembang menarik dari dan mendorong ke repositori pusat ini.

Saat Anda menggunakan Gerrit , Gerrit sendiri menjadi repositori pusat (memiliki SSH dan server HTTP bawaan yang memungkinkan pengguna berinteraksi dengannya pada dasarnya dengan cara yang sama seperti sebelumnya). Saat menggunakan Gerrit, alur kerjanya menjadi:

  1. Pengembang membuat perubahan pada cabang apa pun, melakukan secara lokal.
  2. Pengembang mendorong perubahan itu ke Gerrit.
  3. Gerrit membuat item ulasan untuk orang lain untuk meninjau.
  4. Peer meninjau kode, membuat komentar dan menerima atau menolak komit.
  5. Ketika komit diterima, maka Gerrit membuat perubahan itu tersedia bagi orang lain untuk menarik dari cabang.

Saat menggunakan repositori pusat, pengembang lain dapat melihat perubahan yang dikirimkan setelah langkah 2. Gerrit memperkenalkan alur kerja tinjauan kode, dan karenanya pengembang lain hanya melihat perubahan yang dikirimkan setelah langkah 5.

Ini berfungsi baik dengan git-flow (atau skema percabangan lainnya) karena Gerrit mendukung peninjauan perubahan yang dibuat pada cabang mana pun.

Greg Hewgill
sumber
3

Ini saran lain.

  1. Lakukan proses git flow biasa untuk membuat fitur , tetapi jangan menyelesaikan atau menggabungkannya.
  2. Buat permintaan tarik , tapi jangan gabungkan. Tunggu pemberi persetujuan untuk meninggalkan komentar. Komentar adalah tanda persetujuan.
  3. Apakah aliran git selesai . (Baik pemberi persetujuan atau pengembang dapat melakukan ini, tergantung pada apa yang disetujui tim.) Permintaan tarikan akan ditandai sebagai digabung di github. Anda masih perlu menghapus cabang pada asal.
Peet Brits
sumber