คุณจะวางไลบรารี่ต่าง ๆ ในการควบคุมเวอร์ชันได้อย่างไร? คุณใช้แท็กหรือไม่ หรือสาขา หรือวิธีอื่น


24

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

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

ตอนนี้ฉันเห็นหลายวิธีในการทำเช่นนี้ด้วยการควบคุมเวอร์ชัน แต่เนื่องจากฉันใหม่สำหรับมันฉันไม่ทราบว่าจะบำรุงรักษาได้ดีกว่า

วิธีที่ 1: ใช้แท็ก

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

วิธีที่ 2: เวอร์ชันการแยกสาขา

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

ดังนั้นกิ่งจะเป็นดังนี้:

                  v1.2.1  v1.2.2
                 /       /
 v1.0.0   v1.2.0---------     v2.0.0
/        /                   /
-------------------------------------- dev

วิธีนี้คุณจะมีสาขาสำหรับการอัปเดตทุกเวอร์ชั่นรอง (โปรดทราบว่าในกราฟข้างต้น v1.2.1 และ v1.2.2 หรือสร้างหลังจากปล่อย v2.0.0 ดังนั้นพวกเขาจึงไม่ได้เป็นส่วนหนึ่งของการพัฒนาระหว่าง v1.2.0 และ v2.0.0 คิดว่ามันเป็นเวอร์ชั่นเก่ากว่า)

วิธีที่ 3: การพัฒนาแยกสาขา

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

ในกรณีนี้กิ่งจะมีลักษณะเช่นนี้:

 ________  ____  ________________  _____ dev
/        \/    \/                \/
---------------------------------- latest_version

น่าจะเป็นสิ่งนี้ต้องทำร่วมกับแท็กใช่มั้ย

คำถาม!

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

คำตอบ:


17

แท็กและสาขาไม่ได้เป็นแบบร่วมกันคุณสามารถ (และควรใช้ IMO) ทั้งคู่ แท็กอยู่ที่นั่นเพื่อทำเครื่องหมายเหตุการณ์สำคัญในการพัฒนา เช่นคุณเปิดสาขาสำหรับรุ่น 1.2 ของผลิตภัณฑ์ของคุณและคุณทำเครื่องหมายv1.2 Beta, RC1, RC2, Final(แล้วถ้าจำเป็นSP1ฯลฯ ) กับแท็กในสาขาเดียวกันกับที่

ฉันชอบวิธีที่ 2 เป็นวิธีเริ่มต้น (แม้ว่าฉันจะพยายามหลีกเลี่ยงสาขาหลายระดับเพื่อให้ชีวิตเรียบง่ายที่สุดเท่าที่จะทำได้) วิธีที่ 1 เป็นเพียงการไม่ไปทำงานในชีวิตจริง - แท็กไม่เพียงพอคุณต้องการสาขา และวิธีที่ 3 นั้นยืดหยุ่นได้ในขณะที่มันมีเวอร์ชั่นเสถียรเพียงตัวเดียวตลอดเวลาดังนั้น (ยกเว้นว่าคุณรวมเข้ากับวิธีที่ 2) คุณจะไม่สามารถรักษาหลายรุ่น (ล่าสุดและเก่ากว่า) ไว้ในแบบคู่ขนาน สิ่งนี้จำเป็นสำหรับโครงการเกือบทั้งหมดในชีวิตจริง - ในขณะที่คุณกำลังทำงานกับเวอร์ชัน 2 คุณควรจะสามารถเผยแพร่แพตช์ / อัปเกรดสำหรับ v1.9 และมักจะเป็นเวอร์ชันก่อนหน้า มากขึ้นอยู่กับประเภทของการสมัครแน่นอน เราพัฒนาเว็บแอปขึ้นมาดังนั้นจึงมีเพียงหนึ่งเวอร์ชันการผลิต ณ เวลาใดก็ตามเรามักจะเล่นปาหี่ด้วย 3 เวอร์ชันที่แตกต่างกัน หนึ่งใน UAT เตรียมความพร้อมสำหรับการปรับใช้หนึ่งคือรุ่นล่าสุดบนลำตัว) มันสามารถทำให้เกิดความซับซ้อนมากขึ้นสำหรับแอพเดสก์ท็อป / ไคลเอนต์โดยมีการใช้เวอร์ชันเก่าหลายรายการและดูแลรักษาแบบขนาน


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

@Shahbaz ใช่ แต่ประเด็นคือรุ่นที่ติดแท็กนั้นเป็นแบบอ่านอย่างเดียวคุณไม่สามารถทำการเปลี่ยนแปลงได้ ซึ่งหมายความว่าคุณไม่สามารถแก้ไขข้อบกพร่องในรุ่นที่เก่ากว่าในขณะที่การพัฒนาคุณสมบัติใหม่บนลำตัว
PéterTörök

อย่าลืมคุณสามารถใช้แท็กเท่านั้นและถ้าคุณต้องการย้อนกลับและแก้ไขบางสิ่งบางอย่างสำหรับรุ่นเก่าคุณสามารถแปลงแท็กนั้นเป็นสาขาเมื่อคุณต้องการ
Chloe

6

ฉันมีโฟลเดอร์ชื่อห้องสมุดในหลาย ๆ โฟลเดอร์ที่มีหมายเลขเวอร์ชัน

วิธีนี้เป็นวิธีที่มีประสิทธิภาพอย่างที่คุณทราบเนื่องจากคุณมีการควบคุมเวอร์ชันเป็น ... ควบคุมเวอร์ชัน

ทีนี้เทคนิคต่าง ๆ ที่คุณแจกแจงดูเหมือนจะเท่าเทียมกันหมด คุณสามารถอ่านบทความที่มีรายละเอียดมาก ๆการควบคุมที่มาถูกต้องซึ่งรวมถึงข้อมูลเกี่ยวกับแท็กและสาขา


ใช่วิธีแรกคือสิ่งที่ฉันเคยทำก่อนที่ฉันจะได้รับรหัสภายใต้การควบคุมเวอร์ชัน ฉันจะอ่านลิงก์ของคุณและแจ้งให้คุณทราบ
Shahbaz

ลิงค์นี้เยี่ยมมาก ฉันรู้สึกว่าวิธีที่ 2 นั้นดีกว่า (อย่างน้อยสำหรับฉันซึ่งโดยทั่วไปแล้วเป็นผู้พัฒนาห้องสมุด แต่เพียงผู้เดียว)
Shahbaz

3

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

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

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


2

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

ดูคำตอบของฉันที่นี่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้การแบรนช์เพื่อรักษาเวอร์ชันรีลีสหลายเวอร์ชัน

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