Saya merasa seperti anak kecil di kantor kepala sekolah yang menjelaskan bahwa anjing itu memakan pekerjaan rumah saya pada malam sebelum waktunya, tetapi saya memandangi beberapa bug kehilangan data gila di wajah dan saya tidak tahu bagaimana hal itu terjadi. Saya ingin tahu bagaimana git bisa memakan seluruh repositori saya! Saya telah memasukkan git melalui alat pemeras berkali-kali dan tidak pernah berkedip. Saya telah menggunakannya untuk membagi repo Subversion 20 Gig menjadi repo 27 git dan menyaring foo keluar dari mereka untuk mengurai kekacauan dan tidak pernah kehilangan satu byte pada saya. Reflog selalu ada untuk digunakan kembali. Kali ini karpetnya hilang!
Dari sudut pandang saya, yang saya lakukan hanyalah menjalankan git pull
dan menghapus seluruh repositori lokal saya. Saya tidak bermaksud itu "mengacaukan versi check out" atau "cabang tempat saya berada" atau semacamnya. Maksudku semuanya hilang .
Berikut adalah cuplikan layar terminal saya saat kejadian:
Biarkan saya memandu Anda melalui itu. Command prompt saya menyertakan data tentang repo git saat ini (menggunakan implementasi vcs_info prezto) sehingga Anda dapat melihat kapan repo git menghilang. Perintah pertama cukup normal:
» caleb » jaguar » ~/p/w/incil.info » ◼ zend ★ »
❯❯❯ git co master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
Di sana Anda dapat melihat saya berada di cabang 'zend', dan memeriksa master. Sejauh ini bagus. Anda akan melihat pada prompt sebelum perintah saya berikutnya bahwa ia berhasil mengganti cabang:
» 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
Dan begitu saja itu hilang. Marker waktu yang telah berlalu menampilkan sebelum prompt berikutnya jika lebih dari 10 detik telah berlalu. Git tidak memberikan output apa pun di luar pemberitahuan bahwa ia memutar ulang untuk diputar ulang. Tidak ada indikasi bahwa itu selesai.
Prompt berikutnya tidak menyertakan data tentang cabang apa yang kita gunakan atau status git.
Tidak menyadari bahwa itu telah gagal, saya dengan tidak sengaja mencoba menjalankan perintah git yang lain hanya untuk diberi tahu bahwa saya tidak berada dalam git repo. Perhatikan PWD tidak berubah:
» 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).
Setelah ini melihat-lihat menunjukkan bahwa saya berada di direktori yang benar-benar kosong. Tidak ada. Tidak ada direktori '.git', tidak ada. Kosong.
Git lokal saya ada di versi 2.0.2. Berikut adalah beberapa berita dari konfigurasi git saya yang mungkin relevan untuk mengetahui apa yang terjadi:
[branch]
autosetuprebase = always
rebase = preserve
[pull]
rebase = true
[rebase]
autosquash = true
autostash = true
[alias]
co = checkout
Sebagai contoh saya telah git pull
menetapkan untuk selalu melakukan rebase bukan penggabungan, sehingga bagian dari output di atas normal.
Saya dapat memulihkan data. Saya tidak berpikir ada objek git selain beberapa simpanan tidak penting yang belum didorong ke repo lain, tapi saya ingin tahu apa yang terjadi .
Saya telah memeriksa untuk:
- Pesan di dmesg atau jurnal systemd. Tidak ada yang bahkan relevan.
- Tidak ada indikasi kegagalan drive atau sistem file (LVM + LUKS + EXT4 semuanya terlihat normal). Tidak ada yang hilang + ditemukan.
- Saya tidak menjalankan apa pun. Tidak ada dalam sejarah saya tidak menunjukkan di atas, dan tidak ada terminal lain yang digunakan selama waktu ini. Tidak ada
rm
perintah yang beredar yang mungkin telah dieksekusi di CWD yang salah, dll. - Mengolok-olok repo git lain di direktori lain tidak menunjukkan kelainan nyata
git pull
s.
Apa lagi yang harus saya cari di sini?
.git
tidak tidak ada. Tidak ada yang berhasil — apa yang dulunya adalah direktori git root tidak memiliki apa-apa di dalamnya.