Teknik subversi tingkat lanjut, apa yang saya lewatkan?

10

Saya mulai menggunakan SVN sekitar 9 bulan yang lalu dan ini merupakan game changer untuk sedikitnya. Meskipun, saya merasa saya masih agak bingung. Saya merasa ada banyak hal yang perlu saya manfaatkan untuk benar-benar meningkatkan pengembangan aplikasi saya.

Sebagai contoh

Saya ingin dapat mengkarantina setiap perubahan volatile / utama menjadi semacam 'sub-repositori' atau sesuatu. Saya menemukan bahwa perubahan besar menghambat perbaikan bug kecil yang cukup mendesak. Bagaimana saya bisa mendorong satu pembaruan sederhana tanpa mendorong kode yang tidak lengkap atau rusak?

Derek Adair
sumber
3
Anda mungkin ingin mempertimbangkan untuk menggunakan hg untuk cabang lokal Anda (Anda dapat menggunakannya dengan svn baik-baik saja, periksa ini )
OneOfOne
Ha! Anda hilang lincah.
DexterW
3
"Advanced Subversion" terdengar seperti sebuah oxymoron. Gunakan Git atau Mercurial, jika hanya secara lokal.
Macneil

Jawaban:

7

Untuk mengatasi contoh Anda, Anda memiliki tiga kemungkinan untuk melakukan itu:

  1. Anda dapat melakukan satu file. Jika Anda menggunakan IDE untuk mengakses Repositori, ia kemungkinan besar memiliki pandangan, untuk memilih atau membatalkan pilihan file tunggal sebelum melakukan. Pada baris perintah Anda mengetik svn commit file1 path1/file2 path2untuk mengkomit file1, path1 / file2 dan setiap perubahan di bawah path2.
  2. Anda dapat membuat berbagai copy pekerjaan. Anda mengerjakan fitur besar Anda dalam copy pekerjaan standar Anda dan mendapatkan informasi tentang bug mendesak. Anda dapat checkout repositori Anda ke direktori yang berbeda dan memperbaiki bug di copy pekerjaan kedua ini. Anda bahkan dapat memeriksa hanya subdirektori dengan komponen di mana bug terjadi. Setelah perbaikan bug Anda dapat melakukan dalam copy pekerjaan kedua Anda tanpa melakukan pekerjaan Anda pada fitur besar. EDIT: Cara itu juga dijelaskan dalam jawaban Anna Lear.
  3. Anda membuat cabang untuk mengerjakan fitur Anda. Untuk itu Anda menggunakan perintah copy. Jika Anda menggunakan standar-layout untuk repositori Anda (direktori dengan projectname dan subdirektori dengan nama trunk, tag dan cabang, batang mengandung proyek) Anda dapat menggunakan svn-copy-perintah seperti berikut untuk membuat cabang: svn copy svn://hostname/projectname/trunk svn://hostname/branches/branch-for-feature-X. Sekarang Anda dapat memindahkan copy pekerjaan Anda ke lokasi baru: svn switch svn switch svn://hostname/projectname/branches/branch-for-feature-X. Jika Anda beralih dalam mode perbaikan bug Anda mengkomit perubahan aktual Anda, alihkan copy pekerjaan Anda kembali ke trunk, perbaiki bug dan komit, dan alihkan copy pekerjaan kembali ke cabang fitur Anda. Jika Anda siap mengembangkan fitur, Anda dapat menggabungkannya kembali ke bagasi.

Untuk kasus sederhana yang dijelaskan, Anda biasanya akan menggunakan # 1 (paling sering saya gunakan), terkadang # 2. Bekerja dengan cabang (kasus # 3) lebih rumit ( baca lebih lanjut ), tetapi memungkinkan lebih banyak trik. Tetapi cabang yang cocok dengan deskripsi Anda tentang subrepositori.

Selain dari teladan Anda, saya tidak bisa bicara banyak. Ada banyak hal tentang Subversion, tetapi saya tidak tahu apa yang sudah Anda gunakan dan apa yang Anda butuhkan untuk proyek Anda. Untuk mempelajari lebih lanjut tentang SVN, Buku SVN adalah sumber yang bagus: http://svnbook.red-bean.com/

Mnementh
sumber
3
Masalah dengan pendekatan # 1 adalah Anda tidak bisa selalu tahu sebelumnya bahwa fitur baru Anda dan perbaikan bug tidak akan keduanya melibatkan perubahan pada file yang sama. Untuk alasan ini, saya merekomendasikan # 2 (copy pekerjaan individu untuk setiap fitur atau perbaikan bug) atau # 3 (cabang individu untuk setiap fitur atau perbaikan bug). Cabang memiliki kelebihan bahwa Anda dapat melakukan perubahan pada cabang sebelum fitur atau perbaikan bug selesai tanpa mempengaruhi checkout dari bagasi (dengan salinan kerja yang terpisah, semua komitmen mempengaruhi bagasi).
Stephen C. Steel
7

Anda dapat memeriksa kode ke kotak pasir yang berbeda alih-alih hanya mengambil satu salinan dan membuat semua perubahan di sana.

Jadi Anda bisa memiliki struktur folder yang mirip dengan ini:

D:\Dev\MajorFeature1
D:\Dev\Bug12345
D:\Dev\MajorFeature2

dll.

Semua itu dapat diperiksa dari lokasi yang sama di SVN Anda, mis http://mysvnrepo/trunk.

Dengan cara ini Anda dapat melakukan dari sandbox perbaikan bug Anda tanpa mempengaruhi yang pengembangan fitur, meskipun Anda harus menjalankan svn updatedari sandbox lain untuk mendapatkan perubahan yang dilakukan untuk perbaikan bug.

Adam Lear
sumber
4

Apakah Anda sudah melihat Cabang Subversi sama sekali?

Salah satu teknik umum adalah menjaga Trunk Anda stabil, menerapkan perbaikan kritis sesuai kebutuhan. Anda kemudian membuat cabang untuk setiap karya signifikan baru. Pengembang yang mengerjakan proyek itu memeriksa cabang dan berkomitmen ke cabang. Itu tidak memengaruhi Trunk sampai Anda memutuskan untuk menggabungkan cabang kembali ke trunk utama sebagai bagian dari integrasi akhir Anda.

Pendekatan lain adalah memiliki cabang untuk Rilis tertentu, untuk menghindari pekerjaan lain yang tidak sengaja dilakukan pada masalah yang menyebabkan bagasi. Anda dapat memperbaiki bug 'Rilis Cabang' sesuai kebutuhan dan kemudian lipat perbaikan itu kembali ke bagasi saat siap.

Pengembang Anda dapat memeriksa beberapa salinan yang berfungsi - trunk dan cabang apa pun - atau dapat bertukar antara trunk dan cabang tertentu dengan svn switchperintah.

Saya tidak merekomendasikan memiliki banyak salinan 'kotak pasir' yang Anda simpan secara terpisah karena (a) ini melarang kolaborasi dengan orang lain dan (b) akan terlalu mudah untuk secara tidak sengaja melakukan perubahan yang tidak berfungsi namun belum ke bagasi utama.

JBRWilkinson
sumber
3

Ukuran copy pekerjaan saya saat ini adalah 10GB, dengan lebih dari 50.000 file. Saya dapat memiliki beberapa salinan untuk cabang yang berbeda, tetapi perlu beberapa saat hanya untuk membuat salinan baru!

Ketika bug mendesak datang, saya biasanya menyimpan semua perubahan saya di patch, mengembalikan semuanya, mengerjakan bug dan melakukan, lalu menerapkan patch yang saya simpan ... Jauh lebih mudah dan lebih cepat daripada mendapatkan copy pekerjaan yang baru. Jika saya harus sering melakukan ini, saya akan memiliki dua salinan yang berfungsi: satu untuk perubahan jangka panjang, yang lain untuk perbaikan bug.

Xavier Nodet
sumber