it-swarm-id.com

Saya seorang pecandu Subversion, mengapa saya harus mempertimbangkan Mercurial atau Git atau DVCS lainnya?

Saya mencoba memahami manfaat sistem kontrol versi terdistribusi (DVCS).

Saya menemukan Pendidikan Subversion dan artikel ini oleh Martin Fowler sangat berguna.

DVCS Mercurial dan lainnya mempromosikan cara baru untuk mengerjakan kode dengan perubahan dan komitmen lokal. Ini mencegah penggabungan neraka dan masalah kolaborasi lainnya

Kami tidak terpengaruh oleh ini karena saya berlatih integrasi berkelanjutan dan bekerja sendirian di cabang pribadi bukanlah suatu pilihan, kecuali jika kami sedang bereksperimen. Kami menggunakan cabang untuk setiap versi utama, di mana kami memperbaiki bug yang digabungkan dari bagasi.

Mercurial memungkinkan Anda untuk memiliki letnan

Saya mengerti ini bisa berguna untuk proyek yang sangat besar seperti Linux, tetapi saya tidak melihat nilainya dalam tim kecil dan sangat kolaboratif (5 hingga 7 orang).

Mercurial lebih cepat, membutuhkan lebih sedikit ruang disk dan salinan lokal lengkap memungkinkan operasi log & diff yang lebih cepat.

Saya juga tidak khawatir dengan ini, karena saya tidak melihat masalah kecepatan atau ruang dengan SVN bahkan dengan proyek yang sangat besar yang saya kerjakan.

Saya mencari pengalaman dan/atau pendapat pribadi Anda dari mantan geek SVN. Khusus mengenai changesets konsep dan keseluruhan kinerja meningkatkan Anda diukur.

UPDATE (12 Januari) : Saya sekarang yakin bahwa itu patut dicoba.

UPDATE (12 Juni) : Saya mencium Mercurial dan saya menyukainya. Rasa ceri lokalnya dilakukan. Saya mencium Mercurial hanya untuk mencobanya. Saya harap Server SVN saya tidak keberatan. Rasanya sangat salah. Rasanya benar. Jangan berarti aku jatuh cinta malam ini .

FINAL UPDATE (29 Jul) : Saya mendapat hak istimewa untuk mengulas Eric Sink buku berikutnya berjudul Versi) Kontrol dengan Contoh . Dia selesai meyakinkan saya. Saya akan pergi untuk Mercurial.

304
user2567

Catatan: Lihat "EDIT" untuk jawaban atas pertanyaan saat ini


Pertama-tama, baca Pendidikan Subversi oleh Joel Spolsky. Saya pikir sebagian besar pertanyaan Anda akan dijawab di sana.

Rekomendasi lain, pembicaraan Linus Torvalds di Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Yang lain ini mungkin juga menjawab sebagian besar pertanyaan Anda, dan itu cukup menghibur.

BTW, sesuatu yang saya temukan cukup lucu: bahkan Brian Fitzpatrick & Ben Collins-Sussman, dua pencipta asli Subversion mengatakan dalam satu google talk "maaf tentang itu" merujuk pada Subversion yang lebih rendah daripada Mercurial (dan DVCS pada umumnya).

Sekarang, IMO dan secara umum, dinamika tim berkembang lebih alami dengan DVCS apa pun, dan manfaat yang luar biasa adalah Anda dapat melakukan offline karena itu menyiratkan hal-hal berikut:

  • Anda tidak bergantung pada server dan koneksi, yang berarti waktu lebih cepat.
  • Tidak menjadi budak ke tempat-tempat di mana Anda bisa mendapatkan akses internet (atau VPN) hanya untuk dapat melakukan.
  • Setiap orang memiliki cadangan segalanya (file, riwayat), bukan hanya server. Berarti siapa pun bisa menjadi server .
  • Anda dapat melakukan secara kompulsif jika perlu tanpa mengacaukan kode orang lain . Komit bersifat lokal. Anda tidak menginjak kaki satu sama lain saat melakukan. Anda tidak merusak bangunan atau lingkungan orang lain hanya dengan melakukan.
  • Orang tanpa "akses komit" dapat melakukan (karena melakukan dalam DVCS tidak menyiratkan mengunggah kode), menurunkan penghalang untuk kontribusi, Anda dapat memutuskan untuk menarik perubahan mereka atau tidak sebagai integrator.
  • Ini dapat memperkuat komunikasi alami karena DVCS menjadikan ini penting ... dalam Subversion, apa yang Anda miliki adalah balapan komit, yang memaksa komunikasi, tetapi dengan menghalangi pekerjaan Anda.
  • Kontributor dapat bergabung dan menangani penggabungan mereka sendiri, yang berarti lebih sedikit pekerjaan untuk integrator pada akhirnya.
  • Kontributor dapat memiliki cabang sendiri tanpa mempengaruhi orang lain (tetapi bisa membaginya jika perlu).

Tentang poin Anda:

  • Penggabungan neraka tidak ada di DVCSland; tidak perlu ditangani. Lihat poin berikutnya .
  • Dalam DVCS, semua orang mewakili "cabang", artinya ada penggabungan setiap kali perubahan ditarik. Cabang bernama adalah hal lain.
  • Anda dapat terus menggunakan integrasi berkelanjutan jika Anda mau. Tidak perlu IMHO, mengapa menambah kompleksitas ?, terus pengujian Anda sebagai bagian dari budaya/kebijakan Anda.
  • Mercurial lebih cepat dalam beberapa hal, git lebih cepat dalam hal lain. Tidak benar-benar hingga DVCS secara umum, tetapi untuk implementasi khusus mereka AFAIK.
  • Setiap orang akan selalu memiliki proyek penuh, bukan hanya Anda. Hal yang didistribusikan berkaitan dengan Anda dapat melakukan/memperbarui secara lokal, berbagi/mengambil dari luar komputer Anda disebut mendorong/menarik.
  • Sekali lagi, baca Pendidikan Ulang Subversion. DVCS lebih mudah dan lebih alami, tetapi mereka berbeda, jangan mencoba berpikir bahwa cvs/svn === dasar dari semua versi.

Saya menyumbangkan beberapa dokumentasi untuk proyek Joomla untuk membantu mengabarkan migrasi ke DVCS, dan di sini Saya membuat beberapa diagram untuk mengilustrasikan terpusat vs terdistribusi.

Terpusat

alt text

Didistribusikan dalam praktik umum

alt text

Didistribusikan ke penuh

alt text

Anda lihat dalam diagram masih ada "repositori terpusat", dan ini adalah salah satu argumen favorit penggemar versi terpusat: "Anda masih terpusat", dan tidak, Anda tidak, karena repositori "terpusat" hanyalah repositori Anda semua setuju (mis. repo github resmi), tetapi ini dapat berubah kapan saja Anda butuhkan.

Sekarang, ini adalah alur kerja khas untuk proyek sumber terbuka (mis. Proyek dengan kolaborasi besar-besaran) menggunakan DVCS:

alt text

Bitbucket.org agak setara dengan github untuk Mercurial, ketahuilah bahwa mereka memiliki repositori pribadi tanpa batas dengan ruang tak terbatas, jika tim Anda lebih kecil dari lima, Anda dapat menggunakannya secara gratis.

Cara terbaik Anda dapat meyakinkan diri Anda untuk menggunakan DVCS adalah dengan mencoba DVCS, setiap pengembang DVCS berpengalaman yang telah menggunakan svn/cvs akan memberi tahu Anda bahwa itu sepadan dan bahwa mereka tidak tahu bagaimana mereka bertahan sepanjang waktu tanpa itu.


[~ # ~] edit [~ # ~] : Untuk menjawab hasil edit Anda yang kedua, saya hanya dapat menegaskan kembali bahwa dengan DVCS Anda memiliki alur kerja yang berbeda, saya akan menyarankan Anda untuk tidak mencari alasan untuk tidak mencobanya karena praktik terbaik, rasanya seperti ketika orang berpendapat bahwa OOP tidak diperlukan karena mereka dapat menyiasati pola desain yang kompleks dengan apa yang selalu mereka lakukan dengan paradigma XYZ, Anda dapat mengambil manfaat apa pun.

Cobalah, Anda akan melihat bagaimana bekerja di "cabang pribadi" sebenarnya merupakan pilihan yang lebih baik. Salah satu alasan saya dapat mengatakan tentang mengapa yang terakhir adalah benar adalah karena Anda kehilangan rasa takut untuk melakukan , memungkinkan Anda untuk melakukan kapan saja Anda mau dan bekerja cara yang lebih alami.

Mengenai "penggabungan neraka", Anda mengatakan "kecuali kami sedang bereksperimen", saya katakan "bahkan jika Anda bereksperimen + maintaing + bekerja di v2.0 yang dirubah pada saat bersamaan ". Seperti yang saya katakan sebelumnya, menggabungkan neraka tidak ada, karena:

  • Setiap kali Anda berkomitmen Anda menghasilkan cabang yang tidak disebutkan namanya, dan setiap kali perubahan Anda memenuhi perubahan orang lain, terjadi penggabungan alami.
  • Karena DVCS mengumpulkan lebih banyak metadata untuk setiap komit, lebih sedikit konflik terjadi selama penggabungan ... sehingga Anda bahkan dapat menyebutnya sebagai "penggabungan cerdas".
  • Ketika Anda bertemu konflik gabungan, inilah yang dapat Anda gunakan:

alt text

Juga, ukuran proyek tidak masalah, ketika saya beralih dari Subversion, saya sebenarnya sudah melihat manfaatnya saat bekerja sendiri, semuanya terasa benar. The changesets (bukan revisi, tapi set perubahan khusus untuk file tertentu yang Anda sertakan komit, diisolasi dari keadaan basis kode) memungkinkan Anda memvisualisasikan apa yang Anda maksudkan dengan melakukan apa yang Anda lakukan pada sekelompok file tertentu, bukan keseluruhan basis kode.

Mengenai cara kerja perubahan dan peningkatan kinerja. Saya akan mencoba mengilustrasikannya dengan contoh yang ingin saya berikan: proyek mootools beralih dari svn yang diilustrasikan dalam grafik jaringan github .

Sebelum

alt text

Setelah

alt text

Apa yang Anda lihat adalah pengembang dapat fokus pada pekerjaan mereka sendiri saat melakukan, tanpa takut melanggar kode orang lain, mereka khawatir akan melanggar kode orang lain setelah mendorong/menarik (DVCS: komit pertama, kemudian tekan/tarik, kemudian perbarui ) tetapi karena penggabungan lebih cerdas di sini, mereka sering tidak pernah melakukan ... bahkan ketika ada konflik penggabungan (yang jarang terjadi), Anda hanya menghabiskan 5 menit atau kurang memperbaikinya.

Rekomendasi saya kepada Anda adalah untuk mencari seseorang yang tahu cara menggunakan Mercurial/git dan mengatakan kepadanya untuk menjelaskannya kepada Anda secara langsung. Dengan menghabiskan sekitar setengah jam dengan beberapa teman di baris perintah saat menggunakan Mercurial dengan desktop dan akun bitbucket kami yang menunjukkan kepada mereka cara menggabungkan, bahkan mengarang konflik bagi mereka untuk melihat bagaimana cara memperbaikinya dalam jumlah waktu yang konyol, saya dapat menunjukkan mereka kekuatan sejati dari DVCS.

Akhirnya, saya akan merekomendasikan Anda untuk menggunakan Mercurial + bitbucket daripada git + github jika Anda bekerja dengan windows guys. Mercurial juga sedikit lebih sederhana, tetapi git lebih kuat untuk manajemen repositori yang lebih kompleks (mis. git rebase ).

Beberapa bacaan tambahan yang disarankan:

333
dukeofgaming

Apa yang Anda katakan adalah antara lain bahwa jika Anda pada dasarnya tetap di satu cabang, maka Anda tidak perlu kontrol versi terdistribusi.

Itu benar, tetapi bukankah itu pembatasan kuat yang tidak perlu untuk cara Anda bekerja, dan yang tidak skala baik ke beberapa lokasi di beberapa zona waktu? Di mana server pusat Subversion berada, dan haruskah semua orang pulang jika server itu karena suatu alasan turun?

DVCSes adalah untuk Subversion, apa Bittorrent adalah untuk ftp

(secara teknis, tidak secara hukum). Mungkin jika Anda memikirkan hal itu, Anda mungkin mengerti mengapa itu adalah lompatan besar ke depan?

Bagi saya, beralih ke git, segera menghasilkan

  • Cadangan kami lebih mudah dilakukan (cukup "git remote update" dan Anda selesai)
  • Lebih mudah untuk melakukan langkah-langkah kecil ketika bekerja tanpa akses ke repositori pusat. Anda hanya bekerja, dan menyinkronkan ketika Anda kembali ke jaringan hosting repositori pusat.
  • Hudson lebih cepat membangun. Jauh lebih cepat menggunakan git pull daripada memperbarui.

Jadi, pertimbangkan mengapa bittorrent lebih baik daripada ftp, dan pertimbangkan kembali posisi Anda :)


Catatan: Telah disebutkan bahwa ada kasus penggunaan di mana ftp lebih cepat dan daripada bittorrent. Ini berlaku seperti halnya file cadangan yang dikelola editor favorit Anda lebih cepat digunakan daripada sistem kontrol versi.

59
user1249

Fitur pembunuh dari sistem kontrol versi terdistribusi adalah bagian terdistribusi. Anda tidak memeriksa "copy pekerjaan" dari repositori, Anda mengkloning seluruh salinan repositori. Ini sangat besar, karena memberikan manfaat kuat:

  • Anda dapat menikmati manfaat dari kontrol versi, bahkan ketika Anda tidak memiliki akses internet seperti ... Sayangnya ini terlalu sering digunakan dan overhyped sebagai alasan DVCS mengagumkan --- itu bukan titik penjualan yang kuat karena banyak dari kita menemukan diri kita coding tanpa akses internet tentang sesering mulai hujan katak.

  • Alasan sebenarnya memiliki repositori lokal adalah killer adalah --- Anda memiliki kendali penuh atas histori komit Anda sebelum didorong ke repositori master.

Pernah memperbaiki bug dan berakhir dengan sesuatu seperti:

r321 Fixed annoying bug.
r322 Argh, unexpected corner case to annoying bug in r321!
r323 Ok, really fixed corner case in r322
r324 Oops, forgot to remove some debugging code related to r321
...

Dan seterusnya. Sejarah seperti itu berantakan --- hanya ada satu perbaikan, tetapi sekarang implementasinya tersebar di antara banyak komit yang berisi artefak yang tidak diinginkan seperti penambahan dan penghapusan pernyataan debugging. Dengan sistem seperti SVN, alternatifnya adalah tidak melakukan (!!!) sampai semuanya berfungsi untuk menjaga sejarah tetap bersih. Meski begitu, kesalahan lewat dan Hukum Murphy sedang menunggu untuk brutal ketika sejumlah besar pekerjaan tidak dilindungi oleh kontrol versi.

Memiliki klon lokal repositori, yang Anda miliki , memperbaikinya karena Anda dapat menulis ulang sejarah dengan terus-menerus menggulirkan "perbaiki" dan "oops "berkomitmen ke dalam komit" perbaikan bug ". Pada akhirnya, satu komit bersih dikirim ke repositori master yang terlihat seperti:

r321 Fixed annoying bug.

Begitulah seharusnya.

Kemampuan untuk menulis ulang sejarah bahkan lebih kuat ketika dikombinasikan dengan model percabangan. Seorang pengembang dapat melakukan pekerjaan yang sepenuhnya terisolasi dalam cabang dan kemudian ketika saatnya untuk membawa cabang itu ke bagasi, Anda memiliki segala macam opsi menarik:

  • Lakukan penggabungan Vanilla polos . Membawa semuanya dalam kutil dan semuanya.

  • Lakukan rebase . Memungkinkan Anda untuk memilah-milah sejarah cabang, mengatur ulang urutan komit, membuang komit, bergabung komit bersama, menulis ulang pesan komit --- bahkan mengedit komit atau menambahkan yang baru! Sistem kontrol versi terdistribusi memiliki dukungan mendalam untuk tinjauan kode.

Setelah saya mengetahui bagaimana repositori lokal memungkinkan saya untuk mengedit sejarah saya demi kewarasan sesama programmer dan diri saya di masa depan, saya menutup SVN untuk selamanya. Klien Subversion saya sekarang git svn.

Mengizinkan pengembang dan manajer untuk melakukan kontrol editorial atas hasil sejarah komit dalam sejarah proyek yang lebih baik dan memiliki riwayat bersih untuk bekerja dengan benar-benar membantu produktivitas saya sebagai seorang programmer. Jika semua pembicaraan tentang "penulisan ulang sejarah" ini membuat Anda takut, jangan khawatir karena itu untuk repositori pusat, publik, atau master. Sejarah dapat (dan seharusnya!) Ditulis ulang sampai pada titik di mana seseorang membawanya ke cabang dalam repositori yang menarik orang lain. Pada saat itu sejarah harus diperlakukan seolah-olah diukir di atas loh batu.

46
Sharpie

jawaban dukofgamings mungkin sekitar sebaik yang bisa didapat, tapi saya ingin mendekati ini dari arah yang berbeda.

Mari kita asumsikan bahwa apa yang Anda katakan benar-benar benar, dan bahwa dengan menerapkan praktik-praktik yang baik Anda dapat menghindari masalah yang DVCS dirancang untuk diperbaiki. Apakah ini berarti bahwa DVCS tidak menawarkan keuntungan bagi Anda? Orang ba mengikuti praktik terbaik. Orang-orang pergi untuk mengacau. Jadi mengapa Anda menghindari perangkat lunak yang dirancang untuk memperbaiki serangkaian masalah, memilih untuk mengandalkan orang untuk melakukan sesuatu yang dapat Anda prediksi sebelumnya yang tidak akan mereka lakukan?

18
philosodad

Ya, itu menyakitkan ketika Anda harus menggabungkan komit besar di Subversion. Tetapi ini juga merupakan pengalaman belajar yang hebat, membuat Anda melakukan segala yang mungkin untuk menghindari penggabungan konflik. Dengan kata lain, Anda belajar untuk sering check-in . Integrasi awal adalah hal yang sangat baik untuk proyek bersama lainnya. Selama semua orang melakukannya, menggunakan Subversion seharusnya tidak menjadi masalah.

Git, misalnya, adalah dirancang untuk pekerjaan yang didistribusikan dan mendorong orang untuk mengerjakan proyek mereka sendiri dan membuat garpu sendiri untuk penggabungan (akhirnya) nanti. Itu bukan yang dirancang khusus untuk integrasi berkelanjutan dalam "tim kecil dan sangat kolaboratif" yang merupakan apa yang diminta OP. Justru sebaliknya, kalau dipikir-pikir itu. Anda tidak akan menggunakan fitur terdistribusi mewah jika semua yang Anda lakukan adalah duduk di ruangan yang sama bekerja sama pada kode yang sama.

Jadi untuk tim yang berlokasi bersama, menggunakan CI, saya benar-benar tidak berpikir itu penting jika Anda menggunakan sistem terdistribusi atau tidak. Itu bermuara pada rasa dan pengalaman.

9
Martin Wickman

Karena Anda harus terus menerus menantang pengetahuan Anda sendiri. Anda menyukai Subversion, dan saya bisa mengerti karena saya telah menggunakannya selama bertahun-tahun, dan sangat senang tentang hal itu, tetapi itu tidak berarti bahwa itu masih alat yang paling cocok untuk Anda.

Saya percaya bahwa ketika saya mulai menggunakannya, itu adalah pilihan terbaik saat itu. Tetapi alat lain muncul seiring waktu, dan sekarang saya lebih suka git, bahkan untuk proyek waktu luang saya sendiri.

Dan Subversion memang memiliki beberapa kekurangan. Misalnya. jika Anda mengganti nama direktori pada disk, maka itu tidak diganti namanya di repositori. Pindah file tidak didukung, membuat file memindahkan operasi salin/hapus, membuat penggabungan perubahan saat file telah dipindahkan/diganti namanya menjadi sulit. Dan pelacakan gabungan tidak benar-benar membangun ke dalam sistem, melainkan diimplementasikan dalam bentuk solusi.

Git memang memecahkan masalah ini (termasuk mendeteksi secara otomatis jika suatu file telah dipindahkan, Anda bahkan tidak perlu mengatakan itu adalah fakta).

Di sisi lain git tidak memungkinkan Anda untuk bercabang pada level direktori individual seperti yang dilakukan Subversion.

Jadi jawaban saya adalah, Anda harus menyelidiki alternatif, melihat apakah itu sesuai dengan kebutuhan Anda lebih baik daripada apa yang Anda kenal, dan kemudian memutuskan.

8
Pete

Sehubungan dengan kinerja, Git atau DVCS lainnya memiliki keuntungan besar dibandingkan SVN ketika Anda harus beralih dari satu cabang ke cabang lain, atau untuk beralih dari satu revisi ke yang lain. Karena semuanya disimpan secara lokal, semuanya jauh lebih cepat daripada untuk SVN.

Ini saja bisa membuat saya beralih!

7
Xavier Nodet

Alih-alih berpegang pada gagasan bahwa "dengan menerapkan praktik terbaik Anda tidak memerlukan DVCS", mengapa tidak mempertimbangkan bahwa alur kerja SVN adalah satu alur kerja, dengan satu set praktik terbaik, dan alur kerja GIT/Hg adalah alur kerja yang berbeda, dengan serangkaian praktik terbaik yang berbeda.

git bisect (dan semua implikasinya pada repositori utama Anda)

Di Git, prinsip yang sangat penting adalah Anda dapat menemukan bug menggunakan git bisect. Untuk melakukan ini, Anda mengambil versi terakhir yang Anda jalankan yang diketahui berfungsi, dan versi pertama yang Anda jalankan ternyata gagal, dan Anda melakukan (dengan bantuan Git) pencarian biner untuk mencari tahu komit yang menyebabkan bug. Untuk melakukan ini, seluruh riwayat revisi Anda harus relatif bebas dari bug lain yang dapat mengganggu pencarian bug Anda (percaya atau tidak, ini sebenarnya bekerja cukup baik dalam praktiknya, dan pengembang kernel Linux melakukan ini sepanjang waktu).

Untuk mencapai git bisect kemampuan, Anda mengembangkan fitur baru sendiri cabang fitur , rebase dan bersihkan sejarah (sehingga Anda tidak memiliki non dikenal revisi-bekerja dalam sejarah Anda - hanya sekelompok perubahan yang masing-masing membuat Anda setengah jalan untuk memperbaiki masalah), dan kemudian ketika fitur selesai, Anda menggabungkannya ke cabang utama dengan riwayat kerja.

Juga, untuk membuat ini berfungsi, Anda harus memiliki disiplin tentang versi cabang utama tempat Anda memulai cabang fitur Anda. Anda tidak bisa hanya memulai dari keadaan saat ini dari cabang master karena itu mungkin memiliki bug yang tidak terkait - jadi saran dalam komunitas kernel adalah mulai bekerja dari versi stabil terbaru dari kernel (untuk fitur besar ), atau untuk mulai bekerja dari kandidat rilis yang diberi tag terbaru.

Anda juga dapat mencadangkan kemajuan perantara Anda dengan mendorong cabang fitur ke server, dan Anda dapat mendorong cabang fitur ke server untuk membaginya dengan orang lain dan memperoleh umpan balik, sebelum fitur selesai, sebelum Anda harus ubah kode menjadi fitur permenant dari basis kode yang harus dihadapi semua orang * dalam proyek Anda.

Halaman manual gitworkflows adalah pengantar yang bagus untuk alur kerja yang dirancang untuk Git. Juga Mengapa Git Lebih Baik dari X membahas alur kerja git.

Proyek besar dan terdistribusi

Mengapa kita membutuhkan letnan dalam tim yang sangat berkolaborasi dengan praktik yang baik dan kebiasaan desain yang baik?

Karena dalam proyek-proyek seperti Linux, ada begitu banyak orang yang terlibat yang secara geografis terdistribusi sehingga sulit untuk berkolaborasi dengan tim kecil yang berbagi ruang konferensi. (Saya menduga bahwa untuk mengembangkan produk besar seperti Microsoft Windows yang bahkan jika orang-orang semua berada di gedung yang sama, tim ini terlalu besar untuk mempertahankan tingkat kolaborasi yang membuat VCS yang terpusat bekerja tanpa penolong.)

3
Ken Bloom

Mengapa tidak menggunakannya bersama-sama? Pada proyek saya saat ini, kami terpaksa menggunakan CVS. Namun, kami juga menyimpan repositori git lokal untuk melakukan pengembangan fitur. Ini adalah yang terbaik dari kedua dunia karena Anda dapat mencoba berbagai solusi dan menyimpan versi apa yang sedang Anda kerjakan, pada mesin Anda sendiri. Ini memungkinkan Anda untuk mengembalikan fitur versi sebelumnya atau mencoba beberapa pendekatan tanpa masalah saat Anda mengacaukan kode Anda. Memiliki repositori sentral kemudian memberi Anda manfaat memiliki repositori terpusat.

2
Vadim

Saya tidak punya pengalaman pribadi dengan DVCS, tetapi dari apa yang saya kumpulkan dari jawaban di sini dan beberapa dokumen terkait, perbedaan paling mendasar antara DVCS dan CVCS adalah model kerja yang digunakan

DVCS

Model kerja DVCS adalah yang Anda lakukan pengembangan terisolasi. Anda sedang mengembangkan fitur baru/perbaikan bug Anda secara terpisah dari semua perubahan lain sampai saat Anda memutuskan untuk merilisnya ke seluruh tim. Sampai saat itu, Anda dapat melakukan check-in apa pun yang Anda suka, karena tidak ada orang lain yang akan terganggu dengan hal itu.

CVCS

Model kerja CVCS (khususnya Subversion) adalah yang Anda lakukan pengembangan kolaboratif. Anda sedang mengembangkan fitur baru/perbaikan bug dalam kolaborasi langsung dengan semua anggota tim lainnya dan semua perubahan segera tersedia untuk semua.

Perbedaan lainnya

Perbedaan lain antara svn dan git/hg, seperti revisi vs perubahan adalah kebetulan. Sangat mungkin untuk membuat DVCS berdasarkan revisi (seperti yang Subversion miliki) atau CVCS berdasarkan pada perubahan (seperti halnya Git/Mercurial memilikinya).

Saya tidak akan merekomendasikan alat tertentu, karena sebagian besar tergantung pada model kerja yang Anda (dan tim Anda) paling nyaman dengannya.
Secara pribadi, saya tidak punya masalah dengan bekerja dengan CVCS.

  • Saya tidak takut memeriksa barang-barang, karena saya tidak punya masalah membuatnya menjadi tidak lengkap, tetapi dapat dikompilasi.
  • Ketika saya mengalami gabungan-neraka, itu dalam situasi di mana ia akan terjadi di svn dan git/hg. Sebagai contoh, V2 dari beberapa perangkat lunak dikelola oleh tim yang berbeda, menggunakan VCS yang berbeda, sementara kami mengembangkan V3. Kadang-kadang, perbaikan bug harus diimpor dari V2 VCS ​​ke V3 VCS, yang pada dasarnya berarti melakukan check-in yang sangat besar pada V3 VCS (dengan semua perbaikan bug dalam satu set perubahan). Saya tahu itu tidak ideal, tetapi itu adalah keputusan manajemen untuk menggunakan sistem VCS yang berbeda.