एकमात्र डेवलपर के रूप में (अब के लिए), मुझे Git का उपयोग कैसे करना चाहिए? [बन्द है]


60

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

एक एकमात्र डेवलपर के रूप में, Git या GitHub की कौन-सी विशेषताएं हैं जिनका मैं लाभ उठा सकता हूं जो मुझे अभी लाभान्वित करेंगे? मेरे वर्कफ़्लो कैसा होना चाहिए?

इसके अलावा, क्या कोई विशेष प्रथाएं हैं जो मुझे भविष्य में अपनी परियोजनाओं में दूसरों को जोड़ने की प्रत्याशा में शुरू करने की आवश्यकता है?


3
जैसा कि अन्य लोगों ने समझाया है, Git आपको बहुत शक्ति देता है। हालांकि एक एकमात्र डेवलपर के रूप में, बाद में आप जिस बड़ी चीज की सराहना करेंगे, वह यह है कि यदि आपने जो बदलाव किए हैं उसका एक रिकॉर्ड आपको देता है (कई फाइलों को एक सेट में बदलकर), आपने उन्हें कब और क्यों बनाया! जब आप टीम का हिस्सा बनते हैं तो यह बहुत अच्छा अभ्यास होता है।
लीडिंग गीक

1
दिलचस्प होने के कारण बंद। :)

@ user93458 हमेशा की तरह! बंद विषय आमतौर पर वही हैं जो मैं खोज रहा हूं।
मिरोस्लाव पोपोव

उत्कृष्ट प्रश्न जो कभी बंद नहीं होना चाहिए था।
वॉल्यूम एक

जवाबों:


64

इसके अलावा, क्या कोई विशेष प्रथाएं हैं जो मुझे भविष्य में अपनी परियोजनाओं में दूसरों को जोड़ने की प्रत्याशा में शुरू करने की आवश्यकता है?

बेशक। एक सरल अच्छा अभ्यास है जिसका उपयोग आप तब भी कर सकते हैं जब आपके पास अभी टीम नहीं है: विकास के लिए एक अलग शाखा बनाएं। यह विचार है कि मास्टर शाखा में केवल जारी कोड संस्करण या बड़े परिवर्तन होंगे। यह नए डेवलपर्स द्वारा आसानी से अपनाया जा सकता है जो आपकी परियोजना में शामिल होते हैं।

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

यह एक संक्षिप्त उदाहरण है कि आप एकमात्र प्रोग्रामर होने के नाते क्या कर सकते हैं। मुझे यकीन है कि अधिक अच्छे अभ्यास होने चाहिए।

मैं आपको इस लेख की अत्यधिक अनुशंसा करता हूं: एक सफल गिट ब्रांचिंग मॉडल


+1 - यह समझ में आता है। मैं उस लेख को भी करीब से देखूंगा, यह बहुत उपयोगी है।
पुण्योसोमीडिया

मैं एक गिट विशेषज्ञ नहीं हूं, ज्यादातर एक मर्क्यूरियल उपयोगकर्ता। क्या यह देव शाखा की सलाह अभी भी मर्क्यूरियल के मामले में है? ऐसा लगता है कि यह करता है, लेकिन शायद कुछ मतभेद इस मामले में एक अच्छा विचार नहीं बनाते हैं?
Klaim

2
हाँ, यह सभी स्रोत नियंत्रण के लिए बहुत अधिक है। मैं वास्तव में इसे एसवीएन के साथ पीछे करता हूं; "मुख्य" ट्रंक नवीनतम विकास के लिए है, जो दैनिक या अधिक बार जाता है। जब एक रिलीज़ के लिए कॉल किया जाता है, तो कोड जमे हुए होते हैं और एक शाखा कट जाती है। वह शाखा केवल प्रमुख रिलीज़ समस्याओं को ठीक करने के लिए मामूली अपडेट प्राप्त करती है, और फिर उसी से वितरण योग्य बनाया जाता है। इस तरह, मेरे पास प्रत्येक रिलीज़ किए गए संस्करण के पीछे स्रोत कोड की एक शाखा है। यह केवल टैगिंग या लेबलिंग b / c से बेहतर है यदि लेबल के बाद कमिट आते हैं लेकिन रिलीज़ होने से पहले, आपको नहीं पता कि क्या वास्तव में उन्हें बाहर रखा गया था।
कीथ

लेख के लिए +1; @Klaim - हाँ, hg के लिए भी बढ़िया काम करता है। वास्तव में "सफल DCVS शाखा मॉडल" कहा जाना चाहिए
व्याट बार्नेट

+1 लिंक के लिए धन्यवाद, इसने मेरे दिमाग में काम करने के तरीके को बदल दिया, न कि बहुत दिमाग से, लेकिन जैसा कि वे कहते हैं, हर थोड़ी मदद करता है!
न्यूटॉपियन

14

मैं वास्तव में इस स्थिति में हूं, लेकिन मैंने थोड़ा और अधिक जटिल के लिए विकल्प चुना, हालांकि जरूरी नहीं कि गिट के साथ अधिक जटिल वर्कफ़्लो हो।

पहले उद्देश्य उद्देश्य तरीके से सीखा था इसलिए मैंने कुछ मात्रा में खोज की। फिर आपके द्वारा वर्णित वर्कफ़्लो के लिए बहुत अधिक वापस लौट आया।

थोड़ी देर के बाद यह काम करना मुश्किल हो गया क्योंकि कुछ स्थितियों के कारण भी मुझे बुरी आदतें मिलीं जो एक टीम में शामिल होने के बाद मुझे तोड़ना मुश्किल होगा।

इसलिए मैंने निम्नलिखित के लिए समझौता किया:

  • काम करने के लिए स्थानीय भंडार।
  • आवेदन के लिए एक स्थिर ट्रंक के रूप में मास्टर शाखा
  • प्रत्येक सुविधा / रिफ्लेक्टर के लिए एक शाखा, मूल रूप से प्रत्येक बड़े बदलाव के लिए एक शाखा जो की जाएगी।
  • शाखा के स्थिर होने पर ट्रंक में वापस आ जाएं और सभी परीक्षण पास हो जाएं।

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

  • मैं हर संस्करण को टैग करता हूं जो इसे एक अथक संस्करण के रूप में जीथब में बनाता है।
  • यदि ग्राहक को जारी किया जाता है तो मैं ग्राहक द्वारा घोषित बग फिक्स के लिए दूसरा स्थिर ट्रंक बनाने के लिए इस संस्करण से शाखा करूंगा।

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

जब सभी शाखाएँ जटिल हो गईं तो मैंने परिवर्तनों के वृक्ष को खींचने के लिए लॉग विकल्प की खोज की और देखा कि कौन सी शाखा कहाँ है।

लंबी कहानी छोटी, git SVN, CVS या (brrr) TFS की तरह नहीं है। ब्रांचिंग बहुत सस्ती है और गलतियाँ करना जो काम खत्म कर देगा वास्तव में बहुत मुश्किल है। केवल एक बार मैंने कुछ काम खो दिया और यह इसलिए था क्योंकि मैंने अपने कमिट्स को बहुत बड़ा बना दिया था (ऊपर बुरी आदतों को देखें)। यदि आप अक्सर कमिट करते हैं, तो छोटे-छोटे चिट्स द्वारा निश्चित रूप से आपका सबसे अच्छा सहयोगी होगा।

मेरे लिए git ने मेरे दिमाग को खोल दिया कि स्रोत नियंत्रण वास्तव में क्या है। इससे पहले कि कुछ और पाने का प्रयास किया गया था, git पहला है, जो मेरे दिमाग में है, उसे मिल गया। उस ने कहा, मैंने अन्य डीवीसीएस की कोशिश नहीं की, संभवतः यह कथन पूरे परिवार के लिए व्यापक हो सकता है।

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

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

सौभाग्य, आशा है कि यह मदद की।


4

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


4

एक सरल मॉडल के लिए, आप देख सकते हैं कि GitHub क्या करता है। "GitHub प्रवाह" बहुत सरल है, और यहां एक उत्कृष्ट मार्गदर्शिका है: https://guides.github.com/introduction/flow/index.html

सारांश ( स्कॉट चाकोन के ब्लॉग से ):

तो, GitHub फ्लो क्या है?

  • मास्टर शाखा में कुछ भी तैनात है
  • कुछ नया काम करने के लिए, एक वर्णनात्मक रूप से नामित शाखा को मास्टर ऑफ बनाएं (जैसे: new-oauth2-scopes)
  • उस शाखा के लिए स्थानीय स्तर पर और नियमित रूप से सर्वर पर उसी नामित शाखा में अपने काम को धक्का दें
  • जब आपको प्रतिक्रिया या सहायता की आवश्यकता होती है, या आपको लगता है कि शाखा विलय के लिए तैयार है, तो एक पुल अनुरोध खोलें
  • किसी और व्यक्ति ने फीचर पर समीक्षा और हस्ताक्षर करने के बाद, आप इसे मास्टर में विलय कर सकते हैं
  • एक बार जब यह विलय हो जाता है और 'मास्टर' के लिए धकेल दिया जाता है, तो आपको तुरंत तैनाती करनी चाहिए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.