ทีมป้องกันการเขียนทับทำงานในไฟล์ต้นฉบับได้อย่างไร [ปิด]


26

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

สมมติว่านักพัฒนาคนหนึ่งกำลังทำงานAudio.cppและนักพัฒนาที่สองก็กำลังทำงานอยู่Audio.cppสิ่งนี้จัดการโดยทั่วไปในทีมขนาดใหญ่เพื่อต่อสู้กับการเขียนทับได้อย่างไร (ในคำอื่น ๆ ที่จะหยุดสองนักพัฒนาจากการเปิดไฟล์จนกว่านักพัฒนาคนหนึ่งจะเสร็จสิ้น)


84
หนึ่งในแท็กที่คุณเลือกนั้นเป็นคำตอบแล้ว
Philipp

18
ในความเป็นจริง 3 ใน 4 แท็กคำตอบ แต่อย่างใดอย่างหนึ่งคือคำตอบ
MSalters

1
ที่เกี่ยวข้อง: gamedev.stackexchange.com/q/480
moooeeeep

คำตอบ:


69

ส่วนใหญ่ทีมพัฒนาซอฟต์แวร์ (ไม่เพียง แต่ในการพัฒนาเกม) ช่วยแก้ปัญหานี้โดยใช้ซอฟต์แวร์ควบคุมรุ่น ตัวอย่างคือ

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

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


18
โปรดทราบว่า Git และ Mercurial เป็นระบบควบคุมเวอร์ชันแบบกระจายซึ่งทำงานแตกต่างกันเล็กน้อย: พวกเขาไม่ต้องการพื้นที่เก็บข้อมูลส่วนกลางเพียงอันเดียว แต่ในทางทฤษฎีแล้วผู้พัฒนาซอฟต์แวร์รายใดสามารถดึงการอัปเดตจากคนอื่นได้โดยตรง แน่นอนว่าในทางปฏิบัติมันยังคงเป็นเรื่องปกติที่จะมีที่เก็บหนึ่งแห่ง (มักตั้งอยู่บนพื้นที่สาธารณะเช่น GitHub) ประกาศว่า "เป็นทางการ" และใช้พื้นที่เก็บข้อมูลส่วนกลางมากขึ้นหรือน้อยลงในระบบควบคุมเวอร์ชันที่ไม่เผยแพร่
Ilmari Karonen

18
คำตอบนี้ก็หมายความว่าการรวมจะทำด้วยตนเองเสมอ ส่วนใหญ่เวลาอย่างไรก็ตามซอฟต์แวร์ควบคุมเวอร์ชันสามารถผสานความแตกต่างโดยอัตโนมัติและต้องการทำงานด้วยตนเองสำหรับการเปลี่ยนแปลงที่ยุ่งยากเท่านั้น
jhocking

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

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

13

นักพัฒนาไม่ใช้ไฟล์เดียวกัน

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

นี่คือคำอธิบายที่ง่ายสำหรับการเป็นส่วนหนึ่งของแนวความคิดเป็นอย่างอื่นไม่ง่ายดังนั้นการควบคุมเวอร์ชัน


6
พวกเขายังทำสิ่งใหม่ที่เรียกว่าการสื่อสารและซอฟต์แวร์ไม่ได้เขียนในสุญญากาศ ดังนั้นหากพวกเขาไม่เข้าใจความขัดแย้งพวกเขาจะไปคุยกับบุคคลอื่นหรือประสานงานล่วงหน้า
Brian

9

นอกเหนือจากจุดที่เพิ่มขึ้นในคำตอบอื่น ๆ เกี่ยวกับการควบคุมเวอร์ชันและการจัดการข้อขัดแย้งกับการรวมแล้วมีอย่างน้อยสองวิธีที่สมาชิกในทีมสามารถหลีกเลี่ยงการเขียนทับการทำงานของกันและกัน:

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

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

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

    แน่นอนว่าจะมีการทับซ้อนกันอยู่เสมอซึ่งจะต้องจัดการด้วยวิธีอื่น


2
ในด้านบวกการล็อคเป็นเพียงวิธีเดียวที่คุณสามารถแก้ไขไฟล์. JPEG หรือไฟล์ที่ไม่ใช่ข้อความธรรมดาอื่น ๆ นี่ไม่ใช่ข้อ จำกัด ทางทฤษฎี แต่เพียงว่าเครื่องมือผสานมักจะดูด
MSalters

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

3
@MaurycyZarzycki: การเปลี่ยนตัวอักษรเดียวกันนั้นคล้ายคลึงกับการเปลี่ยนพิกเซลเดียวกันนั่นคือต้องแก้ไขด้วยตนเอง .JPEG อาจเป็นตัวอย่างที่ไม่ดีตอนนี้ฉันเข้าใจเพราะศิลปินไม่ทำงานในรูปแบบที่สูญเสีย แต่ปัญหาการผสานยังมีอยู่ใน. PNG อย่างน้อยที่สุดคุณจะประทับใจถ้าเครื่องมือผสานจะสามารถผสาน XML ได้โดยไม่ทำลาย
MSalters

@ MStersters แน่นอนว่าฉันสามารถเห็นด้วยมากขึ้น
Maurycy

1
@xorsyst: ลองใช้วิธีนี้: ตรวจสอบจาก SVN ในสองสถานที่ จากนั้นล็อกไฟล์จากตำแหน่ง 1. ตำแหน่ง 2 จะไม่รู้ว่าไฟล์ถูกล็อคจนกว่าจะส่งมอบหรืออัปเดต
Zan Lynx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.