Git แข็งแกร่งแค่ไหนเมื่อพลังดับ?


24

วันหนึ่งฉันใช้ Git (ฉันยังใช้อยู่) และไฟฟ้าดับลงในขณะที่ฉันกำลังคอมมิท

เมื่อฉัน (ที่จริงแล้วไฟฟ้า) กลับมา, repo คอมไพล์เสียหาย ฉันจำชื่อที่แน่นอนไม่ได้ แต่มันก็เหมือนกับ "refs ที่ไม่ถูกต้อง" หรืออะไรทำนองนั้น

มันง่ายที่จะคาดเดาว่าการกระทำผิดปกติในระหว่างการดำเนินการ (ฉันกระทำผ่าน IntelliJ ซึ่งทำการเพิ่มดัชนีโดยอัตโนมัติ) นอกจากนี้ยังง่ายต่อการคาดเดาว่าที่จริงแล้ว 'กระทำ' ไม่ได้เป็นกรดเช่นเดียวกับการดำเนินงาน DBMS ที่มีชื่อเดียวกัน

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


10
ซื้อ UPS หรือไม่ .....
Robert Harvey

ทำการสำรองข้อมูลรายวันหรือไม่
วงล้อประหลาด

มันไม่ได้แก้ปัญหา - จินตนาการว่า repo git อยู่บนเซิร์ฟเวอร์และ I PUSH จาก repo ในพื้นที่และในขณะเดียวกันเมื่อทำการคอมมิทในเซิร์ฟเวอร์พลังงานจะลดลงอีกครั้ง ปัญหาเดียวกัน แต่คราวนี้ไม่มีมนุษย์
Luis Masuelli

คำตอบ:


10

ฉันไม่รู้ว่ามีวิธีที่จะทำให้ Git หลุดรอดจากความล้มเหลวของพลังงานหรือไม่ แต่คุณสามารถแก้ไขที่เก็บข้อมูลได้

วัตถุ Git ควรจะไม่เปลี่ยนรูปดังนั้นการกระทำที่เก่ากว่าทั้งหมดของคุณควรจะยังคงใช้ได้ ตามคำตอบนี้คุณสามารถเปลี่ยนแฮช.git/refs/heads/<branch-name>เพื่อเปลี่ยนหัวของสาขาที่คุณกำลังทำงานอยู่กับการกระทำก่อนหน้า (คุณสามารถเห็นพวกเขาใน.git/logs/HEAD)

ความคิดเห็นต่อคำตอบนั้นบอกว่าวิธีนี้ "ยังคงเก็บที่เก็บอยู่ในสถานะใช้งานไม่ได้ ฉันไม่ได้ทดสอบเรื่องนี้ (ไม่รู้ว่าจะทำซ้ำสถานการณ์ของคุณ) แต่ฉันคิดว่าการกู้คืนจะทำผ่านgit gcที่จะลบกระทำความเสียหาย


6
"ไม่รู้จะทำอย่างไรในสถานการณ์ของคุณ" ดึงปลั๊ก? ;)
yannis

3
@YannisRizos บางทีถ้านี่เป็น SVN แต่กระทำ Git เป็นเร็วเกินไปสำหรับความสามารถในการกำหนดเวลาของมนุษย์ ...
Idan Arye

5
Git เป็นโอเพ่นซอร์สจริงไหม? ดังนั้นในการทำให้เกิดปัญหาอีกครั้งให้สร้างรหัสตั้งค่าเบรกพอยต์ก่อนบันทึกข้อมูลลงดิสก์ - แล้วดึงปลั๊ก
John Saunders

10

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

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


5
หากคุณไม่ผลักสาขาของคุณอย่าสำรองข้อมูลและไม่ใช่ UPS คุณเพียง แต่โทษตัวเองหากปัญหาฮาร์ดแวร์ล้างทั้งหมด คุณมีเครื่องมือ…
Donal Fellows

1
ไม่มีวิธีใดหรือปลั๊กอินในการตรวจสอบให้แน่ใจว่าการดำเนินการของ git นั้นเป็นธุรกรรมหรือไม่? หากตัวเลือกดังกล่าว - หรือปลั๊กอิน - อยู่ฉันจะไม่สนใจพวกเขา (เช่นการดำเนินงาน) จะช้าลง โชคดีที่ฉันไม่มีปัญหาฮาร์ดแวร์ น่าเสียดายที่พลังงานหยุดทำงานบ่อยครั้ง (การพูดหนึ่งครั้งต่อสองสัปดาห์จะมีสถานะเป็นของตัวเอง) ในอาคารนี้และฉันเขียนรหัสตลอดเวลาและไม่มี UPS โชคดีที่ฉัน remoting (โคลน / ผลัก) เพื่อ github น่าเสียดายที่ฉันเสียเวลาเมื่อต้องย้อนกลับทุกอย่างและทำซ้ำโครงการอีกครั้ง
Luis Masuelli

2
ไฟดับบ่อยขณะทำงานหมายความว่าคุณเพิ่มความเสี่ยงต่อความเสียหายของระบบไฟล์อย่างมากหากไม่ทำให้ฮาร์ดแวร์เสียหาย ฉันสงสัยว่าทำไมคุณไม่สนุกกับความคิดในการซื้อ UPS ซึ่งจะแก้ปัญหาที่อธิบายไว้ส่วนใหญ่ที่คุณมีอยู่และอาจเป็นคำตอบที่ดีที่สุด
Bart Silverstrim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.