Mengapa pengguna Git mengatakan bahwa Subversion tidak memiliki semua kode sumber secara lokal?

23

Saya hanya akan membaca apa yang saya baca di SO, jadi maafkan saya, tetapi yang saya baca mengatakan bahwa satu keuntungan utama dari Git daripada Subversion adalah bahwa Git memberikan semua kode sumber ke pengembang secara lokal, tidak harus melakukan apa pun pada server.

Dengan terbatasnya penggunaan SVN dan TortoiseSVN, saya memiliki semua kode sumber, atau setidaknya saya pikir saya punya. Misalnya, saya punya situs web. Saya mengunggahnya ke SVN. Saya masih menjalankan situs web saya secara lokal, bukan? Jika seseorang mengirimkan perubahan dan saya tidak terhubung, tidak masalah apakah saya memiliki Git atau tidak, sampai saya terhubung kembali ke server.

Saya tidak mengerti. Saya tidak meminta pengulangan satu vs yang lain kecuali satu titik ini.

johnny
sumber
2
Bukannya Anda memiliki semua kode sumber secara lokal, tetapi Anda memiliki seluruh riwayat repositori secara lokal. Ini membuat semua interaksi repositori selain sinkronisasi server lebih cepat.
stonemetal

Jawaban:

69

Premis yang Anda tanyakan benar-benar salah:

bahwa salah satu keunggulan utama Git daripada Subversion adalah bahwa Git memberikan semua kode sumber kepada pengembang secara lokal

Dengan Subversion dan Git Anda memiliki kode sumber secara lokal. Dengan Git Anda memiliki kode sumber dan repositori di mesin lokal Anda.

Bunyinya seperti ini.

Subversi:

Kode Anda <-> Repositori

Git:

Kode Anda <-> Repositori lokal Anda <-> Repositori jarak jauh (... <-> repo jarak jauh lain, dan sebagainya)

Satu manfaat yang Anda dapatkan dari struktur ini adalah Anda masih dapat menggunakan kontrol sumber dan melakukan perubahan lokal Anda ke repositori lokal Anda tanpa mengganggu pekerjaan anggota tim lain (dengan siapa Anda berbagi repositori jarak jauh).

Dengan Subversion Anda harus mengambil risiko melanggar pembangunan untuk orang lain atau menderita pembangunan lokal yang berkepanjangan tanpa kontrol sumber yang berakhir dengan komitmen besar (atau lebih mungkin pengembalian).

Dengan Git, di sisi lain, Anda akan merasa bebas untuk melakukan perubahan ini ke repositori lokal Anda, melihat log dan perbedaan atau perubahan Anda, dan hanya ketika Anda merasa siap untuk dibagikan dengan tim, dorong perubahan dari lokal repositori ke yang jauh.

Goran Jovic
sumber
10
Ini adalah jawaban yang sangat bagus dan benar-benar menyentuh rumah dengan "... berisiko menghancurkan pembangunan untuk orang lain atau menderita pembangunan lokal yang berkepanjangan tanpa kontrol sumber ..."
Charles Sprayberry
1
@cspray: Terima kasih! Saya yakin ada manfaat lain juga, tetapi itu adalah rasa sakit terbesar yang saya miliki dengan Svn.
Goran Jovic
git FTW (8 lebih lanjut ...)
Trevor Boyd Smith
2
@ DanNeely: Sebenarnya - OP bertanya tentang klaim yang dia baca di suatu tempat dan jawabannya adalah itu tidak benar (lihat bagian pertama dari jawaban saya). Bagian kedua hanyalah sebuah penjelasan tentang apa yang ingin dikatakan oleh siapapun yang membuat klaim dan mengapa.
Goran Jovic
1
@ Giorgio: Cobalah dan Anda akan tahu :) Serius, saya tidak berpikir saya pernah berhasil melakukannya tanpa masalah (selain melakukan penggabungan sepenuhnya manual, yang mengalahkan tujuan dari alat ini)
Goran Jovic
17

Git atau Mercurial menyimpan seluruh repositori Anda secara lokal dengan semua revisi dan cabang bernama. Subversi hanya menyimpan satu - biasanya Revisi Kepala. Jadi dengan Git dan Mercurial Anda dapat mengakses repositori penuh (yaitu kode sumber Anda saat ini dan riwayatnya) bahkan ketika jaringan Anda rusak dengan SVN, Anda dibatasi pada revisi terakhir yang Anda perbarui.

Amenti
sumber
1
@Murph Terima kasih. Pada dasarnya itulah yang saya maksud. Saya mencoba mengklarifikasi.
Amenti
Bukan hanya pertanyaan apakah Anda memiliki koneksi jaringan ke server atau tidak; IO lokal jauh lebih cepat dan latensi lebih rendah daripada IO jaringan yang membuat memeriksa riwayat atau menyalahkan file jauh lebih cepat (TrotiseSVN menyalahkan peringatan "Silakan tunggu - ini bisa memakan waktu beberapa menit. Serius!"). Pengorbanannya adalah bahwa memiliki semua sejarah lokal dapat memerlukan lebih banyak ruang disk dalam repositori yang lebih besar; ini bisa menjadi masalah pada laptop jika Anda tidak bisa hanya menambahkan drive ekstra untuk menambah SSD kecil yang tidak merusak bank.
Dan Neely
Komentar @ DanNeely mungkin masuk akal pada tahun 2012, tetapi 4 tahun kemudian hampir tidak mungkin untuk menemukan proyek git yang dapat menempati bagian yang cukup besar dari SSD
Igor Stoppa
7

Jawaban singkatnya adalah ini: dengan git Anda memiliki semua kode sumber Anda, dengan subversi Anda memiliki semua versi terbaru dari kode sumber Anda.

Git menyimpan salinan seluruh riwayat repositori Anda secara lokal. Dengan subversi seluruh riwayat ada di server.

Bryan Oakley
sumber
2

Saya pikir apa yang Anda maksudkan adalah bahwa dengan SVN, semua tindakan Anda memerlukan komunikasi dengan server, sedangkan GIT tidak. Dengan SVN, jika Anda ingin bercabang, Anda bercabang di server dan menarik cabang itu. Dengan GIT, Anda dapat membuat cabang lokal tanpa "server" mengetahuinya.

Anda benar dalam mengatakan bahwa Anda memiliki kode sumber dengan SVN dan GIT, tetapi dengan GIT, tidak harus ada server terpusat yang juga berisi kode sumber. Dengan GIT, Anda mungkin HANYA orang dengan kode sumber, namun masih dapat melakukan semua fungsi yang Anda lakukan dengan VCS khas.

Saya telah mendengar argumen menentang GIT, dan saya pikir ini dapat membantu dengan pertanyaan Anda, mengatakan bahwa karena Anda tidak diharuskan untuk berkomitmen pada repo pusat, Anda memiliki kode sumber sampai Anda berkomitmen dan mendorongnya ke server Anda, jika kamu memiliki satu. Dengan SVN, satu-satunya cara untuk memiliki kontrol versi adalah dengan melakukan ke server, tetapi dengan GIT, Anda berpotensi menyimpan segala sesuatu di mesin lokal Anda dan jika ada yang salah, Anda "bisa kehilangan segalanya" meskipun Anda bisa dengan mudah kehilangan semua perubahan Anda dengan SVN jika Anda tidak melakukan dan HDD Anda jatuh juga.

David Peterman
sumber
1

mengatakan bahwa karena Anda tidak diharuskan untuk melakukan repo pusat, Anda memiliki kode sumber Anda sampai Anda berkomitmen dan mendorongnya ke server Anda, jika ada. Dengan SVN, satu-satunya cara untuk memiliki kontrol versi adalah dengan melakukan ke server, tetapi dengan GIT, Anda berpotensi menyimpan segala sesuatu di mesin lokal Anda dan jika ada yang salah, Anda "bisa kehilangan segalanya" meskipun Anda bisa dengan mudah kehilangan semua perubahan Anda dengan SVN jika Anda tidak melakukan dan HDD Anda jatuh juga.

Jika Anda mendorong setiap hari, maka risikonya harus kecil. Tetapi jika Anda dipaksa untuk melakukan setiap hari ke server SVN, maka pada akhirnya, Anda dapat membuat semuanya dalam satu set perubahan besar, yang tidak memisahkan setiap perubahan menjadi langkah-langkah kecil. Dengan git, Anda dianjurkan untuk membuat beberapa commit kecil. Saat mendorong, jika penggabungan diperlukan, daripada mencoba untuk menggabungkan dan mendorong. Jika Anda tidak dapat menggabungkan saat ini, Anda bisa mendorong ke cabang baru atau repositori lain di server.

linquize
sumber