ฉันสงสัยในวันนี้ว่า git นั้นช่วยให้มั่นใจในความสมบูรณ์ของข้อมูลเมตาและฉันรู้สึกประหลาดใจเล็กน้อยกับสิ่งที่ฉันพบ ฉันใช้การตั้งค่าอย่างง่ายต่อไปนี้สำหรับการทดสอบ:
- ที่ทำงานสองแห่งที่เรียกว่า
x
และy
- พื้นที่เก็บข้อมูลเปลือยที่เรียกว่า
xy.git
ดังนั้นในตอนแรกx
และy
มีการผลักดันและดึงx.git
และทุกอย่างทำงานได้ดี ทีนี้สมมติว่าหนึ่งในวัตถุเมทาดาทา ( .git/objects/...
) ในx.git
เสียหายด้วยเหตุผลใดก็ตาม (เลือกเหตุการณ์สุ่มที่คุณชื่นชอบ)
จริง ๆ แล้วฉันคิดว่ามีบางอย่างจะหยุดลงที่การผลักหรือดึงครั้งต่อไป แต่ด้วยความประหลาดใจของฉันทุกอย่างดูเหมือนจะทำงานได้ดี ความมุ่งมั่นมากขึ้นผลักและดึงได้มากขึ้นไม่มีปัญหา ครั้งแรกที่มีรายงานว่ามีความเสียหายเกิดขึ้นเมื่อฉันพยายามโคลนที่เก็บข้อมูลที่ใช้งานได้อีกแห่งหนึ่งจากที่เก็บที่เปลือยเปล่าทำให้โคลนของฉันอยู่ในสภาพที่ใช้ไม่ได้
ตอนนี้ฉันคิดว่ามันไม่ได้เลวร้ายเพราะด้วยสถาปัตยกรรมของ git ฉันสามารถทิ้งที่เก็บเปล่าในกรณีที่เลวร้ายที่สุดและสร้างมันขึ้นมาใหม่ด้วยประวัติทั้งหมดจากชุดการทำงานของฉัน แต่ไม่มี. ไฟล์ที่เสียหายได้ดำเนินการผ่านการดึงลงในที่เก็บข้อมูลที่ใช้งานได้ทำให้ไม่สามารถโคลนที่เก็บเปลือยใหม่จากพวกเขาได้เช่นกัน
สิ่งนี้ไม่เพียงเกิดขึ้นเมื่อฉันเริ่มต้นด้วยไฟล์ที่เสียหายในพื้นที่เก็บข้อมูลเปล่า แต่ก็เป็นไปได้ที่จะแนะนำไฟล์ที่เสียหายจากพื้นที่เก็บข้อมูลที่ใช้งานได้ในพื้นที่ว่างเปล่าด้วยวิธีนี้
แน่นอนว่าเราสามารถแก้ไขปัญหานี้ได้ด้วยวิธีอื่น แต่ฉันก็ยังประหลาดใจ (และกังวลเล็กน้อย) ว่ามันง่ายแค่ไหนที่จะทำให้พื้นที่เก็บข้อมูลสับสนสำหรับทุกคนที่ทำงานกับมัน โดยเฉพาะอย่างยิ่งเนื่องจากข้อผิดพลาดยังคงไม่มีใครสังเกตจนกว่าจะมีคนพยายามโคลนครั้งต่อไป ไม่ควรมีการตรวจสอบสิ่งนี้ที่ใดที่หนึ่งอย่างใด?
ใครที่นี่อยากลองทำซ้ำไหม ฉันทดลองกับ git เวอร์ชั่น 2.7.4
คำแนะนำเกี่ยวกับวิธีการตรวจสอบการทุจริตดังกล่าวยินดีต้อนรับอย่างมาก