เว็บไซต์เหมือน GitHub และ GitLab หาวิธีที่จะผนวกรวมหน่วยตรงอยู่ของส่วนติดต่อแบบเว็บ@action. ดูจากเว็บไซต์ร้านเดียวที่เปลือย repos ยังไงพวกเขาแสดงพวกนั้น merges? สามารถแบบเดียวกันเป็นจบบรรทัดคำสั่งในชักโคลน? ฉันเจอ นี่ ที่เป็นไปได้คำตอบใช้ท่อประปากคำสั่ง.
เพราะ GitHub ปิดแหล่งข่าวของเราไม่สามารถบอกแน่นอนสิ่งที่พวกเขาปรับแต่งโปรแกรมเบื้องหลัทำการผนวกรวมปฏิบัติการ อย่างไรก็ตาม GitLab คือ เปิดแหล่งข่าวและพวกเราสามารถดูตัวอย่างกันครับที่ implementation รายละเอียดซึ่งได้เปลี่ยมาตลอดเวลา
ยังไง GitLab มัน
วันนี้ส่วนใหญ่ git ที่เกี่ยวข้องกับคุณสมบัติต่างๆที่ surfaced อยู่ในส่วนติดต่อผู้ใช้รวมทั้ง git merges บ GitLab เป็นจัดการโดย gitaly ส่วนประกอบของ GitLab ซึ่งสื่อสารกับห้องเก็บของทางร่างกายของ git repositories. มันส่วนใหญ่ใช้มันกัองสมุด git2goหรือแสดงการจริงๆ git องปฏิบัติการ
มองใกล้ตองซอร์สโค้ดตัวนี้สำหรับ gitaly
การประเมินผลดีที่สุดฉันสามารถทำให้เป็นที่ gitaly ที่จริง มัน ทำให้ดิใช้ทำงานของต้นไม้สำหรับ git องปฏิบัติการณ์รวมถึงสำหรับ merges. Repositories และทำต้นไม้น่ะโดยทั่วไปแล้วเปิดและโคลเพื่อ"หยุดการขยายเขตกักกัน"ไดเรกทอรี,ซึ่งเป็นแค่ชั่วคราวไดเรกทอรีทำต่อที่เร็วพอๆกับแมลงวันและ ที่เก็บทำงานผังต้นไม้คือโคลเข้าไปในไดเรกทอรีชั่วคราวได้. (ดู หยุดการขยายเขตกักกันซะไป#L40-58เรียกจาก ผนวกรวม.ไป#L53).
ยังไงพวกเขาแสดงพวกนั้น merges?
ดังนั้นสำหรับคำถามของคุณ:อย่างน้อยก็กับ GitLab ทำงานอนต้นไม้ เป็น ที่ใช้สำหรับ merges(ในหมู่อื่นๆปฏิบัติการ)และ ไม่ใช่แบกอยู่ในเปล่า repositories. คุณไม่เห็นพวกเขาเพราะไดเรกทอรีชั่วคราวของใช้ก่อนที่พวกเขามุ่งมั่นที่จะถูกเก็บเส้นทางเดินของตัวเอง
เราสามารถบางทีอาจจะสันนิษฐานว่า GitHub นทำอะไรสักอย่างที่คล้ายกันแต่มันเป็นไปไ่ม่ได้ีที่จะรู้แน่นอน
มันเป็นไป?
สามารถแบบเดียวกันเป็นจบบรรทัดคำสั่งในชักโคลน?
คุณเล็งมาที่หนึ่งตัวอย่างเช่นนั้น ดูเหมือน จะทำงานโดยไม่มีกำลังตรวจสอบทำงานบนต้นไม้เหรอ แต่มันก็ใช้งานได้โดยการเขียนออกจากต้นไม้(ใช้ git write-tree
)ซึ่งอยู่บนคิดอะไรใช้ได้เหมือนกันระดับไม่ได้ดูเหมือนจะมีประโยชน์จองพูด cloning จากเปลืมเชิดหน้าและตรวจตรวจสอบสุลังทำงานผังต้นไม้และใช้ git
ปฏิบัติการเหมือนคนทั่วไปแล้ว สำหรับการแสดง(anticipating เป็นไปได้ที่จะคัดค้าน)คุณสามารถใช้ tempfs หรือบางอย่างอื่นความทรงจำ-มีผัสถานที่
ผมยังไม่มั่นใจที่เกี่ยวข้องตอบคงเป็นนั้นเพียงพอสำหรับถือออกต่างๆผนวกรวม strategies ที่ถูกใช้โดย git merge
.
ดังนั้น,อยู่บน บังคับฉันอีอาจเป็นอย่างนั้นใช่ไหม คำตอบที่คุณเชื่อมโยงดูเหมือนจะตอบคำถามข้อนั้นดี เป็งเผชิญหน้ากับความจริงระดับนั่นจะเป็นประโยชน์,ไม่,มันไม่ดูเหมือนจะเป็นอย่างนั้น
relativePath
ในกรณีนี้เป็นไดเร็กทอรีชั่วคราวซึ่งก็คือสร้าง มุมมอง ไปเชิดหน้าบนดิสก์ได้ มันดูเหมือนว่ามันเป็น cloning ที่เชิดหน้านั้นกำลังยกเลิกระบบของเส้นทาง(quarantinedRepo.GitObjectDirectory = relativePath
)ใน quarantineRepo
วัตถุสนใจไปที่ tempdir(ซึ่งตรงข้ามกับสิ่งที่ฉันคิดว่าเป็นค่าปริยายของจริงสาวนั่นเป็นสิ่งที่ฟื้นขึ้นจากโคลนวิธีการ).
git clone --shared
.