ฉันรู้สึกเหมือนเด็กในสำนักงานใหญ่อธิบายว่าสุนัขกินการบ้านของฉันในคืนก่อนที่จะถึงกำหนด แต่ฉันกำลังดูข้อผิดพลาดการสูญเสียข้อมูลบางอย่างที่บ้าในหน้าและฉันไม่สามารถเข้าใจได้ว่ามันเกิดขึ้นได้อย่างไร ฉันอยากรู้ว่าคอมไพล์กินพื้นที่เก็บข้อมูลของฉันได้อย่างไร! ฉันใส่คอมไพล์ผ่านนักเขียนหลาย ๆ ครั้งและมันก็ไม่เคยกระพริบ ฉันเคยใช้มันเพื่อแบ่ง repo 20 Gig Subversion ออกเป็น 27 repos git และกรองตัว foo ออกจากพวกมันเพื่อแก้ปัญหายุ่งเหยิงและมันก็ไม่เคยสูญเสียไบต์บนฉัน reflog อยู่ที่นั่นเสมอเพื่อถอยกลับ คราวนี้พรมหมดแล้ว!
จากมุมมองของฉันสิ่งที่ฉันทำก็คือการเรียกใช้git pull
และมันทำให้พื้นที่เก็บข้อมูลในเครื่องของฉันหมด ฉันไม่ได้หมายความว่า "ทำให้สับสนรุ่นที่เช็คเอาต์" หรือ "สาขาที่ฉันไป" หรืออะไรทำนองนั้น ผมหมายถึงสิ่งทั้งหมดจะหายไป
นี่คือภาพหน้าจอของเทอร์มินัลของฉันในเหตุการณ์:
ให้ฉันแนะนำคุณผ่านสิ่งนั้น พรอมต์คำสั่งของฉันมีข้อมูลเกี่ยวกับ repo git ปัจจุบัน (โดยใช้การนำ vcs_info ของ prezto) เพื่อให้คุณสามารถดูว่า git repo หายไปเมื่อใด คำสั่งแรกนั้นปกติพอ:
» caleb » jaguar » ~/p/w/incil.info » ◼ zend ★ »
❯❯❯ git co master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
คุณจะเห็นว่าฉันอยู่ที่สาขา 'zend' และเช็คเอาท์อาจารย์ จนถึงตอนนี้ดีมาก คุณจะเห็นในพรอมต์ก่อนคำสั่งถัดไปของฉันที่จะเปลี่ยนสาขาได้สำเร็จ:
» caleb » jaguar » ~/p/w/incil.info » ◼ master ★ »
❯❯❯ git pull
remote: Counting objects: 37, done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 37 (delta 25), reused 0 (delta 0)
Unpacking objects: 100% (37/37), done.
From gitlab.alerque.com:ipk/incil.info
+ 7412a21...eca4d26 master -> origin/master (forced update)
f03fa5d..c8ea00b devel -> origin/devel
+ 2af282c...009b8ec verse-spinner -> origin/verse-spinner (forced update)
First, rewinding head to replay your work on top of it...
>>> elapsed time 11s
และเช่นเดียวกับที่มันหายไป ตัวทำเครื่องหมายเวลาที่ผ่านไปจะแสดงผลออกมาก่อนการแจ้งเตือนครั้งถัดไปหากผ่านไปนานกว่า 10 วินาที Git ไม่ได้ให้ผลลัพธ์ใด ๆ นอกเหนือจากการแจ้งว่ามีการกรอกซ้ำเพื่อเล่นซ้ำ ไม่มีข้อบ่งชี้ว่าเสร็จแล้ว
พรอมต์ถัดไปจะไม่มีข้อมูลเกี่ยวกับสาขาที่เราเปิดหรือสถานะของคอมไพล์
การไม่สังเกตเห็นว่ามันล้มเหลวฉันพยายามเรียกใช้คำสั่ง git อื่นเพียงเพื่อบอกว่าฉันไม่ได้อยู่ใน repo git โปรดทราบว่า PWD ไม่ได้เปลี่ยนแปลง:
» caleb » jaguar » ~/p/w/incil.info »
❯❯❯ git fetch --all
fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
หลังจากนี้ดูรอบ ๆ แสดงให้เห็นว่าฉันอยู่ในไดเรกทอรีว่างเปล่าอย่างสมบูรณ์ ไม่มีอะไร ไม่มีไดเรกทอรี '.git' ไม่มีอะไรเลย ว่างเปล่า
คอมไพล์ท้องถิ่นของฉันเป็นเวอร์ชัน 2.0.2 ต่อไปนี้เป็นเกร็ดความรู้สองสามข้อจากการตั้งค่า git ของฉันที่อาจเกี่ยวข้องกับการทำสิ่งที่เกิดขึ้น:
[branch]
autosetuprebase = always
rebase = preserve
[pull]
rebase = true
[rebase]
autosquash = true
autostash = true
[alias]
co = checkout
ตัวอย่างเช่นฉันได้git pull
ตั้งค่าให้ทำการ rebase แทนการผสานเสมอดังนั้นส่วนของเอาต์พุตด้านบนจึงเป็นเรื่องปกติ
ฉันสามารถกู้คืนข้อมูล ฉันไม่คิดว่ามีคอมไพล์ใด ๆ วัตถุอื่นที่ไม่ใช่ stashes สำคัญบางอย่างที่ไม่ได้รับการผลักดันให้ Repos อื่น ๆ แต่ผมอยากจะรู้ว่าสิ่งที่เกิดขึ้น
ฉันได้ตรวจสอบ:
- ข้อความใน dmesg หรือ systemd journal ไม่มีอะไรที่เกี่ยวข้องกับระยะไกล
- ไม่มีข้อบ่งชี้ว่าไดร์ฟหรือระบบไฟล์ล้มเหลว (LVM + LUKS + EXT4 ทั้งหมดดูเป็นปกติ) ไม่มีอะไรหายไป + พบ
- ฉันไม่ได้ทำอะไรเลย ไม่มีอะไรในประวัติศาสตร์ที่ฉันไม่ได้แสดงไว้ข้างต้นและไม่มีขั้วอื่นใดถูกใช้ในช่วงเวลานี้ ไม่มี
rm
คำสั่งลอยอยู่รอบ ๆ ที่อาจมีการดำเนินการใน CWD ผิด ฯลฯ - poking ที่ repo git อื่นในไดเรกทอรีอื่นไม่แสดงความผิดปกติที่กำลังดำเนินการ
git pull
s
ฉันควรมองหาอะไรที่นี่?
.git
อยู่ ไม่มีสิ่งใด - สิ่งที่เคยเป็นไดเรกทอรีราก git ไม่มีอะไรในนั้น