ฉันจะสร้างสาขาได้อย่างไร


คำตอบ:


349

การแตกกิ่งก้านสาขาในการโค่นล้มถูกอำนวยความสะดวกด้วยเครื่องมือคัดลอกที่เบาและมีประสิทธิภาพมาก

การแตกแขนงและการแท็กมีประสิทธิภาพเหมือนกัน เพียงคัดลอกทั้งโฟลเดอร์ในที่เก็บไปยังที่อื่นในที่เก็บโดยใช้svn copyคำสั่ง

โดยทั่วไปนี่หมายความว่าโดยการประชุมสิ่งที่คัดลอกโฟลเดอร์หมายถึง - ไม่ว่าจะเป็นการสำรองข้อมูลแท็กสาขาหรืออะไรก็ตาม ขึ้นอยู่กับว่าคุณต้องการคิดอย่างไร (โดยปกติขึ้นอยู่กับเครื่องมือ SCM ที่คุณเคยใช้ในอดีต) คุณต้องตั้งค่าโครงสร้างโฟลเดอร์ภายในที่เก็บของคุณเพื่อรองรับสไตล์ของคุณ

รูปแบบทั่วไปจะมีพวงของโฟลเดอร์ที่ด้านบนของพื้นที่เก็บข้อมูลของคุณเรียกว่าtags, branches, trunkฯลฯ - ที่ช่วยให้คุณสามารถคัดลอกของคุณทั้งหมดtrunk(หรือชุดย่อย) ลงในtagsและ / หรือbranchesโฟลเดอร์ หากคุณมีมากกว่าหนึ่งโครงการคุณอาจต้องการจำลองโครงสร้างชนิดนี้ในแต่ละโครงการ:

อาจใช้เวลาสักครู่เพื่อทำความคุ้นเคยกับแนวคิด - แต่ใช้งานได้ - ตรวจสอบให้แน่ใจว่าคุณ (และทีมของคุณ) มีความชัดเจนในการประชุมที่คุณจะใช้ เป็นความคิดที่ดีที่จะมีแบบแผนการตั้งชื่อที่ดีซึ่งเป็นสิ่งที่บอกคุณว่าเหตุใดจึงสร้างสาขา / แท็กและเหมาะสมหรือไม่ - พิจารณาวิธีเก็บสาขาที่ล้าสมัย


211
"svn copy" มีข้อได้เปรียบที่จะเก็บประวัติก่อนการแตกแขนง การคัดลอกไปยังไดเรกทอรีอื่นด้วยตนเองจะไม่
WhyNotHugo

5
นอกจากนี้โปรดทราบว่าปกติแล้วคุณควรติดแท็กหรือไดเรกทอรีย่อยของ "trunk" สิ่งนี้ทำให้ยากต่อการติดตามว่าไดเรกทอรีย่อยใดถูกแยกย่อยและเครื่องมือส่วนใหญ่จะสับสนโดยสาขาเหล่านี้ (เช่นการสลับสาขาจะหมายถึงโครงสร้างไดเรกทอรีของการเปลี่ยนแปลง WC ซึ่งจะทำให้ IDEs และเครื่องมือสร้างสับสน) เพียงแค่แยก "ลำตัว" เสมอ
sleske

1
@Will svn cpจะใช้สำเนาถูกจริงแต่จะไม่คัดลอกไฟล์จริงระหว่างการแยก ดูsvnbook.red-bean.com/en/1.1/ch04s02.html
Walty Yeung

607

สร้างสาขาใหม่โดยใช้svn copyคำสั่งดังต่อไปนี้:

$ 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
ใช้ครั้งถัดไปsvn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .(ถ้าคุณต้องการเปลี่ยนเช็คเอาต์ปัจจุบันเป็นสาขาใหม่) หรือsvn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH(ถ้าคุณต้องการมีสาขาใหม่ในไดเรกทอรีแยก) เพื่อเริ่มทำงานกับสาขาที่สร้างขึ้นใหม่
Jakub Narębski

3
หมายเหตุ:ในบางกรณีคุณจะต้องใช้--parentsตัวเลือกด้วยsvn copy!
Jakub Narębski

1
ด้วยเหตุผลบางอย่างฉันใช้ cmd นี้และมันใช้งานไม่ได้ แต่เมื่อฉันเปลี่ยน svn + ssh เป็น https มันก็ใช้งานได้ ฉันทำอะไรผิดหรือเปล่า? ความหมายของ svn + ssh คืออะไร? ขอบคุณ!
Aviel Gross

คุณต้องสร้างไดเรกทอรีใหม่เป็นครั้งแรกในสาขาของคุณ -> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m "สร้างไดเรกทอรีของสาขาเพื่อเก็บสาขาทั้งหมด"
Silvio Troia

ถ้าผมละเว้นตัวเลือกมันบอกว่าเหมือน-m svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not existด้วยความที่มันพูดว่า-m (ฉันแทนที่อยู่ แต่พวกเขาทำอยู่ยกเว้น Ofc ไดเรกทอรีสาขาใหม่และเส้นทางทั้งหมด + URL ที่ SVN ด้วยเหตุผลบางอย่างรวมอยู่ในข้อผิดพลาด) svn: E205009: Local, non-commit operations do not take a log message or revision properties
Hi-Angel

33

หาก repo ของคุณพร้อมใช้งานผ่าน https คุณสามารถใช้คำสั่งนี้เพื่อสาขา ...

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

หากคุณมีการเปลี่ยนแปลงในเครื่องในลำตัวRsyncให้ใช้เพื่อซิงค์การเปลี่ยนแปลง

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

2
ไม่จำเป็นต้องใช้rsyncวิธีนี้ svn cpจะคัดลอกการเปลี่ยนแปลงในท้องถิ่นใด ๆ
Kevin Panko

@KevinPanko มันจะไม่คัดลอกการเปลี่ยนแปลงที่ไม่มีข้อผูกมัด
Parag Bafna

4
มันยืนยันด้วย svn, เวอร์ชั่น 1.8.5
Kevin Panko

ฉันสงสัยเกี่ยวกับเรื่องนี้ ดูเหมือนจะเป็นตัวเลือกที่ง่ายที่สุดและ AFAI ก็จำได้ว่านี่คือสิ่งที่ฉันทำเมื่อฉันทำงานกับ SVN เมื่อ 3 ปีก่อน แต่ข้อแตกต่างระหว่างสิ่งนี้กับสิ่งที่ทำงานโดยตรงกับ URL ของเซิร์ฟเวอร์คืออะไร
oligofren

@KevinPanko คุณรู้ไหมว่ามันเป็นการคัดลอกไฟล์ที่สร้างขึ้นใหม่หรือไม่?
John Hamilton

16

สมมติว่าคุณต้องการสร้างสาขาจากชื่อลำตัว (เป็น "ทดสอบ") จากนั้นใช้:

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

14

โดยปกติคุณต้องการคัดลอกไปยัง svn + ssh: //host.example.com/repos/project/branches/mybranch เพื่อให้คุณสามารถเก็บหลาย ๆ สาขาในที่เก็บ แต่ไวยากรณ์ของคุณถูกต้อง

ต่อไปนี้เป็นคำแนะนำเกี่ยวกับวิธีการตั้งค่ารูปแบบการเก็บข้อมูลของคุณ


13

เคล็ดลับยอดนิยมสำหรับผู้ใช้ SVN ใหม่ สิ่งนี้อาจช่วยเล็กน้อยในการรับ URL ที่ถูกต้องอย่างรวดเร็ว

วิ่ง svn infoเพื่อแสดงข้อมูลที่เป็นประโยชน์เกี่ยวกับสาขาเช็คเอาต์ปัจจุบัน

URL ควร (หากคุณเรียกใช้ svn ในโฟลเดอร์รูท) ให้ URL ที่คุณต้องการคัดลอก

นอกจากนี้หากต้องการสลับไปยังสาขาที่สร้างขึ้นใหม่ให้ใช้svn switchคำสั่ง:

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

3
นอกจากนี้คุณยังสามารถใช้ ^ แทน Repository Root
chim

11

หากคุณวางแผนที่จะรวมสาขาของคุณฉันขอแนะนำให้คุณดูที่:

Svnmerge.py

ฉันได้ยิน Subversion 1.5 สร้างการติดตามการผสานมากขึ้นฉันไม่มีประสบการณ์กับเรื่องนั้น โครงการของฉันคือ 1.4.x และ svnmerge.py เป็นเครื่องมือช่วยชีวิต!


6
  • สร้างโฟลเดอร์ใหม่นอกโครงการปัจจุบันของคุณ คุณสามารถตั้งชื่อได้ (ตัวอย่าง: คุณมีการชำระเงินสำหรับโครงการที่ชื่อว่า "การปรับแต่ง" และมีหลายโครงการเช่น "Project1", "Project2" .... และคุณต้องการสร้างสาขาของ "Project1" ก่อนอื่นให้เปิด " การปรับแต่ง "คลิกขวาและสร้างโฟลเดอร์ใหม่และตั้งชื่อ" Project1Branch ")
  • คลิกขวาที่ "Myproject1" .... TortoiseSVN -> Branch / Tag
  • เลือกสำเนาการทำงาน
  • เปิดเบราว์เซอร์ .... ด้านขวาของขนานบน "ถึง URL"
  • เลือกการกำหนดเอง ..... คลิกขวาจากนั้นเพิ่มโฟลเดอร์ และไปยังโฟลเดอร์ที่คุณสร้างขึ้น นี่คือ "Project1Branch" ตอนนี้คลิกปุ่ม OK เพื่อเพิ่ม
  • ทำการเช็คเอาท์ของบ้านใหม่นี้
  • ไปที่โครงการของคุณอีกครั้งซึ่งสาขาที่คุณต้องการสร้าง คลิกขวาที่ TorotoiseSVN -> branch / tag จากนั้นเลือกสำเนาการทำงาน และคุณสามารถให้ URL เป็นชื่อสาขาของคุณ เช่น {ที่อยู่ IP ของคุณ / svn / AAAA / การปรับแต่ง / Project1Branch} และคุณสามารถตั้งชื่อใน URL เพื่อสร้างโฟลเดอร์ด้วยชื่อนี้เท่านั้น ชอบ {ที่อยู่ IP ของคุณ / svn / AAAA / การปรับแต่ง / Project1Branch / MyProject1Branch}
  • กดปุ่ม OK ตอนนี้คุณสามารถดูบันทึกใน ... สำเนาการทำงานของคุณจะถูกเก็บไว้ในสาขาของคุณ
  • ตอนนี้คุณสามารถตรวจสอบ ... และให้คุณเพลิดเพลินกับงานของคุณ :)

-1

ด้านล่างนี้เป็นขั้นตอนในการสร้างสาขาจากลำตัวโดยใช้ TortoiseSVN ในเครื่อง windows เห็นได้ชัดว่าต้องมีการติดตั้งไคลเอนต์ TortoiseSVN

  1. คลิกขวาที่ลำต้นที่อัปเดตจากเครื่อง windows ภายในเครื่อง
  2. เลือก TortoiseSVN
  3. คลิกที่สาขา / แท็ก
  4. เลือกเส้นทางถึงในที่เก็บ SVN โปรดทราบว่า URL ปลายทางได้รับการอัปเดตตามเส้นทางและชื่อสาขาที่ระบุ
  5. อย่าสร้างโฟลเดอร์ภายในสาขาในเบราว์เซอร์ที่เก็บ
  6. เพิ่มเส้นทางสาขา ตัวอย่างเช่นสาขา /
  7. เพิ่มข้อความบันทึกที่มีความหมายสำหรับการอ้างอิงของคุณ
  8. คลิกตกลงสิ่งนี้จะสร้างโฟลเดอร์ใหม่บนระบบโลคัล
  9. ชำระเงินสาขาที่สร้างไว้ในโฟลเดอร์ใหม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.