Saya ingin tahu apakah cara saya menangani file sumber yang perlu dihapus dari kontrol versi dapat dianggap sebagai praktik buruk.
Saya ingin menjelaskannya kepada Anda berdasarkan contoh itu:
Saya baru-baru ini menjadi sangat marah karena saya harus memilah-milah kelas Java dalam program yang pada dasarnya mati kode tetapi tidak didokumentasikan dan juga tidak berkomentar di kelas-kelas Jawa. Tentu saja mereka perlu dihapus tetapi sebelum saya menghapus hal-hal yang berlebihan saya punya - beberapa mungkin mengatakan aneh - kebiasaan:
Saya tidak langsung menghapus file-file redundan seperti itu melalui SVN-> Delete (ganti dengan perintah delete dari sistem kontrol versi pilihan Anda) tetapi sebaliknya berikan komentar pada file-file itu (saya merujuk pada head dan footer) bahwa mereka akan dihapus + nama saya + tanggal dan juga - yang lebih penting - MENGAPA MEREKA DIHAPUS (dalam kasus saya, karena mereka sudah mati, kode membingungkan). Lalu saya simpan dan komit ke kontrol versi. Lain kali ketika saya harus melakukan / memeriksa sesuatu dalam proyek untuk kontrol versi, saya tekan SVN-> Hapus dan kemudian mereka akhirnya dihapus dalam Kontrol Versi - masih tentu saja dapat diperbaiki melalui revisi dan ini sebabnya saya mengadopsi kebiasaan itu.
Mengapa melakukan ini alih-alih menghapusnya segera?
Alasan saya adalah, bahwa saya ingin memiliki marker eksplisit setidaknya dalam revisi terakhir di mana file-file redundan itu ada, mengapa mereka pantas dihapus. Jika saya segera menghapusnya, itu dihapus tetapi tidak ada yang mendokumentasikan mengapa mereka dihapus. Saya ingin menghindari skenario seperti ini:
"Hmm ... kenapa file-file itu dihapus? Aku bekerja dengan baik sebelumnya." (Penekan 'kembalikan' -> orang yang dikembalikan kemudian hilang selamanya atau tidak tersedia dalam minggu-minggu berikutnya dan penerima tugas berikutnya harus mencari tahu dengan membosankan seperti saya tentang file-file itu)
Tetapi tidakkah Anda perhatikan mengapa file-file itu dihapus dalam pesan komit?
Tentu saja saya lakukan tetapi pesan komit terkadang tidak dibaca oleh rekan kerja. Ini bukan situasi umum ketika Anda mencoba memahami kode (dalam kasus saya mati) yang pertama kali Anda periksa log kontrol Versi dengan semua pesan komit terkait. Alih-alih merayapi log, seorang kolega dapat langsung melihat bahwa file ini tidak berguna. Ini menghemat waktu dan dia tahu bahwa file ini mungkin dipulihkan untuk yang buruk (atau setidaknya menimbulkan pertanyaan.
sumber
Jawaban:
Masalah dengan menambahkan komentar ke file yang harus dihapus, alih-alih menghapusnya dalam kontrol sumber dan meletakkan penjelasan di sana, adalah asumsi bahwa jika pengembang tidak membaca pesan komit, mereka pasti akan membaca komentar dalam kode sumber.
Dari perspektif orang luar, metodologi ini tampaknya berakar pada pandangan yang sangat konservatif tentang kontrol sumber.
"Bagaimana jika saya menghapus file yang tidak digunakan ini dan kemudian seseorang membutuhkannya?" seseorang mungkin bertanya.
Anda menggunakan kontrol sumber. Kembalikan perubahan, atau lebih baik bicarakan dengan orang yang menghapus file (berkomunikasi).
"Bagaimana jika saya menghapus file yang mati, lalu seseorang mulai menggunakannya lagi dan mereka membuat perubahan?" orang lain mungkin bertanya.
Sekali lagi, Anda menggunakan kontrol sumber. Anda akan mendapatkan konflik gabungan yang harus diselesaikan seseorang. Jawabannya di sini, seperti pertanyaan terakhir, adalah berkomunikasi dengan rekan satu tim Anda.
Jika Anda benar-benar ragu file harus dihapus, komunikasikan sebelum menghapusnya dari kontrol sumber. Mungkin ini baru saja berhenti digunakan, tetapi fitur yang akan datang mungkin membutuhkannya. Anda tidak tahu itu, tetapi salah satu pengembang lain mungkin.
Jika harus dihapus, hapus. Potong lemak dari basis kode.
Jika Anda membuat "oopsi" dan Anda benar-benar membutuhkan file tersebut, ingatlah bahwa Anda menggunakan kontrol sumber sehingga Anda dapat memulihkan file tersebut.
Vincent Savard, dalam komentar pada pertanyaan itu, mengatakan:
Ini saran yang bagus. Ulasan kode harus menangkap hal semacam ini. Pengembang harus berkonsultasi pesan komit ketika perubahan tak terduga dilakukan pada file, atau file dihapus atau diganti namanya.
Jika pesan komit tidak menceritakan kisahnya, maka pengembang juga harus menulis pesan komit yang lebih baik.
Ketakutan untuk menghapus kode atau menghapus file merupakan indikasi masalah sistemik yang lebih dalam dengan proses:
Ini adalah masalah yang harus diatasi, jadi Anda tidak merasa seperti sedang melempar batu di rumah kaca ketika Anda menghapus kode atau file.
sumber
Ya itu praktik yang buruk.
Anda harus memasukkan penjelasan untuk penghapusan dalam pesan komit ketika Anda melakukan penghapusan file.
Komentar dalam file sumber harus menjelaskan kode seperti yang terlihat saat ini . Pesan komit harus menjelaskan mengapa perubahan dalam komit dibuat, sehingga riwayat komit pada file menjelaskan sejarahnya.
Menulis komentar yang menjelaskan perubahan secara langsung di sumber itu sendiri hanya akan membuat kode lebih sulit untuk diikuti. Pikirkan tentang hal ini: Jika Anda berkomentar dalam file setiap kali Anda mengubah atau menghapus kode, segera file akan dibanjiri dengan komentar tentang sejarah perubahan.
sumber
Menurut pendapat saya, kedua pilihan Anda bukanlah praktik terbaik , dan bukan praktik buruk :
Praktek favorit saya - sebagian besar karena telah digigit beberapa kali selama bertahun-tahun, mengingat bahwa Anda tidak selalu tahu di mana atau oleh siapa kode Anda digunakan - adalah untuk:
#warning
atau serupa, (sebagian besar bahasa memiliki semacam mekanisme seperti itu, misalnya di Jawa , dalam kasus terburukprint
pernyataan atau kemauan yang sama sudah cukup), idealnya dengan semacam skala waktu dan dengan detail kontak. Ini akan memberi tahu siapa pun yang masih menggunakan kode itu. Peringatan ini biasanya di dalam setiap fungsi atau kelas jika hal-hal seperti itu ada .#warning
(beberapa orang mengabaikan peringatan penghentian dan beberapa rantai alat tidak menampilkan peringatan seperti itu secara default).#warning
dengan#error
atau yang setara - ini akan merusak kode pada waktu membangun tetapi dapat, jika benar-benar perlu dihapus tetapi orang yang menghapusnya tidak dapat mengabaikannya. (Beberapa pengembang tidak membaca atau mengatasi peringatan apa pun atau memiliki begitu banyak sehingga mereka tidak dapat memisahkan yang penting).Salah satu keuntungan dari pendekatan ini adalah bahwa beberapa sistem versi (CVS, PVCS, dll.) Tidak akan menghapus file yang ada pada checkout jika telah dihapus di VCS. Ini juga memberi pengembang sadar, mereka yang memperbaiki semua peringatan mereka, banyak waktu untuk mengatasi masalah ini atau mengajukan banding atas penghapusan. Ini juga memaksa pengembang yang tersisa untuk setidaknya melihat pemberitahuan penghapusan dan banyak mengeluh .
Perhatikan bahwa
#warning
/#error
adalah mekanisme C / C ++ yang menyebabkan peringatan / kesalahan diikuti oleh teks yang disediakan ketika kompiler menemukan kode itu, java / java-doc memiliki@Deprecated
catatan untuk mengeluarkan peringatan pada penggunaan &@deprecated
untuk memberikan beberapa informasi, dll. Ada resep untuk melakukan hal yang sama dengan python & saya telah melihatassert
digunakan untuk memberikan informasi serupa#error
di dunia nyata.sumber
@deprecated
komentar JavaDoc dan@Deprecated
anotasi .Ya, saya akan mengatakan itu praktik yang buruk, tetapi bukan karena itu ada di file versus di pesan komit. Masalahnya adalah Anda mencoba melakukan perubahan tanpa berkomunikasi dengan tim Anda.
Setiap kali Anda membuat perubahan pada trunk - menambah, menghapus, atau memodifikasi file dengan cara apa pun - Anda harus, sebelum Anda berkomitmen kembali ke trunk, bicarakan perubahan itu langsung dengan anggota (atau anggota) dari tim yang akan secara langsung memiliki pengetahuan tentang mereka (pada dasarnya, diskusikan apa yang akan Anda masukkan ke header secara langsung dengan rekan tim Anda). Ini akan memastikan bahwa (1) kode yang Anda hapus benar-benar perlu dihapus, dan bahwa (2) tim Anda akan lebih mungkin mengetahui bahwa kode itu dihapus dan dengan demikian tidak mencoba mengembalikan penghapusan Anda. Belum lagi Anda juga akan mendapatkan deteksi bug dan sejenisnya untuk kode yang Anda tambahkan.
Tentu saja, ketika Anda mengubah hal-hal besar, Anda juga harus memasukkannya ke dalam pesan commit, tetapi karena Anda sudah membahasnya, itu tidak perlu menjadi sumber pengumuman penting. Jawaban Steve Barnes juga membahas beberapa strategi yang baik untuk digunakan jika kelompok potensial pengguna untuk kode Anda terlalu besar (mis. Menggunakan penanda Deprecated bahasa Anda alih-alih menghapus file pada awalnya).
Jika Anda tidak ingin selama itu tanpa melakukan (yaitu perubahan Anda paling masuk akal karena beberapa revisi), itu ide yang baik untuk membuat cabang dari batang dan komit ke cabang, kemudian menggabungkan cabang kembali ke bagasi ketika perubahan sudah siap. Dengan begitu, VCS masih mencadangkan file untuk Anda, tetapi perubahan Anda tidak memengaruhi bagasi.
sumber
Masalah terkait dari proyek yang dibangun di berbagai platform dan konfigurasi. Hanya karena saya menentukan bahwa itu sudah mati tidak berarti itu adalah tekad yang benar. Perhatikan bahwa mati digunakan mungkin masih berarti ketergantungan yang masih perlu disingkirkan, dan beberapa mungkin telah terjawab.
Jadi (dalam proyek C ++) saya menambahkan
Dan memeriksanya. Tunggu hingga bisa membangun kembali semua platform normal dan tidak ada yang mengeluh tentang hal itu. Jika seseorang menemukannya, akan mudah untuk menghapus satu baris dan bukannya bingung dengan file yang hilang.
Saya setuju pada prinsipnya bahwa komentar yang Anda sebutkan menduplikasi fitur yang harus dilakukan dalam sistem manajemen versi . Tapi, Anda mungkin punya alasan khusus untuk mendukung itu. Tidak mengetahui alat VCS bukan salah satunya.
sumber
Pada rangkaian Praktik Buruk, ini cukup kecil. Saya akan melakukan ini sesekali, ketika saya ingin memeriksa cabang dan dapat melihat kode lama. Ini dapat memudahkan perbandingan dengan kode pengganti. Saya biasanya mendapat komentar kode review "cruft". Dengan sedikit penjelasan saya lulus ulasan kode.
Tapi kode ini seharusnya tidak hidup lama. Saya biasanya menghapus di awal sprint berikutnya.
Jika Anda memiliki rekan kerja yang tidak membaca pesan komit atau tidak akan bertanya mengapa Anda meninggalkan kode dalam proyek, maka masalah Anda bukan salah satu gaya pengkodean yang buruk. Anda memiliki masalah yang berbeda.
sumber
Anda juga dapat memperbarui kelas dan mengganti nama dengan awalan ke UNUSED_Classname sebelum Anda menarik aksi Anda. Maka Anda harus langsung melakukan operasi penghapusan juga
Jika itu kode mati, hapus itu. Siapa pun yang membutuhkannya, mereka dapat kembali, tetapi langkah mengubah nama akan mencegah mereka menggunakannya secara langsung tanpa berpikir.
Juga ajarkan orang-orang cara melihat semua pesan yang dikomit untuk suatu file, beberapa orang bahkan tidak tahu itu mungkin.
sumber
git mv
, yang melacak sejarah. Mercurial juga memilikihg mv
. Sepertinyasvn move
harus bekerja untuk SVN juga?git mv
hanya memindahkan file dan tahapan penghapusan file dan pembuatan file. Semua pelacakan gerakan terjadi ketika Anda menjalankangit log --follow
dan yang serupa.git
tidak memiliki cara melacak nama, itu sebenarnya tidak melacak perubahan sama sekali; itu malah melacak negara pada saat melakukan dan menemukan apa yang telah berubah pada saat Anda memeriksa sejarah.