Jika Anda Meningkatkan Kualitas Kode Saat Bekerja pada Cabang Fitur

11

Saya sangat suka artikel ini tentang meninggalkan situs kode / kamp dalam keadaan yang lebih baik daripada yang Anda temukan - sepertinya pendekatan praktis di dunia nyata untuk menjaga kebersihan kode.

Saya juga sangat suka cabang fitur sebagai cara mengembangkan fitur secara terpisah sehingga, jika Anda tidak suka, Anda dapat dengan mudah tidak menggabungkannya dll.

Namun, jika saya bekerja pada cabang fitur, dan saya melihat beberapa kode jelek, haruskah saya memperbaikinya?

Rasanya ada beberapa sisi buruk untuk memperbaikinya:

  • Ketika saya menggabungkan cabang kembali, diff akan berantakan, berantakan dengan nama variabel atau ekstraksi fungsi
  • Jika fitur tersebut ditinggalkan, Anda harus memilih komit pembersihan (yang mungkin atau mungkin tidak berfungsi tergantung pada bagaimana kode di dekatnya berubah menjadi penggabungan yang berantakan), lakukan kembali atau tinggalkan saja.

Di sisi lain, jika saya tidak melakukannya ketika saya berada di file, maka jelas saya akan lupa melakukannya dalam beberapa hari ketika saya menggabungkan cabang.

Saya diperingatkan bahwa ini didasarkan pada pendapat (saya pikir tidak termasuk judulnya should), tetapi saya merasa ada jawaban (tentu saja orang menggunakan kedua pendekatan ini sehingga mereka harus memiliki jawaban). Juga, pertanyaan tentang development methodologiestopik dan saya pikir mereka memerlukan tingkat pendapat.

T. Kiley
sumber
@gnat Bacaan yang bermanfaat, terima kasih. Saya tidak berpikir itu adalah penipuan karena itu adalah tentang cabang yang memiliki waktu putar yang panjang. Saya bertanya secara khusus tentang bagaimana mendamaikan pendekatan kemping yang baik untuk refactoring dengan fitur branch dev.
T. Kiley
Itu tergantung pada tahap pengembangan proyek. Jika proyek telah menjalani sejumlah pengujian dan diteruskan maka saya pikir sangat beresiko untuk mengubah apa pun yang bukan bagian dari apa yang dimaksudkan untuk diperbaiki. Banyak orang telah memasukkan bug yang mengubah hal-hal yang seharusnya tidak mempengaruhi apa pun. Jika proyek ini dalam tahap pengembangan maka pembersih kode untuk memulai yang lebih baik, maka saya mungkin akan membersihkan seluruh file jika perlu.
Dunk

Jawaban:

8

Anda hanya boleh 'memperbaiki' kode di cabang fitur jika Anda tetap mengubah kode itu sebagai bagian dari fitur.

Misalnya. Saya sedang mengerjakan fitur 'print kelinci' dan saya menemukan kode printer

Public class Printer(string type)
{
    If(type=="bunnies")
    {
        //print a bunny
    }
.....
}

Saya mengubahnya menjadi:

Public class Printer(string type)
{
     PrintFunctionDictionary[type].Print();
}

Mengapa:

  • Saya sedang mengerjakan kode,
  • Saya perlu mengubahnya untuk menambah fungsionalitas,
  • fungsionalitas yang ditambahkan menunjukkan cara refactored untuk mengatasi masalah.

Saya tidak secara acak mengenai bagian lain dari basis kode dan 'membuatnya lebih baik' karena ini akan:

  • Bentrok dengan orang yang mengerjakan fitur lain.
  • Gunakan waktu yang harus dialokasikan untuk mengembangkan fitur.
  • Tambahkan kode arbitrer ke cabang yang, jika fitur ini belum selesai, mungkin tidak digabungkan ke dalam produk utama. Demikian pula, jika saya memutar kembali fitur, saya akan kehilangan refactoring saya.
Ewan
sumber
1
Saya setuju bahwa ini adalah hal yang baik untuk dicoba, dan di dunia yang ideal ini akan selalu berhasil. Namun, dalam kode dunia nyata, situasinya seringkali lebih kompleks - ketika mengerjakan suatu fitur, seseorang biasanya dapat menemukan bagian-bagian dari kode yang mungkin layak untuk di refactored secara independen dari fitur tersebut. Kode itu dapat mengganggu implementasi fitur, tetapi tidak terbatas pada metode atau kelas yang terkait langsung dengan fitur. Dan perubahan tidak selalu mengganggu orang lain.
Doc Brown
1
baik Anda selalu dapat melakukan cabang refactoring terpisah. Seperti yang saya lihat meskipun fitur branch terutama merupakan hal manajemen proyek yang memungkinkan Anda untuk pergi "fitur X belum selesai tetapi kami dapat merilis dengan yang lain" dan "fitur X dirilis" jadi kami tidak berharap fitur Y untuk berubah. Dengan menambahkan refactoring ke fitur yang berpotensi merusak manfaat ini
Ewan
5

Jika Anda ingin refactorings Anda "hidup secara mandiri" dari cabang fitur Anda saat ini, jangan lakukan perubahan di sana. Sebagai gantinya, lakukan refactoring pada cabang pengembangan utama (atau "cabang refactoring", jika itu biasa di tim Anda untuk tidak menerapkan perubahan langsung ke cabang dev). Jadi siapa pun dari tim Anda (termasuk Anda) dapat menggabungkan perubahan ke cabang fitur aktif yang sedang mereka kerjakan. Namun, berhati-hatilah untuk tidak menerapkan refactoring global di seluruh "setengah dari basis kode" tanpa meminta izin rekan kerja Anda terlebih dahulu - mereka mungkin tidak begitu senang jika refactoring Anda terlalu banyak mengganggu pekerjaan mereka saat ini.

Pengecualian ada di sini ketika perbaikan yang Anda lakukan bersifat lokal ke bagian basis kode yang Anda sentuh persis di cabang fitur itu, dan tidak masuk akal untuk memberi mereka siklus hidup yang berbeda dari "fitur baru" Anda.

Doc Brown
sumber
3

Tujuan branchtipe adalah untuk memberikan niat untuk menanganinya. Jika Anda mengikuti gaya GitFlow bercabang, maka Anda mungkin memiliki jenis seperti feature, hotfix, release, dll .. Dalam kasus cabang fitur, yang niat adalah untuk merangkum gabungan ke cabang lain (yaitu develop) yang menunjukkan pengembang bertanggung jawab untuk penggabungan, apa fitur ini IS. Jika kode yang Anda bersihkan bukan bagian dari fitur itu, jangan ubah.

Sebaliknya, cari cabang serendah mungkin dari kode jelek (kemungkinan develop) dan cabang dari sana. Ubah kode dan usulkan digabung sebagai fitur. Jika Anda memerlukan kode itu dalam apa yang sedang Anda kerjakan, dan terutama ingin menghindari penggabungan konflik, gabungkan cabang itu ke cabang ANDA.

Berikut adalah penjelasan yang cukup bagus tentang berbagai strategi: https://www.atlassian.com/git/tutorials/comparing-workflows/

TomSchober
sumber
0

jika saya bekerja pada cabang fitur, dan saya melihat beberapa kode jelek, haruskah saya memperbaikinya?

Mungkin baik untuk memperbaiki 'kode jelek' pada pandangan, tergantung pada tempo proyek, 'keburukan' kode, dll., Tetapi cobalah untuk tidak melakukan ini pada fitur cabang itu sendiri.

  • Jika cabang fitur Anda sepenuhnya lokal, cukup sembunyikan atau lakukan perubahan yang belum disimpan, periksa cabang pengembangan, buat perubahan, lalu kembali ke cabang fitur Anda dan mulai lagi berkembang.
  • Jika Anda tidak dapat memulai ulang pengembangan (mis. Cabang fitur Anda ada di server publik), Anda masih dapat memilih yang komit dikembangkan jika Anda membutuhkannya atau ingin menghindari konflik di kemudian hari.
  • Jika Anda mengedit file dan benar - benar harus melakukan perbaikan ke kode jelek sekarang dan benar - benar tidak dapat beralih untuk mengembangkan, Anda dapat membuat perbaikan, gunakan git add -puntuk membuat perbaikan, komit perubahan itu saja , dan sebelum Anda bergabung / dorong (memang, lebih disukai setelah komit Anda berikutnya), gunakan rebase interaktif untuk memindahkan komit itu ke titik sedini mungkin di cabang Anda, atau mungkin bahkan ceri-pilih ke pengembangan, tergantung pada sejarah Anda.

Saya juga akan melakukan ini dengan hal lain yang 'memperbaiki' cabang pengembangan (di mana 'perbaikan' adalah perubahan yang Anda atau pengembang lain mungkin buat untuk memastikan bahwa kode mematuhi standar). Ini membantu...

  • untuk menjaga perbaikan dan fitur Anda komit dalam grup yang berbeda sehingga log lebih mudah dibaca,
  • untuk menjaga pengembangan sedekat mungkin agar dapat dirilis kapan saja, dan
  • untuk menghindari duplikasi pekerjaan (banyak orang memperbaiki masalah yang sama dengan cara yang agak berbeda di cabang yang berbeda).
pengguna52889
sumber