मैं प्रिंसिपल के कार्यालय में एक बच्चे की तरह समझाता हूं कि कुत्ते ने मेरे होमवर्क को रात होने से पहले ही खा लिया था, लेकिन मैं चेहरे पर कुछ पागल डेटा हानि बग को घूर रहा हूं और मैं यह पता नहीं लगा सकता कि यह कैसे हुआ। मैं जानना चाहूंगा कि git मेरे भंडार को कैसे खा सकता है! मैंने कई बार झुर्रियों के माध्यम से पकड़ लिया है और यह कभी भी झपकी नहीं है। मैंने इसका इस्तेमाल एक 20 गिग सबवर्सन रेपो को 27 git repos में विभाजित करने के लिए किया है और गंदगी को बाहर निकालने के लिए उनमें से foo-branched फिल्टर किया है और यह कभी भी मुझ पर बाइट नहीं खोया है। रिफ्लोगी हमेशा वापस गिरने के लिए होता है। इस समय कालीन चला गया है!
मेरे दृष्टिकोण से, मैंने जो कुछ किया था, वह सब चला git pull
और इसने मेरे पूरे स्थानीय भंडार को नंगा कर दिया। मेरा मतलब यह नहीं है कि "चेक आउट संस्करण गड़बड़" या "मैं जिस शाखा पर था" या ऐसा कुछ भी। मेरा मतलब है कि पूरी बात खत्म हो गई है ।
यहाँ घटना पर मेरे टर्मिनल का स्क्रीन-शॉट है:
चलो मैं तुम्हें उसी के माध्यम से चलता हूं। मेरे कमांड प्रॉम्प्ट में वर्तमान git रेपो (prezto के vcs_info कार्यान्वयन का उपयोग करके) के बारे में डेटा शामिल है ताकि आप देख सकें कि git रेपो कब गायब हो गया। पहला आदेश सामान्य है:
» caleb » jaguar » ~/p/w/incil.info » ◼ zend ★ »
❯❯❯ git co master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
वहां आप देख सकते हैं कि मैं 'ज़ेंड' शाखा पर था, और मास्टर की जाँच की। अब तक सब ठीक है। आप मेरी अगली कमांड से पहले प्रॉम्प्ट में देखेंगे कि उसने सफलतापूर्वक शाखाएँ बदल दी हैं:
» 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 कमांड चलाने की कोशिश की है, केवल यह बताया जाए कि मैं git रेपो में नहीं था। ध्यान दें पीडब्ल्यूडी नहीं बदला है:
» 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' निर्देशिका, कुछ नहीं। खाली।
मेरा स्थानीय git संस्करण 2.0.2 पर है। यहाँ मेरे git config के कुछ tidbits हैं जो कि क्या हुआ बनाने के लिए प्रासंगिक हो सकते हैं:
[branch]
autosetuprebase = always
rebase = preserve
[pull]
rebase = true
[rebase]
autosquash = true
autostash = true
[alias]
co = checkout
उदाहरण के लिए मैंने git pull
मर्ज के बजाय हमेशा रिबास करने के लिए सेट किया है, ताकि ऊपर के आउटपुट का हिस्सा सामान्य हो।
मैं डेटा रिकवर कर सकता हूं। मुझे नहीं लगता कि कुछ महत्वकांक्षी लड़ाइयों के अलावा कोई अन्य वस्तुएं थीं जो अन्य रिपॉजिट को नहीं धकेलती थीं, लेकिन मैं जानना चाहती हूं कि क्या हुआ ।
मैंने इसके लिए जाँच की है:
- Dmesg या systemd जर्नल में संदेश। दूर से भी प्रासंगिक कुछ नहीं।
- ड्राइव या फ़ाइल सिस्टम की विफलता (LVM + LUKS + EXT4 सभी सामान्य दिखते हैं) का कोई संकेत नहीं है। खोया + पाया कुछ भी नहीं है।
- मैंने कुछ और नहीं चलाया। इतिहास में ऐसा कुछ भी नहीं है जो मैं ऊपर नहीं दिखा रहा हूं, और इस दौरान किसी अन्य टर्मिनल का उपयोग नहीं किया गया था। ऐसी कोई भी
rm
कमांड नहीं है जो गलत CWD आदि में निष्पादित हो सकती है। - एक और निर्देशिका में दूसरे git रेपो पर पोक करने से कोई स्पष्ट असामान्यता नहीं दिखाई देती है
git pull
।
मुझे यहां और क्या चाहिए?
.git
मौजूद नहीं है। कुछ भी नहीं करता है- जो रूट रूट डायरेक्टरी हुआ करता था, उसमें कुछ भी नहीं है।