Bagaimana cara membuat cabang?


Jawaban:


349

Percabangan di Subversion difasilitasi oleh fasilitas penyalinan yang sangat sangat ringan dan efisien.

Percabangan dan penandaan secara efektif sama. Cukup salin seluruh folder di repositori ke tempat lain di repositori menggunakan svn copyperintah.

Pada dasarnya ini berarti bahwa dengan konvensi apa artinya menyalin folder - apakah itu cadangan, tag, cabang atau apa pun. Bergantung pada bagaimana Anda ingin memikirkan hal-hal (biasanya tergantung pada alat SCM mana yang telah Anda gunakan di masa lalu), Anda perlu mengatur struktur folder dalam repositori Anda untuk mendukung gaya Anda.

Gaya umum adalah untuk memiliki sekelompok folder di bagian atas repositori Anda disebut tags, branches, trunk, dll - yang memungkinkan Anda untuk menyalin Anda seluruh trunk(atau sub-set) ke dalam tagsdan / atau branchesfolder. Jika Anda memiliki lebih dari satu proyek, Anda mungkin ingin meniru struktur semacam ini di bawah setiap proyek:

Mungkin perlu waktu untuk membiasakan diri dengan konsep - tetapi berhasil - pastikan Anda (dan tim Anda) sudah jelas tentang konvensi yang akan Anda gunakan. Ini juga merupakan ide yang baik untuk memiliki konvensi penamaan yang baik - sesuatu yang memberi tahu Anda mengapa cabang / tag dibuat dan apakah itu masih sesuai - pertimbangkan cara pengarsipan cabang yang sudah usang.


211
"copy svn" memiliki keuntungan bahwa ia akan menyimpan sejarah sebelum percabangan. Menyalin secara manual ke direktori lain tidak akan.
WhyNotHugo

5
Perhatikan juga bahwa biasanya merupakan ide yang buruk untuk menandai atau membuat subdirektori cabang "trunk". Hal ini membuat sulit untuk melacak subdirektori mana yang bercabang, dan sebagian besar alat akan bingung dengan cabang-cabang ini (misalnya beralih cabang akan berarti struktur direktori perubahan WC, yang akan membingungkan IDE dan membangun alat). Selalu cabang "trunk".
sleske

1
@ Sebenarnya Akan svn cpmenggunakan salinan murah, itu tidak menyalin file yang sebenarnya selama percabangan. Lihat svnbook.red-bean.com/en/1.1/ch04s02.html
Walty Yeung

607

Buat cabang baru menggunakan svn copyperintah sebagai berikut:

$ svn copy svn+ssh://host.example.com/repos/project/trunk \
           svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \
      -m "Creating a branch of project"

24
Selanjutnya gunakan svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .(jika Anda ingin mengganti checkout saat ini ke cabang baru) atau svn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH(jika Anda ingin memiliki cabang baru di direktori terpisah) untuk mulai bekerja pada cabang yang baru dibuat.
Jakub Narębski

3
Catatan: dalam beberapa kasus Anda harus menggunakan--parentsopsi dengansvn copy!
Jakub Narębski

1
untuk beberapa alasan saya menggunakan cmd ini dan itu tidak berhasil, tetapi ketika saya mengubah svn + ssh menjadi hanya https itu berhasil. Apakah saya melakukan kesalahan? apa arti dari svn + ssh? Terima kasih!
Aviel Gross

Anda harus membuat terlebih dahulu direktori baru di cabang Anda -> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m "buat direktori cabang untuk menampung semua cabang"
Silvio Troia

Jika saya menghilangkan -mopsi, ia mengatakan seperti svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist. Dengan -mitu dikatakan svn: E205009: Local, non-commit operations do not take a log message or revision properties. (Saya mengganti alamat, tetapi mereka memang ada, kecuali, ofc, direktori cabang baru, dan seluruh path + url yang SVN karena beberapa alasan digabungkan dalam kesalahan) .
Hi-Angel

33

Jika repo Anda tersedia melalui https, Anda dapat menggunakan perintah ini untuk ...

svn copy https://host.example.com/repos/project/trunk \
       https://host.example.com/repos/project/branches/branch-name \
  -m "Creating a branch of project"

26
svn cp /trunk/ /branch/NEW_Branch

Jika Anda memiliki beberapa perubahan lokal di trunk kemudian gunakan Rsyncuntuk menyinkronkan perubahan

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch

2
Tidak ada persyaratan untuk menggunakan rsynccara ini. svn cpjuga akan menyalin perubahan lokal apa pun.
Kevin Panko

@KevinPanko Tidak akan menyalin perubahan yang tidak dikomit.
Parag Bafna

4
Itu, dikonfirmasi dengan svn, versi 1.8.5
Kevin Panko

Saya bertanya-tanya tentang ini. Ini sepertinya pilihan yang paling mudah, dan AFAI ingat, inilah yang saya lakukan ketika saya bekerja dengan SVN 3 tahun lalu. Tetapi apa perbedaan antara ini dan yang bekerja langsung dengan url server?
oligofren

@KevinPanko Apakah Anda tahu apakah itu juga menyalin file yang baru dibuat?
John Hamilton

16

Misalkan Anda ingin membuat cabang dari nama trunk (sebagai "TEST") kemudian gunakan:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST

14

Biasanya Anda akan menyalinnya ke svn + ssh: //host.example.com/repos/project/branches/mybranch sehingga Anda dapat menyimpan beberapa cabang di repositori, tetapi sintaksis Anda valid.

Berikut ini beberapa saran tentang cara mengatur tata letak repositori Anda .


13

Tip teratas untuk pengguna SVN baru; ini mungkin membantu sedikit dengan mendapatkan URL yang benar dengan cepat.

Jalankan svn infountuk menampilkan informasi yang berguna tentang cabang yang saat ini ditutup.

URL seharusnya (jika Anda menjalankan svn di folder root) memberi Anda URL yang harus Anda salin.

Juga untuk beralih ke cabang yang baru dibuat, gunakan svn switchperintah:

svn switch http://my.repo.url/myrepo/branches/newBranchName

3
Anda juga dapat menggunakan ^ di tempat Repositori Root
chim

11

Jika Anda bahkan berencana untuk menggabungkan cabang Anda, saya sangat menyarankan Anda melihat ini:

Svnmerge.py

Saya mendengar Subversion 1.5 membangun lebih banyak pelacakan gabungan, saya tidak punya pengalaman dengan itu. Proyek saya ada di 1.4.x dan svnmerge.py adalah penyelamat hidup!


6
  • Buat folder baru di luar proyek Anda saat ini. Anda bisa memberikannya nama apa saja. (Contoh: Anda memiliki checkout untuk proyek bernama "Kustomisasi". Dan ada banyak proyek, seperti "Project1", "Project2" .... Dan Anda ingin membuat cabang "Project1". Jadi pertama buka " Kustomisasi ", klik kanan dan buat folder baru dan beri nama," Project1Branch ").
  • Klik kanan pada "Myproject1" .... .... TortoiseSVN -> Branch / Tag.
  • Pilih copy pekerjaan.
  • Buka browser .... Tepat paralel pada "Ke URL".
  • Pilih kustomisasi ..... klik kanan lalu Tambah Folder. dan buka folder yang telah Anda buat. Ini dia "Project1Branch". Sekarang klik tombol OK untuk menambahkan.
  • Periksa kas baru ini.
  • Sekali lagi buka proyek Anda cabang mana yang ingin Anda buat. Klik kanan TorotoiseSVN -> cabang / tag. Kemudian pilih copy pekerjaan. Dan Anda bisa memberikan URL sebagai nama cabang Anda. seperti {alamat IP Anda / svn / AAAA / Kustomisasi / Project1Branch}. Dan Anda dapat mengatur nama di URL sehingga akan membuat folder dengan nama ini saja. Seperti {alamat IP Anda / svn / AAAA / Kustomisasi / Project1Branch / MyProject1Branch}.
  • Tekan tombol OK. Sekarang Anda dapat melihat log di ... copy pekerjaan Anda akan disimpan di cabang Anda.
  • Sekarang Anda dapat memeriksa ... dan membiarkan Anda menikmati pekerjaan Anda. :)

-1

Di bawah ini adalah langkah-langkah untuk membuat cabang dari trunk menggunakan TortoiseSVN di mesin windows. Ini jelas membutuhkan klien TortoiseSVN untuk diinstal.

  1. Klik kanan pada trunk yang diperbarui dari mesin windows lokal
  2. Pilih TortoiseSVN
  3. Klik cabang / Tag
  4. Pilih jalur To di repositori SVN. Perhatikan bahwa URL tujuan diperbarui sesuai dengan jalur dan nama cabang yang diberikan
  5. Jangan membuat folder di dalam cabang di browser repositori
  6. Tambahkan jalur cabang. Sebagai contoh, cabang /
  7. Tambahkan pesan log yang bermakna untuk referensi Anda
  8. Klik Ok, ini membuat folder baru di sistem lokal
  9. Periksa cabang yang dibuat ke folder baru
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.