2014-10-04 7 views
10

मैं गिट करने के लिए बहुत नया हूं और छेड़छाड़ के बारे में कुछ सवाल है। अगर मैंने एक शाखा में काम किया है लेकिन वह ऐसी स्थिति में नहीं पहुंच पा रहा है जहां मैं शाखा कर सकता हूं, तो छेड़छाड़ करना सही बात है। छेड़छाड़ के बारे में मेरे प्रश्न हैं:गिट द्वारा कितने समय तक बचाए जाते हैं?

  1. कितने स्टैश बचाए जाते हैं?
  2. ये स्टैश कितनी देर तक सहेजी गई हैं?
  3. क्या वे केवल अस्थायी रूप से कार्य को सहेजते हैं जैसे कि जब आप अपने कंप्यूटर को रीबूट करते हैं तो परिवर्तन खो जाते हैं?

यदि कोई व्यक्ति स्पष्ट रूप से इन्हें स्पष्ट करने में सहायता कर सकता है तो इसकी सराहना की जाएगी।

+2

1. जितना आप बनाते हैं। 2. जब तक आप * ड्रॉप *, * पॉप *, या * साफ़ * नहीं करते हैं। 3. नहीं; रिबूट के बाद भी स्टैश उपलब्ध हो जाएगा। Http://git-scm.com/book/en/Git-Tools- Stashing – Jubobs

+0

डाउनवॉटर देखें, प्रश्न आपके विचार से अधिक सूक्ष्म हो सकता है ... – Jubobs

+1

गिट में आप लगभग ऐसी स्थिति में नहीं हैं जहां आप नहीं कर सकते प्रतिबद्ध। मैं व्यक्तिगत रूप से उपयोगी होने के लिए छेड़छाड़ नहीं करता हूं। –

उत्तर

15

1 - कितने स्टैश बचाए जाते हैं?

स्टैश पतली हवा से बाहर नहीं दिखते हैं; केवल यदि आप उन्हें बनाने के लिए,

git stash 

या समतुल्य

git stash save 

तो कितने सहेजे जाते हैं का उपयोग कर? जितना आप बनाते हैं।

2 - ये स्टैश कितने समय से बचाए गए हैं?

यह प्रश्न निर्दोष दिखता है, लेकिन उत्तर वास्तव में काफी सूक्ष्म है। यहां विचार करने के लिए दो पहलू हैं: 1) स्टैश रीफ्लॉग, और 2) रिपोजिटरी का ऑब्जेक्ट डेटाबेस। एक है कि से मेल खाती है:

जब आप एक गुप्त कोष बनाने के लिए, Git

  • गुप्त कोष reflog के लिए कोई प्रविष्टि,
  • दो (तीन अगर आप --include-untracked ध्वज का उपयोग करें) बनाता में भंडार के डेटाबेस वस्तुओं के लिए प्रतिबद्ध कहते हैं आपके कामकाजी पेड़ में डब्ल्यूआईपी (प्रगति पर काम), और दूसरा जो आपके स्टेजिंग क्षेत्र (उर्फ इंडेक्स) की स्थिति से मेल खाता है।

संपादित करें: उन प्रतिबद्ध वस्तुएं पूरी तरह से काम करती हैं, जिन्हें git cat-file -t चलाकर सत्यापित किया जा सकता है। वे किसी भी शाखा से पहुंचने योग्य नहीं होते हैं; torek's comment देखें।

डिफ़ॉल्ट रूप से, गिट का कचरा संग्रह स्वचालित रूप से 90 दिनों से अधिक पुराने रीफ्लॉग प्रविष्टियों को हटा देगा; यदि आप किसी अन्य गुप्त कोष reflog प्रविष्टियों के लिए "जीवनकाल" निर्दिष्ट कर सकते हैं

git config gc.refs/stash.reflogexpire <lifetime> 

कचरा-संग्रह तंत्र ऊपर वर्णित है, Git अपने आप ही stashes नहीं हटेंगे अलावा चलाकर; एक गुप्त कोष (कम से कम 90 दिनों के लिए) अपने स्थानीय भंडार में रहेगा जब तक आप यह स्वेच्छा से नहीं

  • ड्रॉप करते हैं, का उपयोग कर

    git drop <stash-reference> 
    

    जहाँ से निर्दिष्ट गुप्त कोष में प्रवेश को हटा देता है स्टैश रीफ्लॉग;

  • पॉप यह,

    git pop <stash-reference> 
    

    का उपयोग करके निर्दिष्ट गुप्त कोष में लागू होता है और उसके बाद जो गुप्त कोष reflog से इसी प्रविष्टि को हटा देता है; या

  • रन

    git stash clear 
    

जो गुप्त कोष reflog की सभी प्रविष्टियों को हटा देता है (है कि एक के साथ सावधान रहना)।

हालांकि, ध्यान रखें कि ये तीन कार्य केवल स्टैश रीफ्लॉग को प्रभावित करते हैं। विशेष रूप से, वे तुरंत आपके डिपॉजिट के डेटाबेस से संबंधित "डब्ल्यूआईपी" और "इंडेक्स" ऑब्जेक्ट्स को हटा नहीं देते हैं; वे केवल उन वस्तुओं को पहुंचने योग्य बनाते हैं। उत्तरार्द्ध थोड़ी देर के लिए "भंडार लिम्बो" में रहेगा, जब तक कि अंततः उन्हें कचरा इकट्ठा नहीं किया जाता और "सच्ची मौत" मर जाती है।

एक उपयोगी चीज पता करने के लिए है कि: यदि आपने गलती से ड्रॉप एक गुप्त कोष में, आप अभी भी अपने रेपो की अंतड़ियों से प्राप्त कर तुम्हें याद या पहचान कर सकते हैं अगर इसके दो वस्तुओं की शास सक्षम हो सकता है (WIP और इंडेक्स)।

3 - वे सिर्फ अस्थायी रूप से काम को बचाने करो परिवर्तन खो रहे हैं ऐसी है कि जब आप अपने कंप्यूटर को रीबूट?

सं stashes कोई से किसी भी अन्य वस्तुओं के लिए प्रतिबद्ध भिन्न हैं; एक रिबूट पर कोई प्रभाव नहीं पड़ता है।

+3

साइड नोट: वे सिर्फ "प्रतिबद्ध-जैसी वस्तुएं" नहीं हैं, वे वास्तव में प्रतिबद्ध हैं: वे केवल * नो * शाखा पर हैं। मैं कहूंगा "दो प्रतिबद्ध-जैसी वस्तुओं को बनाता है" के बजाय "दो काम करता है"। और, 'स्टैश' रेफरी में "कभी नहीं" का एक विशेष असामान्य डिफ़ॉल्ट समाप्ति समय होता है। – torek

+1

@torek मुझे 'git cat-file -t' के साथ दोबारा जांचना पड़ा, लेकिन आप उन वस्तुओं के बारे में सही हैं। हालांकि, जहां दस्तावेज़ में यह उल्लेख किया गया है कि 'स्टैश' रेफरी समाप्त नहीं हो जाती है? – Jubobs

+5

यह रिलीज नोट्स के अलावा अन्य सभी पर शायद खराब नहीं है। 'बिल्टिन/reflog.c' में यह बिट है, हालांकि:' अगर (! Strcmp (ref, "refs/stash")) {'कोड को" कभी नहीं "की समाप्ति सेट करने के लिए, और टिप्पणी:" अगर कॉन्फ़िगर नहीं किया गया है, छेड़छाड़ कभी खत्म नहीं होता "। यह पूरी तरह से स्पष्ट नहीं है कि 'if' परीक्षण के अंदर अतिरिक्त कोड (यहां नहीं दिखाया गया है), हालांकि, यह "कभी नहीं" की समाप्ति को सेट करने से पहले। – torek

3

गिट स्टैश तब तक सहेजे जाते हैं जब तक कि आपकी हार्ड डिस्क मर जाती है (ऐसा लगता है कि आमतौर पर git push के माध्यम से किसी अन्य कंप्यूटर पर प्रेषित किया जाता है, इसलिए हार्ड डिस्क विफलता से बाहर निकल जाएगा)।

आप जितनी चाहें उतनी स्टैश कर सकते हैं। git stash drop या git stash clear (उन लोगों के लिए दस्तावेज़ पढ़ें) चलाकर आपको ऐसा लगता है जब पुराने लोगों से छुटकारा पाएं।

संबंधित मुद्दे