Facebook เปิดตัวระบบควบคุมแหล่งที่มาใหม่ Sapling

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

ส่วนของเซิร์ฟเวอร์ได้รับการพัฒนาแยกต่างหากเพื่อการทำงานระยะไกลที่มีประสิทธิภาพกับที่เก็บและระบบไฟล์เสมือนสำหรับการทำงานกับชิ้นส่วนในเครื่องของส่วนหนึ่งของที่เก็บเป็นที่เก็บที่สมบูรณ์ (นักพัฒนามองเห็นที่เก็บทั้งหมด แต่เฉพาะข้อมูลที่จำเป็นเท่านั้นที่เข้าถึงได้ ถูกคัดลอกไปยังระบบภายในเครื่อง) รหัสสำหรับส่วนประกอบเหล่านี้ที่ใช้ในโครงสร้างพื้นฐานของ Facebook ยังไม่เปิด แต่บริษัทสัญญาว่าจะเผยแพร่ในอนาคต อย่างไรก็ตาม ขณะนี้อยู่ในพื้นที่เก็บข้อมูล Sapling คุณสามารถค้นหาต้นแบบของเซิร์ฟเวอร์ Mononoke (ใน Rust) และ VFS EdenFS (ใน C++) ได้แล้ว ส่วนประกอบเหล่านี้เป็นทางเลือกและไคลเอนต์ Sapling ก็เพียงพอที่จะทำงานได้ ซึ่งรองรับการโคลนพื้นที่เก็บข้อมูล Git การโต้ตอบกับเซิร์ฟเวอร์ที่ใช้ Git LFS และทำงานกับไซต์โฮสต์ git เช่น GitHub

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

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

โครงการได้รับการพัฒนาในช่วง 10 ปีที่ผ่านมาและถูกสร้างขึ้นเพื่อแก้ไขปัญหาเมื่อจัดระเบียบการเข้าถึงพื้นที่เก็บข้อมูลเสาหินขนาดใหญ่มากด้วยสาขาหลักเพียงสาขาเดียว ซึ่งใช้การดำเนินการ "rebase" แทน "ผสาน" ในเวลานั้น ไม่มีโซลูชันแบบเปิดสำหรับการทำงานกับพื้นที่เก็บข้อมูลดังกล่าว และวิศวกรของ Facebook ตัดสินใจสร้างระบบควบคุมเวอร์ชันใหม่ที่จะตอบสนองความต้องการของบริษัท แทนที่จะแบ่งโครงการออกเป็นพื้นที่เก็บข้อมูลขนาดเล็ก ซึ่งจะนำไปสู่ความซับซ้อนของ การจัดการการพึ่งพา (ในครั้งเดียวเพื่อแก้ไขปัญหาที่คล้ายกัน Microsoft ได้สร้างเลเยอร์ GVFS) ในตอนแรก Facebook ใช้ระบบ Mercurial และโปรเจ็กต์ Sapling ในขั้นตอนแรกที่พัฒนาเป็นส่วนเสริมของ Mercurial เมื่อเวลาผ่านไป ระบบได้เปลี่ยนเป็นโปรเจ็กต์อิสระด้วยโปรโตคอล รูปแบบการจัดเก็บข้อมูล และอัลกอริธึมของตัวเอง ซึ่งได้รับการขยายด้วยความสามารถในการโต้ตอบกับที่เก็บ Git

สำหรับงาน มีการเสนอยูทิลิตี้บรรทัดคำสั่ง "sl" ซึ่งใช้แนวคิดทั่วไป เวิร์กโฟลว์ และอินเทอร์เฟซที่นักพัฒนาคุ้นเคยกับ Git และ Mercurial คำศัพท์และคำสั่งใน Sapling แตกต่างจาก Git เล็กน้อย และใกล้เคียงกับ Mercurial มากขึ้น ตัวอย่างเช่น แทนที่จะใช้สาขา จะใช้ "บุ๊กมาร์ก" (ไม่รองรับสาขาที่มีชื่อ) โดยค่าเริ่มต้น เมื่อดำเนินการโคลน/ดึง จะไม่มีการโหลดที่เก็บทั้งหมด แต่เฉพาะสาขาหลักเท่านั้น ไม่มีการทำเครื่องหมายเบื้องต้นของการกระทำ ( พื้นที่การแสดงละคร) แทนที่จะใช้ "git fetch" คำสั่ง "sl" จะถูกใช้ pull" แทน "git pull" - "sl pull -rebase" แทนที่จะเป็น "git checkout COMMIT" - "sl goto COMMIT" แทน "git reflog" - "sl Journal" เพื่อยกเลิกการเปลี่ยนแปลงแทน "git checkout - FILE" มีการระบุ "sl revert FILE" และ "." ใช้เพื่อระบุสาขา "HEAD" แต่โดยทั่วไป แนวคิดทั่วไปของแบรนช์และการดำเนินการโคลน/ดึง/พุช/คอมมิต/รีเบสจะยังคงอยู่

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

Facebook เปิดตัวระบบควบคุมแหล่งที่มาใหม่ Sapling

การปรับปรุงที่โดดเด่นอีกประการหนึ่งของ Sapling คือทำให้แก้ไขและแก้ไขข้อผิดพลาดและเปลี่ยนกลับไปสู่สถานะก่อนหน้าได้ง่ายขึ้น ตัวอย่างเช่น มีการใช้คำสั่ง "sl undo", "sl redo", "sl uncommit" และ "sl unamend" เพื่อย้อนกลับการดำเนินการต่างๆ มากมาย คำสั่ง "sl Hide" และ "sl unhide" ใช้เพื่อซ่อนการคอมมิตชั่วคราว และสำหรับการนำทางแบบโต้ตอบผ่านสถานะเก่าและกลับไปยังจุดที่ระบุด้วยคำสั่ง “sl undo -i command” Sapling ยังสนับสนุนแนวคิดของ Commit Stack ซึ่งช่วยให้คุณสามารถจัดระเบียบการตรวจสอบทีละขั้นตอนโดยการแบ่งฟังก์ชันที่ซับซ้อนออกเป็นชุดการเปลี่ยนแปลงส่วนเพิ่มที่มีขนาดเล็กลงและเข้าใจได้มากขึ้น (จากเฟรมเวิร์กพื้นฐานไปจนถึงฟังก์ชันที่เสร็จสมบูรณ์)

มีการจัดเตรียมส่วนเพิ่มเติมหลายอย่างสำหรับ Sapling รวมถึงอินเทอร์เฟซ ReviewStack สำหรับการตรวจสอบการเปลี่ยนแปลง (โค้ดภายใต้ GPLv2) ซึ่งช่วยให้คุณสามารถประมวลผลคำขอดึงข้อมูลบน GitHub และใช้มุมมองสแต็กของการเปลี่ยนแปลง นอกจากนี้ ยังมีการเผยแพร่ข้อมูลเพิ่มเติมสำหรับการทำงานร่วมกับโปรแกรมแก้ไข VSCode และ TextMate รวมถึงการใช้งานอินเทอร์เฟซและเซิร์ฟเวอร์ ISL (Interactive SmartLog)

ที่มา: opennet.ru

เพิ่มความคิดเห็น