गेट स्टेजिंग: स्टेज पर कब जाएं? यदि बाद में संशोधन होता है तो क्या करना है


9

मैं Git की व्यापक दुनिया में नया हूँ। मैंने मैनुअल पढ़ा है और अभ्यास कर रहा हूं, लेकिन मैं इसके कुछ पहलुओं के बारे में उलझन में हूं, जिन्हें मैं खोज करने के बाद समझ नहीं पाया।

मैं भटक रहा हूँ:

  • एक परियोजना में (पहली प्रतिबद्ध बाद), स्रोत फ़ाइलों को चरणबद्ध करने का सही समय कब है? सही करने से पहले? सही जोड़ने / हटाने या संशोधित करने के बाद?

  • यदि फ़ाइलों को दो आवागमन के बीच बीच में मंचन किया जाता है, और फिर वे संशोधित हो जाते हैं, तो गिट के साथ क्या होता है? क्या सामग्री परिवर्तन के बारे में देखभाल की आवश्यकता है जब यह कहा गया था और यह कब से बन गया है?

  • यदि मैं एक नई फ़ाइल बनाता हूं, तो उसे चरणबद्ध करें और फिर उसे हटाना चाहते हैं, तो Git मुझे "-f" ध्वज और एक सरल "git -rm file.ext" का उपयोग करने के लिए क्यों नहीं कहेगा?

मैंने "व्हाट स्टेज का मतलब" पढ़ा है और गिट पर मैनुअल और अन्य ट्यूटोरियल के विभिन्न विषयों लेकिन जैसा कि मैंने कहा, मैं अभी भी उपरोक्त मामलों को नहीं समझता हूं।

इसलिए, यदि आप कर सकते हैं, तो कृपया अपने शब्दों और उदाहरणों के साथ प्रश्नों का उत्तर दें ताकि मुझे इसे समझने का बेहतर मौका मिल सके।

धन्यवाद।


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

जवाबों:


4

मंचन क्षेत्र का उद्देश्य आपकी प्रतिबद्धता के लिए एक लचीला स्थान होना है। मुझे लगता है कि यह स्पष्ट हो जाएगा यदि आप संस्करण नियंत्रण प्रणालियों के विपरीत गिट को नियंत्रित करते हैं जो केंद्रीयकृत हैं, जैसे कि तोड़फोड़।

विनाश

तोड़फोड़ में आप अपने काम की नकल की कुछ फ़ाइलों का चयन कर सकते हैं। लेकिन केवल पूरी फाइलें। अब: क्या होगा यदि आप फाइल को स्टेज करना चाहते हैं A, फाइल को नहीं B, और फाइल के हिस्से जो फाइल Cसे संबंधित हैं, Aअभी तक उन हिस्सों को नहीं जो फाइल में बदलाव पर निर्भर करते हैं B(तब से आपको कमिटमेंट में समस्या होगी)।

Git

Git इसे प्रदान करता है मंचन दूसरी कार्य प्रतिलिपि के रूप में प्रदान करता है। मंचन क्षेत्र के भीतर आप एक स्नैपशॉट डाल रहे हैं जिसे आप प्रतिबद्ध करेंगे (मोटे तौर पर बोलना)।

इसलिए मचान क्षेत्र के भीतर आप एक स्नैपशॉट बना सकते हैं जिसमें परिवर्तन Aऔर फ़ाइल का एक संस्करण शामिल है Cजो केवल परिवर्तनों को दर्शाता है A

विशिष्ट प्रश्नों के लिए

  • आप किसी भी बिंदु पर आप चाहते हैं मंच कर सकते हैं। इससे पहले कि मैं कमिटमेंट लॉन्च करूं, मैं व्यक्तिगत रूप से सही स्टेज करना पसंद करता हूं।

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

  • Git यहां सतर्क है, जो शायद एक अच्छी बात है।

सामान्य प्रतिबद्ध रणनीति: बारीक काम करता है

मुझे लगता है कि जब "मुझे कब मंच देना चाहिए" सवाल के बारे में बात करनी चाहिए, तो व्यक्ति को प्रतिबद्ध आदतों के बारे में भी बात करनी चाहिए।

केंद्रीकृत वीसीएस

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

Git

Git में एक कमिट स्थानीय रूप से किया जाता है, केवल उन्हें सर्वर पर धकेलने से वह सार्वजनिक हो जाता है। इसलिए कमिट एक अर्थ में सस्ता है। तोड़फोड़ की भावना में एक प्रतिबद्ध बल्कि कई के git commitबाद की तुलना में है git push। यह अंतर मायने रखता है।

Git आपको कोड की एकल लाइनें बनाने की अनुमति देता है, भले ही आपने अन्य पंक्तियों को उसी फ़ाइल में बदल दिया हो। यह आपको बहुत सारे लाभ प्रदान करता है क्योंकि आप उदाहरण के लिए 100-350 की नई लाइनों को पेश करते हुए लाइनों को 300-350 में बदलकर सुरक्षा बगफिक्स बना सकते हैं।

  • आप अलग-अलग कमिट में अलग-अलग बदलाव कर सकते हैं। यह उन्हें आपके संस्करण इतिहास में अच्छी तरह से अलग करता है और यहां तक ​​कि आपको एक को वापस करने की अनुमति देता है, लेकिन दूसरे को नहीं।
  • जरूरी नहीं कि आपकी कमिटमेंट को आपकी वर्किंग कॉपी की "कंपाइलिंग" स्थिति को प्रतिबिंबित करना हो (हालांकि मैं इसे उसी तरह रखने की कोशिश करता हूं)।

तो "गुणवत्ता नियंत्रण" और एक प्रतिबद्ध में निर्माण-गारंटी कहां है कि एक तोड़फोड़ उपयोगकर्ता की उम्मीद करेगा? इसे git में अन्य क्रियाओं में स्थानांतरित कर दिया गया है। आप अभी भी सार्वजनिक रिपॉजिटरी में प्रोग्राम के कामकाज की स्थिति को बाहर करना चाहते हैं। इसलिए आप यह सुनिश्चित करते हैं कि परीक्षण सफल रहे हैं और कार्यक्रम आपके बदलावों को आगे बढ़ाने से पहले काम करता है।

इसके अलावा, शाखाओं का अधिकतम उपयोग करने का प्रयास करें। जब बहुत सारे छोटे बदलाव आते हैं, तो आप एक बहुत बड़े संस्करण के इतिहास के साथ समाप्त हो जाएंगे। यदि आप शाखाओं में काम करते हैं, तो आप शाखा नाम से उन बारीक कामों को वर्गीकृत कर सकते हैं और फिर उन्हें वापस मर्ज कर सकते हैं (विकल्प --no-ffयह भी संरक्षित करेगा कि ये सुविधाएँ एक अद्वितीय शाखा में रहती थीं)।

यानी आप masterशाखा में विलय की आदत तभी रख सकते हैं , अगर शाखा अच्छी स्थिति में हो। आप मील के पत्थर और रिलीज को ट्रैक करने के लिए टैग का भी उपयोग कर सकते हैं।

अब मंचन करने के लिए वापस आने के लिए: एक बार जब आप प्रति प्रतिबद्ध कुछ पंक्तियाँ करते हैं, तो आप सीधे आने से पहले चरणबद्ध होंगे। (कम से कम यह है कि मैं इसे कैसे करता हूं)।


git add -pबहुत अच्छा है।
वोराक सिप 9'13

2

मुझे लगता है कि आप इसे बहुत गंभीरता से ले रहे हैं। स्टेजिंग केवल उस सामान का चयन कर रही है जिसे आप अगले कमिट में शामिल करना चाहते हैं। मंचन कब या कैसे करें यह बहुत कम महत्वपूर्ण है; और यदि आपके पास किसी भी समय बहुत सारे चरणबद्ध और अस्थिर परिवर्तन हैं, तो आपको संभवतः अपनी विकास प्रक्रिया को संशोधित करना होगा।

एक परियोजना में (पहली प्रतिबद्ध बाद), स्रोत फ़ाइलों को चरणबद्ध करने का सही समय कब है? सही करने से पहले? सही जोड़ने / हटाने या संशोधित करने के बाद?

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

यदि फ़ाइलों को दो आवागमन के बीच बीच में मंचन किया जाता है, और फिर वे संशोधित हो जाते हैं, तो गिट के साथ क्या होता है? क्या सामग्री परिवर्तन के बारे में देखभाल की आवश्यकता है जब यह कहा गया था और यह कब से बन गया है?

यह आपको रेपो की वर्तमान स्थिति और (अंतिम प्रतिबद्ध + मंचन परिवर्तन) के बीच का अंतर दिखाएगा। जब आप कुछ नए परिवर्तनों को चरणबद्ध करते हैं, तो यह केवल (अंतिम प्रतिबद्ध + मंचन परिवर्तन) स्थिति को पुनर्गणना करेगा।

यदि मैं एक नई फ़ाइल बनाता हूं, तो उसे चरणबद्ध करें और फिर उसे हटाना चाहते हैं, तो Git मुझे "-f" ध्वज और एक सरल "git -rm file.ext" का उपयोग करने के लिए क्यों नहीं कहेगा?

अब मैं यहां अनुमान लगा रहा हूं, लेकिन यह शायद इसलिए है क्योंकि मंचित जानकारी महत्वपूर्ण हो सकती है (अन्यथा आप इसे चरणबद्ध नहीं करेंगे), लेकिन यह अभी तक संस्करण नियंत्रण में नहीं है (जैसे कि आप जिस फ़ाइल को निकाल सकते हैं git -rm)। इसलिए gitयह सुनिश्चित करना चाहता है कि आप जानते हैं कि आप क्या कर रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.