ส่วนใดของโครงการของคุณที่ควรอยู่ในการควบคุมซอร์สโค้ด?


54

นักพัฒนาเพื่อนได้เริ่มทำงานกับโครงการ Drupal ใหม่และ sysadmin ได้แนะนำว่าพวกเขาควรวางเฉพาะไซต์ / ไดเรกทอรีย่อยเริ่มต้นในการควบคุมแหล่งที่มาเพราะมัน "จะทำให้การอัปเดตสคริปต์ง่ายขึ้น" นอกเหนือจากการอ้างสิทธิ์ที่น่าสงสัยแล้วมันทำให้เกิดคำถามอื่น - ไฟล์ใดบ้างที่ควรอยู่ภายใต้การควบคุมของแหล่งที่มา? และมีสถานการณ์ที่ควรแยกไฟล์ขนาดใหญ่บางไฟล์หรือไม่?

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

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


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

คำตอบ:


71

ฉันจะบอกว่าขั้นต่ำที่ควรมีการควบคุมแหล่งที่มาคือไฟล์ทั้งหมดที่จำเป็นในการสร้างโครงการรุ่นที่กำลังทำงานอยู่ ซึ่งรวมถึงไฟล์ DDL เพื่อตั้งค่าและแก้ไขสคีมาฐานข้อมูลและในลำดับที่ถูกต้องด้วย ลบแน่นอนเครื่องมือที่จำเป็นในการสร้างและดำเนินการโครงการเช่นเดียวกับสิ่งที่สามารถได้รับ / สร้างโดยอัตโนมัติจากไฟล์อื่น ๆ ในการควบคุมแหล่งที่มา (เช่นไฟล์ JavaDoc ที่สร้างจากไฟล์ Java ในการควบคุมแหล่งที่มา)


1
@EdWoodcock: คุณถูกต้องการสั่งซื้อที่ถูกต้องอาจเป็นความเจ็บปวดที่แท้จริง แต่ในบางครั้งคุณต้องการสร้างสถานะของฐานข้อมูลใหม่อีกครั้งหรือเลือกใช้การเปลี่ยนแปลงบางอย่างเมื่อทำการทดสอบแทนที่จะปล่อย / สร้างใหม่ทั้งหมด ฉันพบว่ามันแตกต่างกันไปตามโครงการ
FrustratedWithFormsDesigner

1
จุดที่ใช้มีระดับหรือปฏิบัตินิยมที่จำเป็นสำหรับการที่
Ed James

3
@JayBazuzi: คู่มือการตั้งค่าเวิร์กสเตชัน (ในการควบคุมแหล่งที่มา) ควรร่างเครื่องมือที่จำเป็นและการอ้างอิงเช่นเดียวกับวิธีการตั้งค่าและสถานที่ที่จะได้รับเครื่องมือจาก การบำรุงรักษาชุดเครื่องมือที่ใช้งานได้เป็นสิ่งสำคัญ แต่ไม่ใช่วัตถุประสงค์ของการควบคุมแหล่งที่มา ฉันคิดว่าถ้าคุณต้องการจริงๆคุณสามารถเพิ่มไฟล์ตัวติดตั้ง / .msi และไฟล์คำสั่งบางไฟล์ได้ แต่นั่นอาจเป็นไปไม่ได้ในที่ทำงาน คุณต้องการที่จะตรวจสอบใน VisualStudio Pro 2010 หรือ IBM RAD, XMLSpy ฯลฯ ในระบบควบคุมแหล่งที่มาของคุณหรือไม่? สถานที่ทำงานหลายแห่งมีการควบคุมการปรับใช้สำหรับเครื่องมือเหล่านี้
FrustratedWithFormsDesigner

2
@artistoex: นั่นคือการแยกขน โดยทั่วไปสันนิษฐานว่ากล่องสร้างมีไลบรารีเหมือนกับที่ทำในกล่อง dev หากทั้งสองแตกต่างกันมีบางอย่างผิดปกติกับผู้จัดการฝ่ายไอที ทั้งหมดที่คุณ (นึกคิด) จะต้องเป็นเพียงรหัสที่มา บางโครงการนี้ใช้ไม่ได้ แต่โดยส่วนใหญ่ควรเป็น
Mike S

1
@ ไมค์ฉันหมายถึงมัน ฉันคิดว่ามันเป็น Kent Beck ในหนังสือเกี่ยวกับ XP ที่เสนอให้จริง ไม่ใช่ความคิดที่เลว คุณเกือบ 100% แน่ใจว่าจะสามารถสร้างปัจจัยการสร้างใหม่ทั้งหมด และอย่าลืมสภาพแวดล้อมที่มีการเปลี่ยนแปลงตลอดเวลาของโครงการ
artistoex

29

เป็นการดีที่สุดที่จะวางทุกสิ่งภายใต้ดวงอาทิตย์ไว้ในแหล่งควบคุม

  • รหัส

  • ห้องสมุด

  • ทรัพยากร

  • สร้าง / ปรับใช้สคริปต์

  • การสร้างฐานข้อมูลและสคริปต์การอัพเดท

  • เอกสารบางอย่าง

  • ไฟล์คอนฟิกูเรชันเฉพาะสภาวะแวดล้อม

สิ่งเดียวที่ไม่ควรใส่ลงในการควบคุมแหล่งที่มาคือการสร้างสิ่งประดิษฐ์สำหรับโครงการของคุณ


5
ตรวจสอบให้แน่ใจว่า "เอกสารบางอย่าง" ไม่ได้ขึ้นอยู่กับเครื่องมือเฉพาะ ฉันใช้หลายโครงการที่ใช้บางอย่างเช่น Frame รุ่น SunOS ในการทำเอกสารพวกเขาตรวจสอบในไฟล์ ".mif" ทั้งหมด แต่ไม่ใช่ไฟล์. ps หรือ. pdf ที่เป็นผลลัพธ์ ตอนนี้ SunOS และ Frame ได้รับการผลักไสไปยังถังขยะของประวัติศาสตร์เอกสารการออกแบบจำนวนมากมีอยู่เป็นสำเนากระดาษที่มีค่าเท่านั้น
Bruce Ediger

2
@BruceEdiger ในกรณีนั้นฉันต้องการให้ทั้งข้อมูลส่วนตัวและข้อมูลเฉพาะเครื่องมือ หากเครื่องมือหายไปอย่างน้อยที่สุดคุณก็ยังมีสำเนาอิเล็กทรอนิกส์คงที่ :)
maple_shaft

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

คอมไพเลอร์รุ่นที่คุณใช้อยู่เป็นอย่างไร เฮ็คทำไมไม่ใช้ทั้งระบบปฏิบัติการ?
wnoise

18

ฉันจะบอกว่า;

  • ไฟล์ใด ๆ ที่จำเป็นในการสร้างบิลจะเข้าสู่การควบคุมเวอร์ชัน
  • ไฟล์ใด ๆ (ซึ่งสามารถ) สร้างขึ้นโดยการสร้างไม่ได้

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


15

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


15

ประสบการณ์ที่ยากลำบากได้สอนฉันว่าเกือบทุกอย่างอยู่ในการควบคุมของแหล่งที่มา (ความเห็นของฉันที่นี่มีการเปลี่ยนแปลงในทศวรรษและครึ่งหนึ่งสำหรับการพัฒนาระบบฝังตัว / โทรคมนาคมบนฮาร์ดแวร์ที่เป็นกรรมสิทธิ์ที่มีกรรมสิทธิ์และบางครั้งก็หายากเครื่องมือ)

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

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

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

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

สคริปต์บิลด์ของคุณทั้งหมดอยู่ในการควบคุมซอร์ส ทุกอย่าง! ตลอดจนถึงตัวแปรสภาพแวดล้อม เครื่องสร้างของคุณควรจะสามารถเรียกใช้งานบิลด์ของโปรเจ็กต์ใด ๆ ของคุณได้โดยรันสคริปต์เดียวในรูทของโปรเจ็กต์ ( ./buildเป็นมาตรฐานที่สมเหตุสมผล./configure; makeเกือบจะดี) สคริปต์ควรตั้งค่าสภาพแวดล้อมตามที่ต้องการจากนั้นเปิดเครื่องมือใด ๆ ก็ตามที่สร้างผลิตภัณฑ์ (ทำ, ant, ฯลฯ )

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

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

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

  • ในจักรวาลที่ทุกอย่างอยู่ในการควบคุมแหล่งที่มาคุณตรวจสอบแท็ก 2.2.6 มีการสร้างการดีบักพร้อมในหนึ่งชั่วโมงหรือประมาณนั้นใช้เวลาหนึ่งหรือสองวันในการสร้าง "ข้อผิดพลาดของวีไอพี" ใหม่ติดตามสาเหตุแก้ไขใน รุ่นปัจจุบันและโน้มน้าวใจลูกค้าให้อัพเกรด เครียด แต่ไม่เลวร้ายเท่ากับจักรวาลอื่น ๆ ที่เส้นผมของคุณสูงกว่า 3 ซม.

ด้วยที่กล่าวว่าคุณสามารถนำมันไปไกลเกินไป:

  • คุณควรมีการติดตั้งระบบปฏิบัติการมาตรฐานที่คุณมี "สำเนาทองคำ" ของ เอกสารมันอาจจะอยู่ใน README ที่อยู่ในการควบคุมแหล่งที่มาเพื่อให้คนรุ่นต่อไปรู้ว่ารุ่น 2.2.6 และก่อนหน้านี้สร้างขึ้นเฉพาะบน RHEL 5.3 และ 2.3.0 และใหม่กว่าเท่านั้นที่สร้างขึ้นบน Ubuntu 11.04 ถ้ามันง่ายกว่าสำหรับคุณที่จะจัดการ toolchain ด้วยวิธีนี้ไปเลยแค่ให้แน่ใจว่ามันเป็นระบบที่เชื่อถือได้
  • เอกสารโครงการมีความยุ่งยากในการบำรุงรักษาในระบบควบคุมแหล่งที่มา เอกสารโครงการอยู่ข้างหน้าโค้ดเสมอและไม่ใช่เรื่องแปลกที่จะทำงานกับเอกสารสำหรับเวอร์ชันถัดไปในขณะที่ทำงานกับโค้ดสำหรับเวอร์ชันปัจจุบัน โดยเฉพาะอย่างยิ่งหากเอกสารโครงการของคุณทั้งหมดเป็นเอกสารไบนารีที่คุณไม่สามารถกระจายหรือผสานได้
  • หากคุณมีระบบที่ควบคุมเวอร์ชันของทุกสิ่งที่ใช้ในบิลด์ให้ใช้มัน ! ตรวจสอบให้แน่ใจว่าการซิงค์ทั่วทั้งทีมเป็นเรื่องง่ายเพื่อให้ทุกคน (รวมถึงเครื่องสร้าง) กำลังดึงจากชุดเครื่องมือเดียวกัน (ฉันกำลังคิดถึงระบบเช่นผู้สร้างของ Debian และการใช้ virtualenv ของ python อย่างรับผิดชอบ)

อย่าลืมเช็คอินฮาร์ดแวร์ที่ยากต่อการเปลี่ยน บริษัท หนึ่งสูญเสียงานสร้างเนื่องจากพวกเขาไม่มี CPU (HPPA? 68040?) ที่เครื่องมือสร้างทำงานอีกต่อไป
hotpaw2

1
“ ระบบ CM” หมายถึงอะไร
bodo

1
ในกรณีส่วนใหญ่ฉันต้องการจัดทำเอกสารไบนารีและเวอร์ชันมากกว่าส่งมอบไบนารีเอง ใช่ - ในกรณีของคุณไบนารียากที่จะได้รับและคุณไม่มีวิธีที่ดีในการซ่อน แต่โดยทั่วไปฉันรู้สึกว่าเอกสารอ้างอิงทั้งหมดรวมถึงวิธีการตั้งค่าสิ่งต่าง ๆ (เช่น dev VM) ทำงานได้เทียบเท่าน้ำหนักเบา การเขียนสคริปต์ช่วยปรับปรุงการทำสำเนา แต่ท้ายที่สุดเราทุกคนต้องจัดส่ง
Iiridayn

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

13

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


7

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

ในคำอื่น ๆ ทุกอย่างที่นอกเหนือจากระบบปฏิบัติการแอพและเครื่องมือควรอยู่ใน VCS และในระบบฝังตัวซึ่งสามารถพึ่งพารุ่นไบนารีเครื่องมือเฉพาะได้ฉันได้เห็นเครื่องมือที่เก็บใน VCS ด้วยเช่นกัน!

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


1
นี่ก็หมายความว่าการทำงานจากหลาย ๆ เครื่องนั้นไม่เจ็บปวด เพียงแค่ดึง repo แล้วคุณก็พร้อมที่จะไป
Spencer Rathbun

+1 สำหรับการอ้างอิงอุกกาบาต
muffinista

ใครบางคนสามารถชี้ไปที่ตัวอย่างของ (ตัวอย่าง) โครงการ java ที่มี toolchain แบบเต็มภายใต้การควบคุม rev เพื่อให้สามารถตรวจสอบและใช้งานได้อย่างตรงไปตรงมา?
andersoj

@andersoj ตรวจสอบboxen.github.com
Larry

6

สิ่งใดก็ตามที่มีส่วนในโครงการและคุณต้องการติดตามการเปลี่ยนแปลง

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


2

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


1

ทุกอย่างควรอยู่ภายใต้การควบคุมแหล่งยกเว้น:

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

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

และอย่าลืมใส่การเปลี่ยนแปลง schema ของฐานข้อมูล (ทิ้ง sql แบบง่าย ๆ ของการเปลี่ยนแปลง schema ทุกครั้ง) ภายใต้การควบคุมเวอร์ชันด้วย คุณสามารถรวมเอกสารของผู้ใช้และ API ถ้ามันสมเหตุสมผลกับโครงการ


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

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


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

2
@maple_shaft ในบริบทของคำถาม (โครงการ drupal หรือ gereric CMS โครงการเว็บ) "หนึ่งขั้นตอนในการสร้างและปรับใช้สภาพแวดล้อมใด ๆ " เป็นสถานการณ์ที่ไม่น่าเป็นไปได้สูงมาก ฉันตอบคำถามไม่ได้ให้แนวทางทั่วไปเกี่ยวกับสิ่งที่ควรอยู่ภายใต้การควบคุมเวอร์ชัน - แต่ downvote ของคุณยินดีต้อนรับ :)
yannis

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

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

@maple_shaft และแม้ว่ามันอาจดูเหมือนว่าฉันกำลังเรียกร้องความหวาดระแวงตอนนี้เราไปสุดขีดเพื่อปกป้องสิ่งที่เกี่ยวข้องกับข้อมูลประจำตัวจาก Snafus ที่คล้ายกัน
yannis

1

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

ตัวอย่างเช่นสิ่งต่อไปนี้ไม่ได้อยู่ในการควบคุมแหล่งที่มา:

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

สิ่งที่ไปในการควบคุมแหล่งที่มา:

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

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


1

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

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

สร้างบันทึกและสิ่งอื่น ๆ ที่อาจไม่มีใครสนใจ (แต่คุณไม่เคยรู้แน่นอน) มักจะถูกติดตามที่ดีที่สุดโดยใครก็ตามที่สร้างมัน: เจนกินส์ ฯลฯ

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

สิ่งที่เหลืออยู่ (และ ณ จุดนี้ควรมีไฟล์แหล่งที่มาน้อยกว่าและสร้างการกำหนดค่าเซิร์ฟเวอร์) ไปที่การควบคุมแหล่งที่มา


0

คำตอบของฉันค่อนข้างง่าย: ไม่ใช่ไบนารี โดยนัยเกือบทุกอย่างอื่น

(ไม่ใช่การสำรองฐานข้อมูลหรือการโยกย้ายสคีมาหรือข้อมูลผู้ใช้อย่างแน่นอน)


การโยกย้าย Schema ไปในการควบคุมแหล่งที่มาอย่างแน่นอน ด้วยวิธีนี้คุณจะรู้ได้ว่าสคีมาที่ DB คาดหวัง
Marnen Laibow-Koser

0

การควบคุมแหล่งที่มาคือกลไกการติดตามการเปลี่ยนแปลง ใช้มันเมื่อคุณต้องการรู้ว่าใครเปลี่ยนอะไรและเมื่อไหร่

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

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

การควบคุมแหล่งที่มาไม่ใช่เวทมนตร์ ลองใช้ แต่ละทิ้งไปหากไม่เพิ่มมูลค่าเพียงพอที่จะหักล้างค่าใช้จ่าย


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

Hehe ฉันไม่ได้โต้เถียงกับการควบคุมแหล่งเพียงกับสุ่มสี่สุ่มห้าโดยใช้การควบคุมแหล่งที่มาสำหรับทุกสิ่ง หากการควบคุมแหล่งที่มามีเวิร์กโฟลว์ที่ซับซ้อนมากและนั่นไม่ได้เพิ่มมูลค่าฉันไม่ต้องการที่จะใช้มัน
Andomar

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

0

สิ่งที่ฉันจะไม่ใส่ในการควบคุมแหล่งที่มา:

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

ดังนั้นฉันจึงไม่ทำhg addremoveเช่นนั้นเนื่องจากโคลนใหม่ทุก ๆ ครั้งเมื่อ SDK อัปเดต นี่ยังทำให้ฉันทำการสำรองข้อมูลอย่างสมบูรณ์ทุกครั้งที่ SDk อัปเดตและตรวจสอบว่าเวอร์ชันใหม่ที่โคลนจากที่เก็บนั้นดี


0

ฉันขอแนะนำให้คุณหนังสือต่อไปนี้ซึ่งตอบข้อสงสัยของคุณ:

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

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

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


-1

เก็บรหัสทั้งหมดในการควบคุมเวอร์ชันและการกำหนดค่าและข้อมูลผู้ใช้ทั้งหมด เพื่อให้เฉพาะ drupal คุณต้องใส่ทุกอย่างในการควบคุมเวอร์ชันยกเว้นไฟล์และ settings.php

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