Tidak ada pertanyaan bahwa sebagian besar perdebatan tentang alat programmer menyaring pilihan pribadi (oleh pengguna) atau penekanan desain , yaitu , mengoptimalkan desain sesuai dengan kasus penggunaan tertentu (oleh pembuat alat). Editor teks mungkin adalah contoh yang paling menonjol - seorang pembuat kode yang bekerja pada Windows di kantor dan kode di Haskell pada Mac di rumah, menghargai cross-platform dan integrasi kompiler dan memilih Emacs di atas TextMate , dll.
Itu kurang umum bahwa teknologi yang baru diperkenalkan benar-benar, terbukti lebih unggul dari pilihan yang ada.
Apakah ini sebenarnya kasus dengan sistem kontrol versi (VCS), khususnya, VCS terpusat ( CVS dan SVN ) dibandingkan VCS terdistribusi ( Git dan Mercurial )?
Saya menggunakan SVN selama sekitar lima tahun, dan SVN saat ini digunakan di tempat saya bekerja. Kurang dari tiga tahun yang lalu, saya beralih ke Git (dan GitHub) untuk semua proyek pribadi saya.
Saya dapat memikirkan sejumlah keunggulan Git daripada Subversion (dan yang sebagian besar abstrak untuk keuntungan didistribusikan melalui VCS tersentralisasi), tetapi saya tidak dapat memikirkan satu contoh contra - beberapa tugas (yang relevan dan muncul di programer biasa) alur kerja) bahwa Subversion lebih baik daripada Git.
Satu- satunya kesimpulan yang saya ambil dari ini adalah bahwa saya tidak memiliki data - bukan bahwa Git lebih baik, dll.
Dugaan saya adalah bahwa contoh tandingan semacam itu ada, maka dari itu pertanyaan ini.
sumber
Jawaban:
Subversi adalah repositori pusat
Sementara banyak orang ingin membagikan repositori untuk manfaat nyata dari kecepatan dan banyak salinan, ada beberapa situasi di mana repositori pusat lebih diinginkan. Misalnya, jika Anda memiliki kode penting yang tidak ingin diakses siapa pun, Anda mungkin tidak ingin meletakkannya di bawah Git. Banyak perusahaan ingin menjaga kode mereka terpusat, dan (saya kira) semua proyek pemerintah (serius) berada di bawah repositori pusat.
Subversi adalah kebijaksanaan konvensional
Ini untuk mengatakan bahwa banyak orang (terutama manajer dan bos) memiliki cara yang biasa untuk memberi nomor versi dan melihat pengembangan sebagai "baris tunggal" sepanjang waktu dimasukkan ke dalam otak mereka. Jangan tersinggung, tetapi kebebasan Git tidak mudah ditelan. Bab pertama dari setiap buku Git memberitahu Anda untuk mengosongkan semua cita-cita konvensional dari pikiran Anda dan mulai lagi.
Subversi melakukannya dengan satu cara, dan tidak ada yang lain
SVN adalah sistem kontrol versi. Ia memiliki satu cara untuk melakukan tugasnya dan semua orang melakukannya dengan cara yang sama. Titik. Ini memudahkan transisi ke / dari SVN dari / ke VCS terpusat lainnya. Git bahkan BUKAN VCS murni - ini adalah sistem file, memiliki banyak topologi untuk cara mengatur repositori dalam situasi yang berbeda - dan tidak ada standar. Itu membuatnya lebih sulit untuk memilih satu.
Keuntungan lain adalah:
SVN mendukung direktori kosongSVN memiliki dukungan Windows yang lebih baikSVN dapat memeriksa / mengkloning sub-pohonsvn lock
yang berguna untuk file yang sulit digabungkansvn update
.sumber
git fetch origin
, masing-masing dari mereka memiliki cadangan kode saya, bersama dengan cadangan apa pun yang disediakan Github sendiri. (Kami secara teratur memangkas cabang-cabang yang digabungkan, baik secara lokal maupun di Github.)Salah satu manfaat dari Subversion lebih Git dapat menjadi yang Subversion memungkinkan memeriksa sub-pohon saja. Dengan Git seluruh repositori adalah sebuah unit, Anda hanya bisa mendapatkan semua atau tidak sama sekali. Dengan kode modular, ini bisa sangat bagus dibandingkan dengan submodules Git. (Sementara submitula Git juga mendapatkan tempatnya, jelas.)
Dan sedikit manfaat kecil: Subversi dapat melacak direktori kosong. Git melacak konten file, sehingga direktori tanpa file apa pun tidak akan muncul.
sumber
git subtree
perintah untuk menyelesaikannya dengan tepat. Keuntungan subversi terakhir menggigit debu :) Detail di sini: github.com/gitster/git/blob/... Catatan: Meskipun ini adalah tautan ke proyek github, git-subtree sekarang menjadi bagian dari distribusi inti git.Saya bisa memikirkan tiga. Pertama, ini sedikit lebih mudah untuk grok, terutama untuk yang bukan pengembang. Secara konseptual, ini jauh lebih sederhana daripada opsi DCVS . Yang kedua adalah kematangan, khususnya TortoiseSVN di Windows. TortoiseHg mengejar ketinggalan dengan cepat. Ketiga, sifat binatang - hanya gambar dari sistem file tempat Anda dapat memeriksa berbagai hal dari tingkatan pohon - dapat berguna dalam beberapa skenario - seperti membuat versi berbagai file konfigurasi yang sangat berbeda di puluhan server tanpa puluhan repositori.
Ini bukan untuk mengatakan kami tidak memindahkan semua pengembangan ke Mercurial.
sumber
svn:external
memiliki kekuatan dan fleksibilitas lebih dari submodulasumber
Saya menulis ini sebagai komentar atas jawaban orang lain, tetapi saya rasa ini layak menjadi jawaban dalam dirinya sendiri.
Konfigurasi SVN perusahaan saya yang dipilih dengan cermat membutuhkan penguncian tingkat file untuk mengedit konten, dan tidak pernah menggunakan penggabungan. Akibatnya, banyak pengembang bersaing untuk mengunci, dan itu bisa menjadi hambatan besar, dan tidak pernah ada kemungkinan konflik gabungan.
SVN jelas melakukan kontrol manajerial top-down lebih baik daripada Git. Dalam migrasi skunkworks saya ke Git (meminta pengampunan alih-alih izin), saya berkali-kali menakuti manajer saya dengan anggapan bahwa tidak ada server utama yang mengendalikan server yang mengendalikan perangkat lunak tempat kita semua adalah budak.
sumber
Alasan saya:
sumber
Saya menghargai bahwa Anda mencari informasi yang baik, tetapi pertanyaan semacam ini hanya mengundang, "Saya pikir Git sangat menang, dan svn teh suxorz!" jawaban.
Saya mencoba dan secara pribadi menemukan Git terlalu banyak untuk tim kecil saya. Sepertinya itu akan bagus untuk tim besar atau kelompok tim yang tersebar secara geografis. Saya sangat memahami manfaat Git, tetapi kontrol sumber menurut saya bukan sesuatu yang membuat saya terjaga di malam hari.
Saya adalah pemburu rusa, dan ketika saya dan teman-teman saya keluar mereka dipersenjatai dengan gigi, dipenuhi dengan amunisi dan peralatan teknologi tinggi. Saya muncul dengan senapan tunggal, tujuh peluru dan pisau buck. Jika saya membutuhkan lebih dari tujuh putaran maka saya melakukan sesuatu yang salah, dan saya juga melakukan hal yang sama.
Poin yang saya coba sampaikan adalah bahwa jika Anda adalah tim kecil yang mengerjakan proyek menengah ke kecil dan Anda sudah terbiasa dengan SVN maka gunakanlah. Ini tentu lebih baik daripada CVS atau (gemetar) SourceSafe , dan saya tidak perlu lebih dari lima menit untuk mengatur repositori. Git terkadang bisa berlebihan.
sumber
git
danhg
, saya sarankan lincah bagi siapa saja yang berpikirgit
terlalu banyak. TortoiseHG akan sangat akrab bagi siapa pun yang terbiasa dengan TortoiseSVN (bahkan berbagi overlay Explorer yang sama pada Windows). Ini tentu jauh lebih mudah daripada VSS dan saya akan terkejut jika butuh lebih dari beberapa detik untuk mengatur repo hg, komit keadaan awal dan mengkloningnya ke drive bersama.Ini semua relatif, dan seperti yang dikatakan maple_shaft, jika ada yang cocok untuk Anda, jangan ubah!
Tetapi jika Anda benar-benar menginginkan sesuatu , saya akan mengatakan itu mungkin lebih baik untuk desainer, programmer web dan semacamnya - ini menangani gambar dan file biner sedikit lebih baik.
sumber
Kegunaan. Ini bukan benar-benar pantas Subversion melainkan TortoiseSVN .. TortoiseGit ada, tetapi masih memiliki jalan panjang untuk mencocokkan TortoiseSVN.
Jika Anda bertanya apa yang dilakukan Git lebih baik dari SVN, saya akan membalas GitHub . Lucu bagaimana alat pihak ketiga membuat perbedaan besar.
sumber
Ketika Anda tidak perlu melakukan percabangan dan penggabungan , SVN (dengan TortoiseSVN di Windows) sangat mudah dipahami dan digunakan. Git terlalu rumit untuk kasus-kasus sederhana, karena ia mencoba membuat percabangan / penggabungan menjadi mudah.
(Banyak proyek kecil tidak perlu melakukan percabangan jika dikelola dengan baik. Git ditujukan untuk kasus-kasus rumit; oleh karena itu sebagian besar dokumentasi Git mengasumsikan Anda perlu melakukan operasi kompleks seperti percabangan dan penggabungan.)
sumber
git
percabangan dan penggabungan bukanlah operasi yang rumit. Saya bahkan menggunakan cabang dalam proyek one-man, bahkan ketika tidak ada persyaratan untuk beberapa versi. Terus bekerja, Anda tidak dapat melanjutkan saat ini di cabang, bercabang ketika Anda mengetahui bahwa mencoba solusi lain mungkin jauh lebih baik ... Namun, saya setuju itugit
agak sulit untuk dipelajari.Yah, kakek saya bisa menggunakan SVN di komputer Windows XP-nya, tetapi dia akan kesulitan menggunakan Git. Mungkin ini lebih merupakan pencapaian TortoiseSVN daripada TortoiseGit , tapi saya pikir itu agak terkait dengan fakta, bahwa Git secara inheren lebih kuat dan dengan demikian lebih kompleks, dan tidak ada gunanya untuk membodohkannya ke level yang sama.
Sekarang tidak terlalu penting bagi kakek saya, karena dia belum melakukan pemrograman apa pun sampai akhir-akhir ini. Namun, saya pernah menjadi anggota tim, di mana seniman grafis kami juga menggunakan kontrol sumber kami.
Dan mereka adalah orang-orang yang hanya berharap alat mereka berfungsi (demikian juga saya, tetapi saya memiliki kesempatan yang realistis untuk membuat mereka bekerja jika terjadi kegagalan) dan bersifat intuitif. Terlepas dari kenyataan, bahwa itu akan menjadi upaya yang cukup untuk membuat mereka bergaul dengan DVCS , ada sedikit yang bisa diperoleh. Dan dengan hanya dua pemrogram dalam tim, masuk akal bagi kami untuk tetap menggunakan SVN.
sumber
Di tempat kerja saya tidak bisa mengalihkan pengembang dari SVN ke DVCS apa pun karena dua alasan:
sumber
sumber
Orang lain telah memposting beberapa jawaban yang cukup bagus, tetapi bagaimana dengan Izin? Menggunakan Subversion over SSH, Anda dapat membuat akun terpisah di server Anda untuk SVN. Pengembang yang berbeda dapat diberikan akses yang berbeda ke berbagai bagian repositori. Bisakah GIT melakukan itu? Saya kira ada gitolit, tapi sepertinya tidak sefleksibel atau sekuat saya, saya juga tidak kenal siapa pun yang benar-benar menggunakannya.
sumber
Kecepatan. Kadang-kadang membutuhkan waktu 10 atau 15 menit untuk mengkloning repositori big git, sementara repositori subversi berukuran serupa membutuhkan waktu beberapa menit untuk check out.
sumber
git clone --depth=1
adalah teman Anda jika Anda tidak peduli dengan sejarahSaya memposting ini sebagai tanggapan daripada komentar.
Saya akui bahwa DVCS sedang dalam tren saat ini, tetapi saya akan mencoba memberi tahu alasannya.
DVCS lebih baik karena sama seperti banyak orang mengatakan, "ini adalah cara kita seharusnya bekerja sejak awal". Memang benar, Anda dapat melakukan dengan DVCS apa yang Anda gunakan dengan SVN, sehingga dengan cara yang membuat SVN usang.
Namun, tidak setiap proyek perangkat lunak sebagus yang didapat:
Proyek jangka panjang memiliki banyak manfaat dari DVCS, karena menggunakan lebih sedikit overhead, memungkinkan manajemen yang jauh lebih baik (bercabang dll), dan sangat didukung oleh host seperti kode google dan github.
Proyek-proyek itu bukan satu-satunya, ada jenis proyek lain yang sedang dikembangkan di perusahaan-perusahaan tanpa bantuan dari dunia luar atau internet: semuanya dilakukan secara internal, dan seringkali dalam jangka pendek. Contoh yang bagus: gim video. Kode berkembang dengan cepat.
Untuk kasus yang terakhir, pengembang tidak benar-benar membutuhkan percabangan atau fitur canggih yang dapat ditawarkan DVCS, mereka hanya ingin berbagi kode sumber dan aset. Kode yang mereka buat sepertinya tidak akan digunakan kembali, karena ada tenggat waktu. Mereka mengandalkan SVN daripada DVCS karena beberapa alasan:
Pikirkan tentang mesin industri game dan bagaimana SVN adalah penghemat waktu; orang berkomunikasi lebih banyak pada proyek-proyek itu karena permainan adalah tentang pemrograman berulang dan kode adaptif: tidak ada yang sulit untuk dikodekan, tetapi itu harus dilakukan dengan cara yang benar, SECEPATNYA. Programmer dipekerjakan, mereka mengkode bagian mereka, kompilasi, mengujinya sedikit, melakukan, melakukan, penguji permainan akan berurusan dengan sisanya.
DVCS dibuat untuk internet dan untuk proyek yang sangat kompleks. SVN adalah untuk proyek tim kecil, jangka pendek, dan ketat. Anda tidak perlu belajar banyak dari SVN, ini hampir seperti FTP dengan diff bodoh.
sumber
Subversion dan Git keduanya mendorong pendekatan khusus (dan sangat berbeda) untuk pengembangan dan kolaborasi. Beberapa organisasi akan mendapatkan lebih banyak dari Git, dan yang lain akan mendapatkan lebih banyak dari Subversion, tergantung pada organisasi dan budaya mereka.
Git dan Mercurial sangat baik untuk tim programmer profesional yang sangat kompeten dan terdistribusi secara longgar. Kedua alat DVCS yang populer ini mendorong repositori kecil, dengan penggunaan kembali antara pengembang yang dilakukan melalui perpustakaan yang diterbitkan dengan (relatif) antarmuka yang stabil.
Subversion, di sisi lain, mendorong struktur manajemen yang lebih terpusat dan erat, dengan lebih banyak komunikasi antara pengembang dan tingkat yang lebih besar dari kontrol organisasi atas kegiatan pengembangan sehari-hari. Dalam tim yang lebih terorganisir ini, penggunaan kembali antar pengembang cenderung terjadi melalui perpustakaan yang tidak dipublikasikan dengan (relatif) antarmuka yang tidak stabil. TortoiseSVN juga mengizinkan Subversion untuk mendukung tim multidisiplin dengan anggota yang bukan pemrogram profesional (mis. Insinyur sistem, insinyur algoritme, atau spesialis bidang mata pelajaran lainnya).
Jika tim Anda didistribusikan, dengan anggota yang bekerja dari rumah atau dari berbagai situs internasional, atau jika mereka lebih suka bekerja sendiri dan dalam keheningan, dengan sedikit komunikasi tatap muka, maka DVCS seperti Git atau Mercurial akan bagus. kecocokan budaya.
Jika, di sisi lain, tim Anda terletak di satu situs, dengan pendekatan "tim" aktif untuk pengembangan, dan banyak komunikasi tatap muka, dengan "buzz" di udara, maka SVN mungkin merupakan kecocokan budaya yang lebih baik, terutama jika Anda memiliki banyak tim lintas disiplin.
Tentu saja, adalah mungkin untuk mengkonfigurasi Git dan Hg (kuat dan fleksibel seperti mereka) untuk melakukan hampir apa pun yang Anda inginkan, tetapi itu jelas lebih banyak pekerjaan, dan mereka jelas lebih sulit untuk digunakan, terutama bagi anggota tim yang secara alami tidak akan cenderung menggunakan segala bentuk kontrol versi apa pun.
Akhirnya, saya juga menemukan bahwa berbagi fungsionalitas menggunakan pengembangan perpustakaan "panas" di bawah Svn (dengan CI & pendekatan berbasis tes) memungkinkan kecepatan pengembangan terkoordinasi yang sulit dicapai dengan tim yang lebih terdistribusi dan longgar.
sumber
Di bawah ini adalah dua alasan saya tetap menggunakan SVN.
sumber
Ada dua tren utama dalam kontrol versi saat ini; Distribusi, dan Integrasi .
Git hebat dalam desentralisasi.
SVN memiliki banyak alat yang dibangun yang terintegrasi dengannya. Sudah umum untuk menyiapkan server SVN Anda sehingga ketika Anda memeriksa perbaikan, Anda menyebutkan nomor bug di komentar checkin, dan secara otomatis menetapkan itu tetapi ke keadaan "dalam pengujian", dan memperingatkan penguji yang ditugaskan bahwa mereka perlu Lihat itu. Kemudian Anda dapat menandai rilis dan mendapatkan daftar semua bug yang diperbaiki dalam rilis ini.
Alat yang melakukan ini dengan SVN sudah matang, dan digunakan setiap hari.
sumber
Di Subversion, Anda dapat mengedit pesan log (juga disebut "komit pesan") setelah komit dilakukan dan didorong. Untuk sebagian besar penggunaan praktis, hal ini mustahil dilakukan dengan desain dalam sistem desentralisasi, termasuk git. Tentu saja, di git Anda dapat melakukan "git commit - amend", tetapi itu tidak membantu Anda setelah komit Anda didorong ke tempat lain. Di SVN, ketika Anda mengedit pesan log, Anda melakukannya di repositori pusat yang dibagikan semua orang, sehingga semua orang akan mendapatkan suntingan, dan tanpa pengubah revisi perubahan.
Mengedit pesan log setelah faktanya seringkali sangat berguna. Selain hanya memperbaiki kesalahan atau kelalaian dalam pesan log, ini memungkinkan Anda untuk melakukan hal-hal seperti memperbarui pesan log untuk merujuk ke komitmen di masa depan (seperti revisi yang memperbaiki bug atau menyelesaikan pekerjaan yang diperkenalkan dalam revisi saat ini) .
Ngomong-ngomong, tidak perlu ada bahaya kehilangan informasi. Kait pre-revprop-change dan post-revprop-change dapat menyimpan riwayat pesan lama jika Anda benar-benar khawatir, atau mengirim email dengan diff pesan log (ini lebih umum, sebenarnya), sehingga ada jejak audit.
sumber