Bagaimana cara saya mengelola komit dengan benar, mencegah konflik fitur, dan mengelola dependensi dengan VCS?

9

Ini menjadi faktor menjengkelkan bekerja dengan tim besar: bagaimana Anda mengelola checkin dan mencegah konflik fitur dan mengelola ketergantungan dengan kontrol sumber dengan benar?

Saat ini di tempat kerja saya, kami menggunakan TFS 2008 dan kami bermigrasi ke TFS 2010 pada awal Desember. Pertama, kontrol sumber apa pun lebih baik daripada tidak sama sekali, tetapi pendekatan apa yang menurut orang berguna untuk mencegah beberapa checkin dan rollback di seluruh riwayat kendali sumber? Apakah batang yang mudah menguap adalah cara terbaik untuk pergi atau bercabang ketika Anda menerapkan fitur baru dan begitu Anda senang bergabung kembali ke bagasi?

Saya benar-benar ingin mendengar pengalaman orang lain dan mungkin beberapa praktik terbaik untuk mengelola kontrol sumber.

Nickz
sumber
3
Solusi terbaik yang saya temukan untuk berurusan dengan TFS adalah memiliki GIT pribadi saya sendiri di mana saya dapat berkeliling dengan semua percabangan yang saya butuhkan dan melakukan komit pada TFS per tonggak kecil (fitur kecil, fitur parsial) semakin kecil semakin baik tetapi Anda juga harus pastikan kodenya bagus saat Anda melakukan. Di satu cabang per fitur / perbaikan bug / iterasi saya akan berkomitmen untuk TFS pada akhir "cabang". Namun secara internal sangat umum bagi saya untuk memiliki banyak cabang untuk berbagai percobaan dan eksplorasi. Alat-alat TFS Power di sini cukup berguna untuk mengotomatiskan penggabungan kembali
Newtopian
1
Harap uraikan lebih lanjut tentang apa yang Anda maksud dengan "beberapa checkin" dan "melanggar trunk". Saya benar-benar berharap bahwa setiap insinyur saya melakukan lebih dari satu checkin sementara anggota tim saya.
Manfred
strategi percabangan kontrol sumber adalah topik besar. programmers.stackexchange.com/questions/107884/…
agas
@ John - Saya pikir "melanggar" adalah kesalahan ketik untuk "volatile"
ChrisF

Jawaban:

7

TFS? Lari ke bukit! Keluar secepat yang Anda bisa. Ini melakukan banyak hal yang berbeda tetapi tidak satupun dari mereka sebagus alat berkembang biak terbaik yang tersedia.

Tapi serius:

Setelah Anda memiliki sistem kontrol versi yang layak (SVN, GIT, dll.) Saya akan merekomendasikan pengaturan aturan untuk manajemen cabang, misalnya kapan membuat cabang, untuk apa, kapan untuk menggabungkan, siapa, dan banyak lagi.

Sampai saat ini kami menggunakan satu cabang untuk pengembangan baru ('trunk'). Untuk rilis, kami akan membuat cabang dari trunk. Final QA akan dilakukan di cabang itu dan setelah selesai kami akan merilis (kami ada di rilis bulanan).

Kami telah beralih ke konsep 'tidak ada sampah di bagasi' untuk mengurangi risiko jadwal. Konsep ini pada dasarnya berisi aturan di mana Anda akan membuat cabang untuk pekerjaan pengembangan terpisah dari trunk. Misalnya Anda bisa memiliki cabang terpisah untuk fitur, untuk tim pengembangan kecil atau serupa. Kami menggunakan 'epos' untuk menggambarkan fitur kecil atau bagian yang dapat dirilis dari fitur dan membuat cabang untuk setiap epik. Setidaknya sekali sehari semua perubahan dari trunk digabung ke dalam cabang epik. Kuncinya adalah dukungan penggabungan yang baik dengan kontrol versi atau alat yang terpisah (misalnya penggabungan tiga arah). QA untuk epik akan dilakukan di cabang epik. Setelah melewati cabang epik akan digabungkan menjadi batang dan uji integrasi dijalankan. Kami masih memiliki cabang untuk rilis.

Dengan cabang-cabang epik kami telah secara substansial mengurangi risiko jadwal karena kami sekarang dalam posisi untuk keluar dari bagasi dan memasukkan semua epos yang berhasil digabungkan menjadi bagasi. Epos yang tidak lengkap ketinggalan bus dan akan membuat rilis berikutnya (bulan depan).

Ini tentu saja hanya dapat berfungsi di lingkungan kita. Sangat mungkin Anda akan memiliki faktor-faktor yang berbeda dari kami yang akan memengaruhi apa pilihan terbaik untuk manajemen cabang.

Misalnya jika Anda memiliki tim dengan banyak orang yang bekerja dari jarak jauh dan tidak selalu terhubung ke server kontrol versi, maka Anda ingin menggunakan sistem kontrol versi yang mendukung model terdistribusi. GIT dan beberapa lainnya akan termasuk dalam kategori ini. TFS sejauh pengetahuan saya memerlukan koneksi ke server untuk membuat file dapat ditulis (diperbaiki dalam versi 2010?).

Saya harap saya bisa menunjukkan bahwa tidak ada "satu ukuran cocok untuk semua". Mulailah dengan proses Anda dalam manajemen cabang tertentu, tentukan persyaratan dan akhirnya pilih alat yang paling cocok dengan kebutuhan Anda. Mungkin itu TFS, mungkin juga tidak.

Manfred
sumber
2
"TFS? Larilah ke bukit!" - Saya tergoda untuk membuat akun kedua sehingga saya membatalkan ini dua kali.
Semut
Senang mendengar bahwa ini bekerja untuk Anda. Saya pernah berada di proyek serupa di mana ini diperlukan. Tetapi cara Anda membuat gabungan cabang "epik" membuatnya terdengar mudah. Saya ingin mengatakan bahwa itu kemungkinan besar akan menjadi rasa sakit yang mengerikan setiap kali.
Lionel
1
@ Lionel: Saya setuju, ini bisa terjadi. Saya telah melihat sesuatu yang serupa di masa lalu menjadi sangat salah juga. Dalam pengalaman saya kunci untuk berhasil menggunakan pendekatan ini adalah untuk menjaga delta antara trunk dan cabang fitur sekecil mungkin. Setidaknya sekali sehari Anda harus bergabung dari bagasi. Sama-sama menguntungkan untuk memiliki epik / fitur sekecil mungkin, misalnya lebih pada skala hari / minggu daripada berbulan-bulan. Sangat bermanfaat juga adalah arsitektur dan desain yang bersih dan (sepenuhnya) berbasis kode.
Manfred
@ John Sepenuhnya setuju dengan komentar terakhir Anda. Masalah utama yang saya alami di masa lalu adalah bahwa "fitur baru" biasanya besar, rumit, dan berisi perubahan desain pada kode yang ada di bagasi. Ini mungkin memakan waktu berbulan-bulan untuk diterapkan dan diuji. Menggabungkan ini ke dalam bagasi akan menjadi mimpi buruk ketika ada lebih dari satu tim yang bekerja pada fitur yang berbeda.
Lionel
4

Saya menganjurkan satu cabang per fitur karena memungkinkan fleksibilitas besar ketika memutuskan fitur mana yang akan dikirimkan & mana yang harus ditangguhkan.

Seberapa baik itu bekerja dalam situasi Anda tergantung pada seberapa baik VCS Anda menangani cabang dan lebih penting lagi penggabungan. DVCS seperti Git & Mercurial menjadikan ini latihan yang relatif sepele. SVN kurang begitu. Saya telah berhasil menghindari TFS meskipun saya telah membaca banyak tentang hal itu, sebagian besar tidak gratis, saya khawatir. Jika Anda terjebak dengan TFS, lakukan rilis pilot kecil berdasarkan satu fitur per cabang & lihat seberapa baik penggabungannya untuk Anda.

mcottle
sumber
2

Pertama, penafian. Sulit untuk mengatakan apa cara terbaik untuk mengelola sumber Anda, karena kami tidak mengetahui bagaimana tim atau tim Anda bekerja setiap hari.

Secara umum, lebih baik bekerja di bagasi. Untuk setiap rilis utama, cabutlah - sehingga perbaikan bug untuk versi rilis ada di cabang yang dapat digabungkan kembali ke bagasi. Semua pengembang bekerja di trunk dan melakukan kode secara teratur (minimal sehari sekali).

Menggabungkan kode baru secara teratur meminimalkan rasa sakit saat menggabungkan potongan kode besar dalam fase integrasi besar-besaran. Dengan menyebarkan rasa sakit, Anda akan merasakannya lebih sedikit. Semakin sering anggota tim Anda melakukan kode, semakin sedikit mereka harus menggabungkan - karena mereka akan selalu berada di sumber terbaru.

Lionel
sumber
2
Saya sangat tidak setuju bekerja di bagasi. Jika bagasi rusak, semua orang akan terpengaruh. Saya juga tidak setuju pada percabangan setelah rilis besar, bagaimana jika bug mempengaruhi dua atau lebih rilis, Anda memperbaikinya di setiap cabang?
Trasplazio Garzuglio
@ marco-dinacci: Apa yang Anda katakan mungkin benar jika Anda memiliki lebih dari satu rilis yang dipelihara setiap saat. Namun, Anda mengabaikan fakta bahwa perbaikan untuk bug tersebut akan digabungkan kembali ke bagasi. Rilis lain kemudian bisa menarik perubahan. Mengenai pecahnya batang. Sebelum Anda memasukkan kode ke dalam trunk, Anda harus memastikan bahwa Anda memiliki semua sumber terbaru dan bahwa perubahan Anda tidak merusak trunk. Jika rusak, Anda tidak boleh komit sampai diperbaiki. Tentu saja, tentu saja ada pro dan kontra terhadap pendekatan yang berbeda.
Lionel
1

Saya tidak pernah menggunakan TFS 2008/2010 tetapi dari apa yang saya baca di berbagai forum ada banyak hal negatif tentang penggunaan TFS untuk kontrol versi. Ini telah membuat saya tetap jelas dari TFS sejauh ini.

Saya saat ini menggunakan SVN dan Git, saya menemukan mereka baik untuk tim kecil atau tim lajang tetapi tidak secara pribadi merekomendasikan SVN untuk tim besar.

Saya sudah memperhatikan PlasticSCM dan akan mencobanya dalam waktu dekat.

Saya minta maaf karena tidak menjawab pertanyaan spesifik Anda, akan memposting komentar jika hak istimewa saya mengizinkan saya.

Filip
sumber
1

Saya pikir git membuat semua perangkat lunak kontrol sumber lain menjadi usang. Bercabang dan menggabungkan itu mudah, dan jika ada masalah, itu bisa diatasi, tetapi banyak masalah bisa dihindari dengan cara mendorong sangat sering melakukan, bercabang, dan bergabung. Setiap pengguna mendapatkan salinan lengkap dari repo (ini dapat dipangkas, tapi saya bekerja dengan basis kode yang sangat besar dan itu bukan masalah), jadi ada sesuatu yang merupakan cadangan otomatis. Komit / tekan / tarik cepat, dan salah satu hal paling penting adalah putusnya sambungan antara nama file dan pelacakan. Data file, termasuk nama dan jalur, adalah gumpalan data yang direferensikan oleh simpul pohon, yang independen dari jalur. Ini bukan hanya lebih aman, tetapi beberapa jenis masalah "jangan pernah lakukan itu" dalam sesuatu seperti SVN bukan masalah. Ini dapat digunakan sebagai konfigurasi hub tradisional atau peer to peer, dan penggunaan tersebut dapat dicampur secara bebas dalam pengaturan yang sama. Ini aman secara kriptografis terhadap insersi tanpa dokumen. Dan itu sangat cepat.

Saya menemukan saya menggunakannya di rumah sekarang sepanjang waktu, hanya untuk melacak dokumen dan menyinkronkannya di antara komputer, karena lebih mudah untuk melakukan dan mendorong ke server file daripada untuk kembali ke server atau menyimpannya di sana.

Kekurangannya adalah sedikit kurva pembelajaran yang curam, karena ia melanggar semua aturan yang biasa digunakan orang dengan kontrol sumber, dengan cara yang halus, tetapi kurva belajarnya curam yang pendek.

Kylben
sumber
1
Git benar-benar bagus, tapi (sama seperti segalanya) itu bukan solusi terbaik untuk semua orang & segalanya. programmers.stackexchange.com/questions/111633/...
Rook
4
Dengan cara apa Git membuat Mercurial menjadi usang? Terutama di lingkungan pengembangan Windows. Akan lebih baik untuk mengatakan DVCS membuat VCS lainnya menjadi usang daripada melemparkan bom bensin & memulai perang suci.
mcottle
@Mcottle - Saya tidak akan pergi sejauh itu. SVN misalnya adalah contoh bagus dari kualitas VCS yang tidak terdistribusi. Kita dapat mengatakan bahwa SVN membuat CVS usang, tetapi saya akan berhenti di situ. Git sama sekali tidak membuat SVN usang - ini adalah pendekatan yang sepenuhnya berbeda yang baik untuk sebagian orang, tetapi buruk untuk beberapa pendekatan lain (untuk lebih lanjut lihat tautan di atas). Misalnya, baik Git dan Hg relatif "menyedot" dengan file biner.
Benteng
@ldigas: Dengan cara apa git dan hg "payah" lebih buruk dengan file biner daripada svn? Tidak ada yang bisa melacak perubahan dalam biner di luar granularity per file, dengan semua konsekuensi yang terkait. Juga, mereka berdua membuat sebagian besar svn usang, melihat bagaimana keduanya dapat melakukan persis apa yang dilakukan svn (terlepas dari beberapa fitur yang tidak jelas), dan kemudian beberapa; Anda hanya perlu mengaturnya seperti itu. Alasan terbaik untuk menggunakan svn yang dapat saya pikirkan adalah bahwa Anda sudah menggunakannya dan migrasi akan terlalu menyakitkan / berisiko / mahal.
tdammers
@tdammers - Saya tidak tertarik dengan diskusi trolling. Untuk setiap poin di atas, Google sedikit dan Anda akan menemukan sesuatu yang cukup cepat.
Benteng
1

Beberapa praktik baik yang benar-benar kami ikuti dan banyak membantu kami:

1) Pastikan Anda tidak memiliki salinan file yang dapat ditulisi di lokal Anda dan Anda selalu memeriksa untuk mengedit. (Jika kadang-kadang Anda harus bekerja secara lokal, maka cobalah untuk menggabungkannya dalam kontrol sumber sebelum EOD.)

2) Beri label file Anda secara berkala, setelah tonggak kecil yang signifikan.

3) Berikan checkout atau komentar check-in yang bagus. Ini akan membantu ketika Anda meninjau, terkadang Anda tidak perlu membuka dan membandingkan antar versi.

franklins
sumber
1

bagaimana Anda mengelola checkin dan mencegah konflik fitur dan mengelola dependensi dengan kontrol sumber dengan benar?

Ini, dari POV saya, tugas dua faktor: Anda harus melakukannya dari teknis (percabangan yang baik & mudah & tahan peluru | merger | audit dll) dan manajemen (kebijakan mapan "apa" "ketika" "bagaimana"). Dua atau bahkan tiga tingkatan kode pemisahan dalam ALM: sesuatu seperti "stabil" (lulus pengujian unit), "tidak stabil" (setiap fitur yang disertakan selesai, tetapi aplikasi sebagai produk memiliki pertanyaan pasca integrasi / ya, itu bisa terjadi /) dan " sedang dalam proses ". Dengan cara ini Manajer Proyek yang tepat dapat mengurangi gangguan pada pekerjaan pengembang yang sama.

TFS (yang saya tidak gunakan, gunakan dan tidak akan gunakan) memiliki beberapa, AFAIK, masalah mendasar dalam aspek Manajemen Sumber Kontrol. Saya hanya tautkan di sini ke beberapa teks James McKay:

Malas Badger
sumber
1

Artikel yang sangat bagus dan baru-baru ini yang secara jelas dan ringkas membandingkan dan membedakan beberapa cara berbeda untuk bekerja dengan kontrol sumber ada di sini: Kontrol Sumber Dilakukan dengan Benar .

Saya tidak berpikir ada satu strategi / praktik terbaik untuk menggunakan kontrol sumber. Tim matang yang telah bekerja bersama untuk waktu yang lama memiliki "rasa sakit" yang jauh lebih sedikit di daerah ini bahkan jika mereka tidak benar-benar mengikuti "praktik terbaik" populer.

Adapun alat yang ... Hampir tidak masalah. Yang penting adalah membuat semua orang di tim Anda berada di halaman yang sama sejauh penggunaan. Ini berarti semua orang perlu memahami bagaimana garis kode dikelola dan apa yang diharapkan dari mereka. Lagi pula, dalam praktiknya Anda TIDAK biasanya punya pilihan tentang alat mana yang akan digunakan. Manfaatkan yang terbaik dari apa pun yang Anda gunakan.

Angelo
sumber