เพิ่มประสิทธิภาพ repo คอมไพล์ที่มีไฟล์ไบนารีขนาดใหญ่


21

โครงการของเรามีขนาดประมาณ 11GB, 10 แห่งเป็นข้อมูลไบนารี่ (.png ภาพ) ดังนั้นการดำเนินการgit diffหรือgit statusใช้เวลานานกว่าหนึ่งนาที dataโชคดีที่ไฟล์ข้อมูลทั้งหมดจะถูกแยกออกไปไว้ในโฟลเดอร์ที่มีชื่อที่ยอดเยี่ยม การมอบหมายคือ "หลีกเลี่ยงการบีบอัดการกระจายและการดำเนินการอื่น ๆ ที่มีราคาแพงในไฟล์ไบนารี"

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

  • อย่างชัดเจนบอกคอมไพล์ไฟล์เหล่านั้นเป็นไบนารี , ไม่รวมไฟล์จาก diffsได้รับการพิจารณา แต่ผู้ที่ดูเหมือนเพียงบางส่วนเพื่อแก้คำถาม

ฉันรู้สึกว่าคุณลักษณะคอมไพล์เป็นวิธีแก้ปัญหา แต่อย่างไร หรือมีสถาปัตยกรรมที่ดีกว่า repo เสาหิน?


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

@Ixrec ภาพมีความสำคัญมากกว่าซอร์สโค้ด ทั้งหมดต้องมีอยู่และไฟล์. png checksums จะถูกตรวจสอบเสมอสำหรับไฟล์ที่เสียหาย
Vorac

1
ทำไมคำถามนี้เกี่ยวกับการล้นสแต็ค Q. ดูเหมือนว่าเหมาะสมกับมัน
spirc

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

@Snowman ขอบคุณสำหรับการตอบสนอง รายการใดของรายการในหัวข้อที่เหมาะสม? programmers.stackexchange.com/help/on-topic
spirc

คำตอบ:


18

คุณสามารถใช้git-lfsหรือเครื่องมือที่คล้ายกัน (git-fat, git-annex ฯลฯ ) เครื่องมือเหล่านั้นโดยทั่วไปจะแทนที่ไฟล์ไบนารีใน repo ของคุณด้วยไฟล์ข้อความขนาดเล็กที่มีแฮชและจัดเก็บข้อมูลไบนารีจริงในแบบที่ไม่คอมไพล์ - เหมือนการแชร์เครือข่าย

ทำให้ความแตกต่างและทุกอย่างรวดเร็วเป็นพิเศษเมื่อเปรียบเทียบกับแฮชเท่านั้นและอย่างน้อยก็สำหรับ git-lfs - โปร่งใสกับผู้ใช้ (หลังจากติดตั้งครั้งเดียว)

Afaik git-lfs รองรับโดย github, gitlab, VisualStudio และเป็นโอเพ่นซอร์ส


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

ขออภัยข้อมูลประมาณ 1GB เท่านั้นขออภัย แต่ git-lfs ไม่ควรเพิ่มขั้นตอนเพิ่มเติมสำหรับผู้ใช้มันควรจะโปร่งใสอย่างสมบูรณ์
kat0r

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

คุณต้องติดตั้งไคลเอนต์ขนาดเล็กเช่นกันตรวจสอบหน้า GitHub แต่นั่นควรจะง่ายต่อการเปิดตัวด้วยนโยบายกลุ่ม / ง่ายกว่าทางเลือกอื่น
kat0r

1

ใช้ repos ทั้ง GIT และ SVN

หากไฟล์ไบนารีสามารถแยกออกจากกันได้อย่างมีเหตุผลจากแหล่งที่มาคุณอาจพิจารณาใช้ git สำหรับไฟล์ข้อความและไม่ใช่ DVCS เช่นการโค่นล้มสำหรับไบนารีไฟล์

โครงการที่ฉันทำงานทำเนื่องจากเรามี GB จำนวนมากสำหรับไลบรารีที่คอมไพล์แล้ว (สำหรับการพึ่งพา OSX / Win32) ซึ่งเราต้องเก็บเวอร์ชันไว้


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

ใช้ SVN (พร้อมgit svn)

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

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


git-lfs ก็เป็นตัวเลือกเช่นกัน แต่ฉันไม่ได้ใช้มันเลยไม่สามารถพูดได้ว่ามันใช้งานได้ดีแค่ไหน

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