यह उत्तर यह बताने की कोशिश करता है कि वरिष्ठ प्रोग्रामरों को किस तरह से दिलचस्पी लेनी है git
, न कि कैसे git
सबसे तेज़ तरीका सीखना है - इसके लिए, उत्कृष्ट गिट बुक बहुत बढ़िया है, या किसी भी राशि का ट्यूटोरियल (=> Google)। इस उत्तर के साथ जाने के लिए अच्छे लिंक हैं Git एक विशुद्ध रूप से कार्यात्मक डेटा संरचना है या विशेष रूप से लघु कैसे git आपके डेटा को संग्रहीत करता है ।
मुझे डर है कि मैं इस पर एक स्पष्ट दृष्टिकोण है। मैं वास्तव में आपके जूते में रहा हूं - मैं एक git
बेवकूफ हूं और एक टीम को इससे दूर करना चाहता हूं svn
, आइए इसका सामना करें, शून्य से परिणाम। मेरे मामले में इसने मुझे अपनी धारणा को सक्रिय रूप से बदलने और लोगों को स्वीकार करने के लिए प्रेरित किया, बस "खुशी के लिए मजबूर" नहीं किया जा सकता है। लोग कंप्यूटर नहीं हैं, उन्हें प्रोग्राम करना अविश्वसनीय कठिन है। मैं अभी भी कोशिश करने के लिए खुश हूं, इसने मुझे बहुत नरम तरीके से दिखाया है कि मैं क्या करता हूं और मैं अपने पेशेवर जीवन में क्या नहीं करना चाहता हूं।
ऐसे लोग हैं जो नए सामान को शामिल करने के लिए प्रेरित होना शुरू करते हैं, और ऐसे लोग होते हैं जो डिमोनेटाइज्ड होते हैं। इसका कोई लेना-देना नहीं है git
, लेकिन git
विशेष रूप से आपके लिए हमेशा यह प्रभाव होता है कि "हमें इसका उपयोग क्यों करना चाहिए अगर svn
ठीक है?", जो कि एक विशाल मनोवैज्ञानिक बाधा है।
इसके अलावा, वास्तव में ग्रॉसिंग git
को अमूर्त डेटा संरचनाओं में गहन रुचि की आवश्यकता होती है। यह अविश्वसनीय लग सकता है, लेकिन मेरे अनुभव में ऐसे प्रोग्रामर हैं जिनकी कोई दिलचस्पी नहीं है और जो साधारण सरणियों की तुलना में अधिक जटिल तत्वों से ऊब और ऊब गए हैं। आप आगे-पीछे यह तर्क दे सकते हैं कि क्या उन्हें वह काम करना चाहिए जो वे कर रहे हैं, लेकिन यह वही है जो यह है।
अगर लोगों को इसमें कोई दिलचस्पी नहीं है, तो वे इसे नहीं समझेंगे। सादा और सरल। मैं चाहूंगा कि स्कूल में खराब ग्रेड का मुख्य कारण गायब बुद्धि न हो।
उन्होंने कहा, यहां एक पाठ्यक्रम होगा जैसा कि मैं इसे लागू करूंगा, यह ज्ञान के निचले-से-शीर्ष निर्माण पर आधारित है। यह मेरे लिए काम नहीं किया है, लेकिन आप इसे अपने स्वयं के रोल के लिए प्रेरणा के रूप में ले सकते हैं।
जीयूआई
हालांकि निम्नलिखित दृष्टिकोण को क्रियाओं के लिए GUI समर्थन की आवश्यकता नहीं है ( git add
एक हैलो वर्ल्ड रिपॉजिटरी ...) में, यह शुरू से ही, रिपॉजिटरी को देखने के लिए GUI के लिए बहुत मदद करता है । यदि आप तय नहीं कर सकते हैं कि किसका उपयोग करना है, तो gitk
अंतिम उपाय के रूप में लें । यदि आपके लोग किसी भी प्रकार के विज़ुअल एडिटर का उपयोग करते हैं, तो उनके git
GUI घटक को खोजें।
(स्टैटिक) डेटा संरचना प्रमुख है
आंतरिक डेटा प्रकारों की व्याख्या करके शुरू करें (उनमें से केवल तीन-प्लस-एक हैं: बूँद, पेड़, कमिट, एनोटेट टैग, जिनमें से अंतिम इस स्तर पर कोई चिंता नहीं है) और उनकी संरचना। आप आसानी से व्हाइटबोर्ड पर / एक पेंसिल के साथ कर सकते हैं; पेड़ को खींचना आसान है क्योंकि इसे कभी नहीं बदला जा सकता है, आप सचमुच हर समय सामान जोड़ सकते हैं। आप एक ताज़ा बनाए गए स्थानीय भंडार में एक नाटक सत्र कर सकते हैं और git cat-file
वास्तविक वस्तुओं को देखने के लिए उपयोग करके दिखा सकते हैं कि वे वास्तव में विज्ञापन के रूप में तुच्छ हैं।
अगर आप उन्हें यह समझने में मदद कर सकते हैं
- ... इतिहास में केवल 3 प्रकार की वस्तुएं हैं, उनमें से सभी बहुत सरल, लगभग तुच्छ और
- ... अधिकांश
git
उप-क्षेत्र बस उन वस्तुओं को एक तरह से या किसी अन्य तरीके से "तुच्छ" करते हैं, पास के तुच्छ कार्यों के साथ (मूल रूप से, केवल एक है: कहीं एक नई प्रतिबद्धता जोड़ें), और ...
- ... सब कुछ आसानी से आपके सामने ठीक से देखा जा सकता है
ls
और git cat-file
...
तब उनका मानसिक अनुवाद होगा जो वास्तव में भंडार में है। इस बिंदु पर, seniours सकता है तो याद रखें कि के आंतरिक svn
रहस्यमय जादू (कभी SVN भंडार के अंदर ताले के साथ समस्या नहीं थी, या "reintegrating" शाखाओं और इस तरह के?) के साथ कर रहे हैं, और यह कर सकते हैं बस उन्हें थोड़ा प्रेरित।
एक समस्या यह है, विशेष रूप से करने के लिए इस्तेमाल लोगों के साथ svn
, विचार करने के लिए इस्तेमाल करने के लिए है कि एक प्रतिबद्ध (वस्तु, नहीं कार्रवाई) हमेशा होता है है पूरी निर्देशिका वृक्ष। में svn
, लोगों को व्यक्तिगत फाइल करने के लिए उपयोग किया जाता है। यह मौलिक रूप से अलग दृष्टिकोण है। ओह, और तथ्य यह है कि एक ही शब्द "कमिट" का उपयोग स्थिर वस्तु के लिए किया जाता है और एक कार्रवाई भी मदद नहीं कर रही है।
svn
लोगों के लिए दूसरी समस्या यह है कि svn
वे वृक्ष नहीं, बल्कि एक रैखिक इतिहास का उपयोग करते हैं। यह, फिर से, बेतहाशा अलग है। तो यह इन मतभेदों की बात करने के लिए समय आ गया है एक बहुत ।
संरचना के संदर्भ में क्रियाओं को समझाया गया
जब वे समझ गए हैं कि एक git
रिपॉजिटरी को किन भागों से बनाया गया है, तो यह उन्हें दिखाने का समय है कि व्यक्तिगत git
उप-क्षेत्र उन के संदर्भ में क्या करते हैं।
मैं बात कर रहा हूँ add
, commit
स्थानीय कार्यशील निर्देशिका और मंच (सुनिश्चित करें कि वे समझते हैं कि कार्यशील निर्देशिका मचान क्षेत्र जो भंडार के समान नहीं है के रूप में ही नहीं है) के साथ संयोजन के रूप में।
जब वे समझ गए हैं कि ये आज्ञाएं केवल पेड़ उगाती हैं (जो, फिर से, इस स्तर पर, 3 प्रकार के होते हैं - बूँदें, पेड़, कमिट, न केवल कमिट होते हैं), आप पहले git push
और git pull
तेजी से आगे मोड में कर सकते हैं ! ) उन्हें दिखाने के लिए कि git
वस्तुतः केवल अपनी वस्तुओं को चारों ओर धकेल रहे हैं, कि हैश वास्तव में केवल सामग्री हैश है, कि आप आसानी से इस सामग्री को एक फाइल सिस्टम कॉपी कमांड और इसी तरह से कॉपी कर सकते हैं।
जाहिर है, उन आदेशों के किसी भी गैर-विकल्प विकल्प से बहुत दूर रहें, हम यहां बात कर रहे git add hello.txt
हैं।
शाखाओं
ध्यान दें कि ब्रांचिंग विशेष रूप से svn
लोगों के लिए कठिन है , क्योंकि यह पूरी तरह से अलग है। svn
मॉडल है ज्यादा , कल्पना करने के लिए आसान के रूप में वहाँ मूल रूप से कल्पना करने के लिए कुछ भी नहीं है - यह सादे ध्यान में रखते हुए है। git
मॉडल इतना नहीं। सुनिश्चित करें कि वे शुरू से ही इस बात से अवगत हैं कि शाखाएँ और टैग कहीं न कहीं इंगित करते हुए केवल "स्टिकी नोट्स" हैं, और स्थिर, अपरिवर्तनीय इतिहास के संदर्भ में वास्तव में "अस्तित्व में" नहीं हैं।
फिर आसान उदाहरण के बाद उदाहरण दें कि आप वास्तव में उनके साथ क्या कर सकते हैं। जैसा कि आप खुद को अभ्यस्त लगते हैं git
, आपको वहां प्रेरणा पाने में कोई परेशानी नहीं होनी चाहिए। सुनिश्चित करें कि वे हमेशा यह देखते हैं कि पेड़ कैसे बढ़ता है।
यदि उनके पास वह नीचे है, तो आप बता सकते हैं कि git pull
वास्तव में कैसा है git fetch && git merge
; कैसे सभी रिपॉजिटरी में वास्तव में समान वस्तुएं होती हैं ( git fetch
यह लगभग वस्तु के समान scp
है जो गिट ऑब्जेक्ट डायरेक्टरी के अंदर सामान है ) और इसी तरह।
शायद, अगर इस समय तक आप अपनी रुचि को जगाने के लिए नहीं पहुंचे हैं, तो आप बस उतना ही त्याग कर सकते हैं, लेकिन यदि वे अभी तक पाने का प्रबंधन करते हैं, तो उनके पास अपने निपटान में सभी मानसिक उपकरण हैं, और बहुत कम होना चाहिए भय अब शामिल है। बाकी (git वर्कफ़्लो ...) तो डाउनहिल होना चाहिए।
आखरी श्ब्द
यह बहुत प्रयास की तरह लगता है, और यह वास्तव में है। इसे इस रूप में न बेचें "हमें इस परियोजना के लिए इसकी आवश्यकता है" लेकिन "यह आपको व्यक्तिगत रूप से विकसित करने में मदद करता है और आपके सभी आगे के इंटरैक्शन में आपकी मदद करेगा"। इसके लिए आपको बहुत समय चाहिए, और समय पैसा है। यदि आपके पास इस पर प्रबंधन स्वीकृति नहीं है, तो यह इसके लायक नहीं हो सकता है; शायद आपको अपने बॉस से बात करनी चाहिए।
यदि आप तय करते हैं कि आप उन डेवलपर्स को पढ़ाना छोड़ना चाहते हैं जो प्रतीत होता है कि इसे समझ नहीं पा रहे हैं, लेकिन आपको git
भविष्य में इसका पूरी तरह से उपयोग करना चाहिए , तो git
पक्की-पक्की स्क्रिप्ट या कुछ GUI द्वारा कमांड के साथ सभी इंटरैक्शन को बदलने पर विचार करें जो सभी git
बारीकियों को दूर ले जाता है। स्क्रिप्ट में सभी त्रुटि नियंत्रण आदि को डालें, और उस कार्य को करने का प्रयास करें।