“ branch”,“ tag” และ“ trunk” หมายถึงอะไรในคลังข้อมูลการโค่นล้ม?


1193

ฉันเคยเห็นคำเหล่านี้มากมายรอบการโค่นล้ม (และฉันเดาว่าที่เก็บทั่วไป) การอภิปราย
ฉันใช้SVNสำหรับโครงการของฉันในช่วงไม่กี่ปีที่ผ่านมา แต่ฉันไม่เคยเข้าใจแนวคิดทั้งหมดของไดเรกทอรีเหล่านี้

พวกเขาหมายถึงอะไร?


29
ต่อไปนี้เป็นบทความที่ดีที่ฉันได้อธิบายเกี่ยวกับวิธีใช้ / เวลาในการใช้ trunk, branch และ tags ฉันไม่เคยใช้การควบคุมแหล่งที่มาก่อน แต่บทความนี้ทำให้มันง่ายสำหรับ noob อย่างที่ฉันเข้าใจ แบบวันต่อวันกับการโค่นล้ม
badmoon

คำตอบ:


910

อืมฉันไม่แน่ใจว่าฉันเห็นด้วยกับแท็กของนิคที่คล้ายกับสาขา แท็กเป็นเพียงเครื่องหมาย

  • Trunkจะเป็นตัวหลักของการพัฒนาโดยมีจุดเริ่มต้นตั้งแต่เริ่มโครงการจนถึงปัจจุบัน

  • สาขาจะเป็นสำเนาของรหัสที่ได้จากจุดที่แน่นอนในลำต้นที่ใช้สำหรับการใช้การเปลี่ยนแปลงที่สำคัญกับรหัสในขณะที่รักษาความสมบูรณ์ของรหัสในลำต้น หากการเปลี่ยนแปลงที่สำคัญทำงานตามแผนพวกเขามักจะรวมกลับเข้าไปในลำต้น

  • แท็กจะเป็นจุดในเวลาที่ลำต้นหรือสาขาที่คุณต้องการรักษา เหตุผลหลักสองประการในการสงวนรักษาคือสิ่งนี้เป็นซอฟต์แวร์รุ่นใหญ่ไม่ว่าจะเป็น alpha, beta, RC หรือ RTM หรือนี่คือจุดที่เสถียรที่สุดของซอฟต์แวร์ก่อนที่จะทำการแก้ไขครั้งใหญ่บนลำตัว

ในโครงการที่มาเปิดสาขาที่สำคัญที่ไม่ได้รับการยอมรับในลำต้นโดยผู้มีส่วนได้เสียโครงการจะกลายเป็นฐานสำหรับงา - เช่นโครงการแยกกันโดยสิ้นเชิงที่ใช้แหล่งกำเนิดที่มีรหัสแหล่งข้อมูลอื่น ๆ

ทรีย่อยของแท็กและแท็กแตกต่างจากลำต้นในวิธีต่อไปนี้:

การโค่นล้มช่วยให้ sysadmins สร้างhook hookซึ่งถูกเรียกใช้สำหรับการดำเนินการเมื่อมีเหตุการณ์บางอย่างเกิดขึ้น เช่นกระทำการเปลี่ยนแปลงที่เก็บ มันเป็นเรื่องธรรมดามากสำหรับการดำเนินการตามที่เก็บ Subversion ทั่วไปเพื่อรักษาเส้นทางใด ๆ ที่มี "/ tag /" ที่จะป้องกันการเขียนหลังจากการสร้าง; ผลลัพธ์สุทธิคือแท็กที่สร้างขึ้นครั้งเดียวจะไม่เปลี่ยนรูป (อย่างน้อยกับผู้ใช้ "ธรรมดา") สิ่งนี้ทำผ่านทางเบ็ดสคริปต์ซึ่งบังคับใช้ไม่สามารถเปลี่ยนแปลงได้โดยการป้องกันการเปลี่ยนแปลงเพิ่มเติมถ้าแท็กเป็นโหนดแม่ของวัตถุที่เปลี่ยนแปลง

การโค่นล้มยังเพิ่มฟีเจอร์ตั้งแต่รุ่น 1.5 ที่เกี่ยวข้องกับ "การติดตามการรวมสาขา" เพื่อให้การเปลี่ยนแปลงที่มุ่งมั่นในสาขาสามารถรวมกลับเข้าไปในลำต้นได้ด้วยการสนับสนุนการรวมที่เพิ่มขึ้น "อัจฉริยะ"


284
ความสับสนกับแท็กและกิ่งก้านก็คือใน svn ไม่มีความแตกต่างระหว่างพวกเขานอกจากชื่อของไดเรกทอรี ใน svn คุณสามารถยอมรับการเปลี่ยนแปลงแท็กและในความเป็นจริงมันเป็นการยากที่จะป้องกันสิ่งนี้ VCS อื่น ๆ ส่วนใหญ่ถือว่าแท็กเป็นสแนปชอตที่ไม่เปลี่ยนรูป (จุดในเวลา)
Ken Liu

4
Tagsไดเรกทอรีมักจะใช้สำหรับการทดสอบเหตุการณ์สำคัญและการตรวจสอบโดยผู้ใช้ปกติ นี่จะเป็นสถานที่ที่ดีสำหรับวางต้นแบบเช่นกัน (แค่ความคิดบางอย่างที่อยู่บนหัวของฉัน)
Jeff Noel

6
@KenLiu มีตะขอที่สามารถทำให้แท็กไม่เปลี่ยนรูปได้ นั่นคือคุณสามารถสร้างและชำระเงินแท็ก แต่ไม่ทำการเปลี่ยนแปลงใด ๆ แน่นอนแท็กที่เป็นเพียงส่วนหนึ่งของที่เก็บหมายความว่ามีประวัติแบบเต็ม หากมีคนเปลี่ยนแท็กคุณสามารถติดตามสิ่งนั้นและเหตุผลได้ ใน VCS จำนวนมากหากคุณแก้ไขแท็กอาจไม่มีวิธีใดที่จะรู้ได้
David W.

3
บางทีสาขาที่มีเสถียรภาพควรจะกล่าวถึง: การเปลี่ยนแปลงที่ทำมีปกติไม่รวมกลับเข้ามาในลำต้น
Wolf

4
ความเข้าใจของฉันคือว่าใน "โลกที่สมบูรณ์แบบ" การพัฒนาไม่ควรเกิดขึ้นในลำตัวลำต้นควรเป็นรหัสที่แน่นอนที่มีชีวิตหรือรหัสที่กำลังจะถูกปล่อยสู่ชีวิต เช่นนี้จะทำให้สาขาเป็นส่วนสำคัญในการพัฒนา
MikeT

556

สิ่งแรกคือ @AndrewFinnell และ @KenLiu ชี้ให้เห็นใน SVN ไดเรกทอรีชื่อตัวเองไม่มีความหมายอะไร - "ลำตัวสาขาและแท็ก" เป็นเพียงการประชุมทั่วไปที่ใช้โดยที่เก็บส่วนใหญ่ ไม่ทุกโครงการใช้ไดเรกทอรีทั้งหมด (เป็นเรื่องปกติพอสมควรที่จะไม่ใช้ "แท็ก" เลย) และอันที่จริงไม่มีอะไรหยุดคุณจากการเรียกพวกเขาทุกอย่างที่คุณต้องการ

ฉันจะอธิบายสถานการณ์การใช้งานทั่วไปของกิ่งและแท็กและให้ตัวอย่างสถานการณ์ว่าจะใช้งานอย่างไร

  • Trunk : พื้นที่พัฒนาหลัก นี่คือที่วางจำหน่ายครั้งใหญ่ครั้งต่อไปของคุณและมีคุณสมบัติใหม่ล่าสุดทั้งหมด

  • สาขา : ทุกครั้งที่คุณปล่อยรุ่นใหญ่มันจะสร้างสาขาขึ้น สิ่งนี้ช่วยให้คุณสามารถแก้ไขข้อผิดพลาดและสร้างรีลีสใหม่โดยไม่ต้องปล่อยฟีเจอร์ใหม่ล่าสุด - อาจยังไม่เสร็จหรือยังไม่ทดลอง -

  • แท็ก : ทุกครั้งที่คุณปล่อยเวอร์ชัน (ปล่อยครั้งสุดท้าย, รีลีสผู้สมัคร (RC) และเบต้า) คุณสร้างแท็กสำหรับมัน สิ่งนี้จะช่วยให้คุณทำสำเนาของรหัส ณ เวลานั้นเหมือนที่อยู่ในสถานะนั้นทำให้คุณสามารถย้อนกลับและสร้างข้อผิดพลาดใด ๆ หากจำเป็นในรุ่นที่ผ่านมาหรือปล่อยรุ่นที่ผ่านมาเหมือนเดิม กิ่งก้านและแท็กใน SVN นั้นมีน้ำหนักเบา - บนเซิร์ฟเวอร์มันไม่ได้ทำสำเนาเต็มของไฟล์เพียงแค่เครื่องหมายบอกว่า "ไฟล์เหล่านี้ถูกคัดลอกในการแก้ไขนี้" ซึ่งใช้เวลาเพียงไม่กี่ไบต์ เมื่อคำนึงถึงเรื่องนี้คุณไม่ควรกังวลเกี่ยวกับการสร้างแท็กสำหรับรหัสที่ออกจำหน่ายใด ๆ อย่างที่ฉันได้กล่าวไปแล้วก่อนหน้านี้แท็กมักจะถูกละเว้นและแทนที่รายการเปลี่ยนแปลงหรือเอกสารอื่น ๆ จะอธิบายหมายเลขการแก้ไขเมื่อมีการวางจำหน่าย


ตัวอย่างเช่นสมมติว่าคุณเริ่มโครงการใหม่ คุณเริ่มทำงานใน "trunk" ในสิ่งที่ในที่สุดจะออกเป็นรุ่น 1.0

  • trunk / - เวอร์ชันการพัฒนาเร็ว ๆ นี้จะเป็น 1.0
  • สาขา / - ​​ว่างเปล่า

เมื่อ 1.0.0 เสร็จแล้วคุณแยกสาขาไปยังสาขา "1.0" ใหม่และสร้างแท็ก "1.0.0" ตอนนี้ทำงานกับสิ่งที่ในที่สุดจะเป็น 1.1 ยังคงอยู่ในลำตัว

  • trunk / - เวอร์ชันการพัฒนาเร็ว ๆ นี้จะเป็น 1.1
  • Branch / 1.0 - 1.0.0 release
  • แท็ก / 1.0.0 - 1.0.0 รุ่นที่วางจำหน่าย

คุณพบข้อบกพร่องบางอย่างในรหัสและแก้ไขในลำตัวแล้วรวมการแก้ไขไปยังสาขา 1.0 นอกจากนี้คุณยังสามารถทำสิ่งที่ตรงกันข้ามและแก้ไขข้อบกพร่องในสาขา 1.0 แล้วรวมพวกมันกลับไปที่ลำตัว แต่โดยทั่วไปโครงการมักจะผสานกับการรวมทางเดียวเท่านั้นเพื่อลดโอกาสที่จะหายไป บางครั้งข้อผิดพลาดสามารถแก้ไขได้ใน 1.0 เพราะล้าสมัยใน 1.1 ไม่สำคัญ: คุณต้องการให้แน่ใจว่าคุณไม่ได้ปล่อย 1.1 ด้วยข้อผิดพลาดเดียวกับที่ได้รับการแก้ไขใน 1.0

  • trunk / - เวอร์ชันการพัฒนาเร็ว ๆ นี้จะเป็น 1.1
  • สาขา / 1.0 - กำลังจะเปิดตัว 1.0.1
  • แท็ก / 1.0.0 - 1.0.0 รุ่นที่วางจำหน่าย

เมื่อคุณพบข้อบกพร่องมากพอ (หรืออาจเป็นหนึ่งในข้อบกพร่องที่สำคัญ) คุณตัดสินใจที่จะทำรุ่น 1.0.1 ดังนั้นคุณสร้างแท็ก "1.0.1" จากสาขา 1.0 และปล่อยโค้ด ณ จุดนี้ลำต้นจะมีสิ่งที่จะเป็น 1.1 และสาขา "1.0" มีรหัส 1.0.1 ครั้งต่อไปที่คุณปล่อยการอัปเดตเป็น 1.0 จะเป็น 1.0.2

  • trunk / - เวอร์ชันการพัฒนาเร็ว ๆ นี้จะเป็น 1.1
  • กิ่ง / 1.0 - กำลังจะมาถึง 1.0.2
  • แท็ก / 1.0.0 - 1.0.0 รุ่นที่วางจำหน่าย
  • แท็ก / 1.0.1 - 1.0.1 เวอร์ชั่นที่วางจำหน่าย

ในที่สุดคุณก็พร้อมที่จะปล่อย 1.1 แต่คุณต้องการเบต้าก่อน ในกรณีนี้คุณอาจจะทำสาขา "1.1" และแท็ก "1.1beta1" ทีนี้ลองหาว่าอะไรจะเป็น 1.2 (หรืออาจจะ 2.0) ต่อเนื่อง แต่การทำงานที่ 1.1 จะดำเนินต่อไปในสาขา "1.1"

  • trunk / - เวอร์ชันการพัฒนาเร็ว ๆ นี้จะเป็น 1.2
  • กิ่ง / 1.0 - กำลังจะมาถึง 1.0.2
  • สาขา / 1.1 - กำลังจะมาถึง 1.1.0
  • แท็ก / 1.0.0 - 1.0.0 รุ่นที่วางจำหน่าย
  • แท็ก / 1.0.1 - 1.0.1 เวอร์ชั่นที่วางจำหน่าย
  • แท็ก / 1.1beta1 - รุ่นเบต้า 1.1 beta 1

เมื่อคุณปล่อย 1.1 ขั้นสุดท้ายคุณจะทำแท็ก "1.1" จากสาขา "1.1"

คุณยังสามารถรักษา 1.0 หากคุณต้องการแก้ไขข้อผิดพลาดการย้ายระหว่างสามสาขา (1.0, 1.1 และลำตัว) สิ่งที่สำคัญอย่างยิ่งสำหรับซอฟต์แวร์หลักทุกรุ่นที่คุณมีอยู่คุณมีสาขาที่มีรหัสเวอร์ชันล่าสุดสำหรับเวอร์ชันนั้น


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

  • trunk / - เวอร์ชันการพัฒนาเร็ว ๆ นี้จะเป็น 1.2
  • สาขา / 1.1 - กำลังจะมาถึง 1.1.0
  • branch / ui-rewrite - สาขาคุณลักษณะทดลอง

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


โปรดทราบว่ารูปแบบการกำหนดเวอร์ชันที่ฉันใช้ที่นี่เป็นหนึ่งในหลาย ๆ บางทีมจะทำการแก้ไขข้อผิดพลาด / การบำรุงรักษารุ่น 1.1, 1.2 และอื่น ๆ และการเปลี่ยนแปลงที่สำคัญเช่น 1.x, 2.x ฯลฯ การใช้งานที่นี่เหมือนกัน แต่คุณอาจตั้งชื่อสาขา "1" หรือ "1 .x "แทน" 1.0 "หรือ" 1.0.x " (นอกจากนี้การกำหนดเวอร์ชันแบบ semanticเป็นแนวทางที่ดีในการทำหมายเลขรุ่น)


6
@baruch - นั่นผิดทั้งหมด แท็กมีน้ำหนักเบาและ (เท่าที่เกี่ยวข้องกับการโค่นล้มเอง) เหมือนกับกิ่งไม้
Josh Kelley

7
รักรายละเอียดการใช้งาน ขอบคุณ @gregmac
Jeromy French

2
ฉันสามารถขอใบเสนอราคาในตำแหน่งที่ระบุว่าแท็ก / สาขามีน้ำหนักเบาได้หรือไม่ ดูเหมือนจะไม่เป็นเช่นนั้น ..
Cardin Lee JH

3
นี่ควรเป็นคำตอบที่ได้รับการยอมรับดีกว่า ^^
Nam G VU

4
@Cardin ฉันยังไม่มีการอ้างอิงในตอนนี้ แต่สิ่งสำคัญที่ควรทราบคือแท็กมีน้ำหนักเบาบนเซิร์ฟเวอร์ แต่ไม่ใช่ไคลเอ็นต์ หากคุณชำระเงินแท็กทั้งหมดคุณจะได้รับสำเนาจำนวนมาก อย่างไรก็ตามหากคุณดูขนาดพื้นที่เก็บข้อมูลบนเซิร์ฟเวอร์จะเพิ่มขึ้นเพียงไม่กี่ไบต์ต่อแท็ก นี่คือเหตุผลที่คุณไม่ควรเช็กเอาต์ไดเรกทอรีรูท
gregmac

97

นอกจากสิ่งที่ Nick ได้กล่าวไว้คุณสามารถหาข้อมูลเพิ่มเติมได้ที่Streamed Lines: รูปแบบการแตกแขนงเพื่อการพัฒนาซอฟต์แวร์แบบขนาน

ป้อนคำอธิบายรูปภาพที่นี่

ในรูปนี้mainคือลำต้นrel1-maintเป็นสาขาและ1.0เป็นแท็ก


1
@ เขาอาจเป็นได้ - แผนภาพนั้นค่อนข้างธรรมดาโดยไม่คำนึงถึงเครื่องมือ SCM ทั้งหมดใช้คำต่างกัน แต่มีแนวคิดเดียวกันไม่มีความแตกต่างระหว่าง trunk และ Main; หรือลำตัวและปริญญาโท แผนภาพนั้นแสดงให้เห็นว่า บริษัท ปัจจุบันของฉันใช้ SVN อย่างไร
gbjbaanb

@gbjbaanb ขอบคุณสำหรับการแบ่งปัน ... และแท็กดูเหมือนจะไม่ได้รับการตอบคำถาม มันเป็นเรื่องบังเอิญแท้ๆ (เช่นใน บริษัท ปัจจุบันของคุณ) ที่ไม่มีการรวมกันจากหลักไปยังจากสาขาที่ได้รับการบำรุงรักษา?
Wolf

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

75

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

  • Trunkเป็นสาขาหลักที่แนะนำโดยการโค่นล้มแต่คุณไม่จำเป็นต้องสร้างมันขึ้นมา คุณสามารถเรียกมันว่า 'หลัก' หรือ 'รุ่น' หรือไม่มีเลยก็ได้!

  • สาขาแสดงถึงความพยายามในการพัฒนา ไม่ควรตั้งชื่อตามแหล่งข้อมูล (เช่น 'vonc_branch') แต่หลัง:

    • วัตถุประสงค์ 'myProject_dev' หรือ 'myProject_Merge'
    • ขอบเขตการเผยแพร่ 'myProjetc1.0_dev'or myProject2.3_Merge' หรือ 'myProject6..2_Patch1' ...
  • แท็กคือสแน็ปช็อตของไฟล์เพื่อกลับไปสู่สถานะนั้นได้อย่างง่ายดาย ปัญหาคือว่าแท็กและสาขาเดียวกันในการโค่นล้ม และฉันขอแนะนำวิธีการหวาดระแวง:

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

แท็กถือเป็นที่สิ้นสุด เนื้อหาไม่ควรเปลี่ยนแปลง ไม่เคย เคย คุณลืมบรรทัดในบันทึกย่อประจำรุ่นหรือไม่? สร้างแท็กใหม่ เลิกใช้แล้วหรือลบอันเก่าออก

ตอนนี้ฉันอ่านมากเกี่ยวกับ "การรวมกลับเช่นนี้ในสาขาดังกล่าวและจากนั้นในที่สุดในสาขาลำต้น" ที่เรียกว่าขั้นตอนการทำงานผสานและมีอะไรที่บังคับใช้ที่นี่ มันไม่ได้เป็นเพราะคุณมีสาขาลำต้นที่คุณต้องผสานกลับอะไร

โดยการประชุมสาขาลำต้นสามารถเป็นตัวแทนของสถานะปัจจุบันของการพัฒนาของคุณ แต่สำหรับโครงการลำดับง่าย ๆ นั่นคือโครงการที่มี:

  • ไม่มีการพัฒนา 'ล่วงหน้า' (สำหรับการเตรียมเวอร์ชันถัดไปที่แสดงถึงการเปลี่ยนแปลงที่ไม่เข้ากันกับการพัฒนา 'ลำตัว' ในปัจจุบัน)
  • ไม่มีการปรับโครงสร้างครั้งใหญ่ (สำหรับการทดสอบทางเลือกทางเทคนิคใหม่)
  • ไม่มีการบำรุงรักษาในระยะยาวของรีลีสก่อนหน้า

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


38

ใน SVN แท็กและสาขานั้นคล้ายกันมาก

Tag = ชิ้นส่วนที่กำหนดในเวลาปกติจะใช้สำหรับเผยแพร่

Branch = ยังเป็นส่วนที่กำหนดในเวลาที่การพัฒนาสามารถดำเนินต่อไปโดยปกติจะใช้สำหรับเวอร์ชันหลักเช่น 1.0, 1.5, 2.0, ฯลฯ จากนั้นเมื่อคุณปล่อยแท็กสาขา สิ่งนี้ช่วยให้คุณสามารถสนับสนุนการผลิตต่อไปได้ในขณะที่เดินหน้าต่อไปด้วยการทำลายการเปลี่ยนแปลงในลำ

Trunk = พื้นที่ทำงานของการพัฒนานี่คือที่ที่การพัฒนาทั้งหมดควรจะเกิดขึ้นจากนั้นเปลี่ยนการผสานกลับจากการออกของสาขา


30

พวกเขาไม่มีความหมายที่เป็นทางการใด ๆ โฟลเดอร์เป็นโฟลเดอร์สำหรับ SVN พวกเขาเป็นวิธีที่ได้รับการยอมรับโดยทั่วไปในการจัดระเบียบโครงการของคุณ

  • ลำตัวเป็นที่ที่คุณเก็บสายการพัฒนาหลักไว้ โฟลเดอร์ branch เป็นที่ที่คุณอาจสร้าง, branch, ซึ่งยากที่จะอธิบายในโพสต์สั้น ๆ

  • สาขาคือสำเนาของชุดย่อยของโครงการที่คุณทำงานแยกจากลำต้น อาจเป็นเพราะการทดลองที่ไม่สามารถไปได้ทุกที่หรืออาจเป็นรุ่นถัดไปซึ่งคุณจะรวมกลับเข้าไปในลำต้นเมื่อมันเสถียร

  • และโฟลเดอร์แท็กสำหรับสร้างสำเนาที่เก็บแท็กของที่เก็บของคุณโดยปกติจะอยู่ที่จุดตรวจปล่อย

แต่อย่างที่ฉันบอกกับ SVN โฟลเดอร์คือโฟลเดอร์ branch, trunkและแท็กเป็นเพียงการประชุม

ฉันใช้คำว่า 'คัดลอก' อย่างอิสระ SVN ไม่ได้ทำสำเนาสิ่งต่าง ๆ ในที่เก็บจริง


13

ลำต้นเป็นสายการพัฒนาที่มีรหัสที่มาใหม่ล่าสุดและคุณลักษณะ มันควรจะมีการแก้ไขข้อบกพร่องล่าสุดในมันเช่นเดียวกับคุณสมบัติล่าสุดที่เพิ่มเข้าไปในโครงการ

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

แท็กเป็นภาพรวมของพื้นที่เก็บข้อมูลในเวลาใดเวลาหนึ่ง ไม่ควรพัฒนาสิ่งเหล่านี้ ส่วนใหญ่มักจะใช้เพื่อคัดลอกสิ่งที่เผยแพร่ให้กับลูกค้าเพื่อให้คุณสามารถเข้าถึงสิ่งที่ลูกค้าใช้งานได้ง่าย

นี่คือลิงก์ไปยังคำแนะนำที่ดีมากสำหรับที่เก็บ:

บทความใน Wikipedia นั้นก็ควรค่าแก่การอ่านด้วยเช่นกัน


12

ตอนนี้คือสิ่งที่เกี่ยวกับการพัฒนาซอฟต์แวร์ไม่มีความรู้ที่สอดคล้องกันเกี่ยวกับอะไรทุกคนดูเหมือนว่าจะมีวิธีของตัวเอง แต่นั่นเป็นเพราะมันเป็นวินัยที่ค่อนข้างเล็กอยู่แล้ว

นี่เป็นวิธีง่าย ๆ ของฉัน

trunk - ไดเรคทอรี trunk มีเนื้อหางานที่ได้รับการอนุมัติและผสานมากที่สุด ตรงกันข้ามกับสิ่งที่หลายคนสารภาพลำต้นของฉันเป็นเพียงงานที่สะอาดเรียบร้อยได้รับการอนุมัติไม่ใช่พื้นที่พัฒนา แต่เป็นพื้นที่ปล่อย

ในบางช่วงเวลาที่ลำตัวดูเหมือนว่าพร้อมที่จะปล่อยแล้วมันจะถูกแท็กและปล่อย

สาขา - ไดเรกทอรีของสาขาประกอบด้วยการทดลองและงานต่อเนื่อง ทำงานภายใต้สาขาอยู่ที่นั่นจนกว่าจะได้รับอนุมัติให้รวมเข้ากับลำต้น สำหรับฉันนี้เป็นพื้นที่ที่ทำงานทั้งหมดเสร็จแล้ว

ตัวอย่างเช่น: ฉันสามารถมีการวนซ้ำ -5สาขาสำหรับรอบที่ห้าของการพัฒนาเกี่ยวกับผลิตภัณฑ์, อาจจะเป็นสาขาต้นแบบ -9สำหรับรอบที่เก้าของการทดลองและอื่น ๆ

แท็ก - ไดเรกทอรีแท็กประกอบด้วยสแน็ปช็อตของกิ่งที่ได้รับการอนุมัติและการปล่อยลำต้น เมื่อใดก็ตามที่สาขาได้รับการอนุมัติให้รวมเข้าไปในลำต้นหรือปล่อยจากลำตัวสแน็ปช็อตของสาขาที่อนุมัติหรือปล่อยลำต้นจะทำภายใต้แท็ก

ฉันคิดว่ามีแท็กที่ฉันสามารถข้ามไปมาผ่านจุดที่น่าสนใจได้อย่างง่ายดาย


10

ฉันพบนี้กวดวิชาที่ดีเกี่ยวกับ SVN เมื่อผมมองขึ้นเว็บไซต์ของผู้เขียนของOpenCV 2 วิสัยทัศน์การใช้คอมพิวเตอร์โปรแกรมตำราและฉันคิดว่าฉันควรจะแบ่งปัน

เขามีการสอนวิธีใช้ SVN และวลี 'ลำตัว', 'แท็ก' และ 'สาขา' หมายถึงอะไร

อ้างโดยตรงจากการสอนของเขา:

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

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

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


9

ไดเรกทอรี trunk เป็นไดเรกทอรีที่คุณคุ้นเคยมากที่สุดเพราะถูกใช้เพื่อระงับการเปลี่ยนแปลงล่าสุด codebase หลักของคุณควรอยู่ในช่วงท้าย

ไดเรกทอรีสาขาสำหรับการถือสาขาของคุณสิ่งที่พวกเขาอาจจะ

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


9

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


8

Tag = ชิ้นส่วนที่กำหนดในเวลาปกติจะใช้สำหรับเผยแพร่

ฉันคิดว่านี่คือสิ่งที่คนทั่วไปหมายถึงด้วย "แท็ก" แต่ในการโค่นล้ม:

พวกเขาไม่มีความหมายที่เป็นทางการใด ๆ โฟลเดอร์เป็นโฟลเดอร์สำหรับ SVN

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

หรือบางทีฉันเพิ่งใช้CVSมานานเกินไป


อีกทางเลือกหนึ่งคือว่าสิ่งที่ตรงกันข้ามเป็นความจริงที่กำหนดแนวคิดของแท็กในรูปแบบวัตถุของการโค่นล้มจะเป็นนามธรรมในทิศทางตรงกันข้าม อย่างที่ฉันเดาคุณรู้ว่าการโค่นล้มเป็นปฏิกิริยาต่อ CVS ความพยายามที่จะ "ทำ CVS ให้ถูกต้อง" ฉันไม่พบการอ้างอิง แต่ผู้ออกแบบการโค่นล้มดั้งเดิมได้กล่าวว่าพวกเขาโยนแนวคิดของแท็ก 100% โดยเจตนาว่าความแตกต่างระหว่างกิ่งและแท็กนั้นเป็นปัญหาเชิงนโยบายอย่างแท้จริง หากทีมต้องการกำหนดนโยบายและแบบแผนด้านบนของโมเดลวัตถุของการโค่นล้มดังนั้นไม่ว่าจะเป็น นั่นคือสิ่งที่เรามีทุกวันนี้
Darryl

6

ฉันคิดว่าความสับสนบางอย่างมาจากความแตกต่างระหว่างแนวคิดของแท็กและการใช้งานใน SVN สำหรับ SVN แท็กเป็นสาขาซึ่งเป็นสำเนา การแก้ไขแท็กนั้นถือว่าผิดและเครื่องมือจริง ๆ เช่น TortoiseSVN จะเตือนคุณหากคุณพยายามแก้ไขอะไรด้วย ../tags/ .. ในพา ธ


5

ฉันไม่แน่ใจว่า 'แท็ก' คืออะไร แต่สาขาเป็นแนวคิดการควบคุมแหล่งที่พบได้บ่อย

โดยทั่วไปสาขาเป็นวิธีการทำงานกับการเปลี่ยนแปลงโค้ดโดยไม่มีผลกระทบกับ trunk สมมติว่าคุณต้องการเพิ่มคุณสมบัติใหม่ที่ค่อนข้างซับซ้อน คุณต้องการที่จะสามารถตรวจสอบการเปลี่ยนแปลงในขณะที่คุณทำมัน แต่ไม่ต้องการให้มันส่งผลกระทบต่อลำตัวจนกว่าคุณจะทำกับคุณสมบัติ

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

มีหลายรูปแบบที่คนใช้สำหรับสาขา หากคุณมีผลิตภัณฑ์ที่รองรับรุ่นใหญ่หลายรุ่นพร้อมกันโดยปกติแต่ละรุ่นจะเป็นสาขา ที่ทำงานฉันมีสาขา QA และสาขาการผลิต ก่อนปล่อยรหัสของเราไปยัง QA เรารวมการเปลี่ยนแปลงในสาขา QA แล้วนำไปใช้งานจากที่นั่น เมื่อปล่อยไปสู่การผลิตเรารวมจากสาขา QA ไปยังสาขาการผลิตดังนั้นเราจึงรู้ว่ารหัสที่ทำงานอยู่ในการผลิตนั้นเหมือนกับการทดสอบ QA

นี่คือรายการวิกิพีเดียในสาขาเนื่องจากพวกเขาอาจอธิบายสิ่งต่าง ๆ ได้ดีกว่าที่ฉันทำได้ :)


4

ลำตัว : หลังจากเสร็จสิ้นการวิ่งทุกครั้งเราก็ออกมาพร้อมกับผลิตภัณฑ์ที่สามารถเปลี่ยนแปลงได้บางส่วน รุ่นเหล่านี้จะถูกเก็บไว้ในหีบ

สาขา : รหัสการพัฒนาแบบขนานทั้งหมดสำหรับการวิ่งแต่ละครั้งจะถูกเก็บไว้ในสาขา

แท็ก : ทุกครั้งที่เราเปิดตัวผลิตภัณฑ์รุ่นเบต้าบางส่วนซึ่งสามารถแก้ไขได้เราจะสร้างแท็กให้ สิ่งนี้ทำให้เรามีรหัสที่มีอยู่ ณ เวลานั้นทำให้เราสามารถกลับไปที่สถานะนั้นถ้าจำเป็นในบางช่วงระหว่างการพัฒนา


นี่เป็นเวิร์กโฟลว์เฉพาะของคุณซึ่งไม่สามารถใช้งานได้โดยทั่วไป
Jason S

4

สำหรับคนที่คุ้นเคยกับ GIT ต้นแบบใน GIT จะเทียบเท่ากับ trunk ใน SVN

สาขาและแท็กมีคำศัพท์ที่เหมือนกันทั้งใน GIT และ SVN

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.