2011-12-05 37 views
10

git के साथ खेलते समय, मैं कभी-कभी चीजों को आज़माता हूं, फिर आदेशों को निरस्त करता हूं जो बहुत अधिक समय लेते हैं (उदा। कुछ git svn आदेश जो नेटवर्क समस्याओं के दौरान लटकते हैं)। यह मुझे सोच रहा है:क्या कोई गिट रिपॉजिटरी दूषित हो सकता है यदि कोई कमांड संशोधित करता है या इसे निरस्त कर दिया जाता है?

क्या यह हमेशा एक आदेश (Ctrl-C या kill) को मजबूर करने के लिए सुरक्षित है? क्या होगा अगर कोई आदेश क्रैश हो जाए (स्मृति, बग, नेटवर्क/एफएस समस्या से बाहर)? क्या रिपोजिटरी इस अर्थ में "लेनदेन" बदलती है कि अपूर्ण परिवर्तन "लुढ़का हुआ वापस" (एक संस्करण फाइल सिस्टम में) हैं? या क्या मुझे उस मामले में भंडार भ्रष्टाचार का खतरा है?

मुझे यकीन है कि गिट पर काम करने वाले स्मार्ट लोगों ने इसे ध्यान में रखा होगा, फिर भी मुझे गिट मैनुअल या ऑनलाइन में कोई जानकारी नहीं मिली।

उत्तर

9

भंडार पूरी तरह से लेनदेन है, हां।

कार्य का पेड़ लगभग लेनदेन है, लेकिन एक कोने का मामला है जिसे आसानी से निपटाया जा सकता है। चेकआउट सभी आवश्यक जांच करता है और अस्थायी फ़ाइलों को नई सामग्री लिखता है और उस समय के दौरान, यदि आप इसे बाधित करते हैं तो कुछ भी संशोधित नहीं होता है। लेकिन फिर यह पेड़ों को एक-एक करके फाइलों का नाम बदल रहा है और आखिर में हेड रेफ अपडेट करता है और उस चरण में बाधा डालती है जिससे आप पेड़ में आंशिक परिवर्तन कर सकते हैं। परमाणु रूप से ऐसा करने की अनुमति देने के लिए कोई सामूहिक नाम नहीं है।

+0

क्या आपके पास कोई संदर्भ (गिट स्रोत या दस्तावेज़ीकरण) है कि रेपो और पुश एक्शन ट्रांजैक्शनल हैं? –