कई मशीनों पर गिट के साथ काम करना


15

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

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

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

क्या इस स्थिति पर कोई तीसरा हैंडल है? हो सकता है कि कुछ थर्ड पार्टी टूल उपलब्ध हों जो इस प्रक्रिया को आसान बनाने में मदद करें? यदि आप इस स्थिति से नियमित रूप से निपटते हैं, तो आप क्या सुझाव देते हैं?


git एक विकेन्द्रीकृत संस्करण उपकरण है और git हमेशा क्लोनिंग करते समय आपके रेपो की एक स्थानीय प्रतिलिपि बनाता है, "केंद्रीकृत" या "अद्वितीय" रिपॉजिटरी के बारे में अवधारणा वैश्विक रूप से गिट की दुनिया में मौजूद नहीं है।
user827992

2
@ user827992 मैं उस तथ्य से पूरी तरह अवगत हूं। मुझे नहीं लगता कि मैंने केंद्रीयकरण के बारे में कुछ भी सुझाया है। केवल एक चीज जिसका मैं उल्लेख कर रहा था, यदि आप एक फाइलशेयर का उपयोग कर रहे हैं, तो एक मशीन होस्ट है, इस अर्थ में कि यह भौतिक रूप से फाइलों को स्टोर कर रहा है। यह एक अवधारणा पूरी तरह से dvcs से अलग है।
टेस्सेरेक्स

इस थ्रेड stackoverflow.com/questions/1550378/… में कुछ अच्छे विचार हैं। ब्रांच को
कमिट करना

जवाबों:


14

मैं आपके दोनों प्रस्तावित समाधानों को प्रतिदिन निपटाता हूं। उन्हें अच्छी तरह से संभालने के लिए दो प्रमुख अवधारणाएं हैं।

  1. विषय शाखाओं का उपयोग करें। मेरा मानना ​​है कि उत्पादन का इतिहास प्राचीन होना चाहिए। परिणामस्वरूप मैं अपनी productionशाखा के इतिहास को तार्किक, प्रतिरूपनीय और डीबग करने योग्य बनाने में बहुत समय व्यतीत करता हूं । कई मशीनों का उपयोग करते समय, हालांकि, आपको कभी-कभी प्रगति में काम करने की आवश्यकता होती है। विषय शाखा का उपयोग करें। आप कर सकते हैं pullऔर pushकम प्रयास के साथ दोनों मशीनों से इस शाखा, और जब यह में विलय के लिए तैयार है masterया production यह rebase एक और अधिक maintainable इतिहास बनाने के लिए।
  2. एक नेटवर्क पर साझा किए गए एक रेपो का उपयोग करना ठीक है, जब तक कि आप इसे अन्य उपयोगकर्ताओं के साथ साझा नहीं कर रहे हैं। हम स्क्रिप्ट के लिए एक साझा भंडार का उपयोग करते हैं, जिसे रचनात्मक रूप से scriptsभंडार का नाम दिया गया है। पहले तो यह एक अच्छा विचार लग रहा था क्योंकि रेपो अक्सर बदलता नहीं है, लेकिन समय के साथ यह काफी बुरा सपना बन गया है। एक-दूसरे के काम को ओवरराइट करना आसान है, और आप खर्च करते हुए एयर ट्रैफिक को नियंत्रित करते हैं जो रिपॉजिटरी को तैनात करता है जो आप इसमें काम करते हैं।

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

यदि आप अपने आप को दिन भर में एक से अधिक विषय शाखा पर काम करते हुए पाते हैं, लेकिन हर एक को रिमोट से अलग-अलग पुश नहीं करना चाहते हैं, git push <remote>तो डिफ़ॉल्ट रूप से सभी मिलान शाखाओं को धक्का दे देंगे <remote>। यह डिफ़ॉल्ट git के बाद के संस्करण में बदल जाएगा , लेकिन कॉन्फ़िगरेशन फ़ाइल में सेटिंगpush.default या मिलान निर्दिष्ट करके ओवररोड किया जा सकता है refspec:

git push <remote> :

3

यदि सभी मशीनें हर समय नहीं होती हैं, तो कोई चांदी की गोली नहीं है: मशीन को बंद करने से पहले, आपको परिवर्तनों को कहीं और धक्का देना होगा। मैं एक निजी सर्वर पर धकेलता हूं, लेकिन यह केवल ड्रॉपबॉक्स या एक USB कुंजी हो सकता है जिसे आप हर जगह ले जाते हैं।

हां, कई शाखाओं को एक केंद्रीय स्थान पर धकेलना थकाऊ हो सकता है, लेकिन यह स्क्रिप्ट के लिए बहुत मुश्किल नहीं होना चाहिए। मैं उसके लिए एक push.shस्क्रिप्ट का उपयोग करता हूं, जिसे मैं हर बार मशीन पर काम करते समय चलाता हूं।


2

मैं इस पर थोड़ा अलग दिशा से आया हूं (और मैं व्यापारिक उपयोग करता हूं, लेकिन दार्शनिक रूप से वही है)। यह मेरा विचार नहीं है, मैं इसका उपयोग करता हूं और यह मेरे व्यक्तिगत सामान के लिए काम करता है।

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

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

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

जो मैं वास्तव में नहीं करना चाहता हूं वह एक साझा फ़ोल्डर से चला जाता है ... यदि आप एक डीवीसीएस का उपयोग कर रहे हैं तो आप लाभ का आनंद ले सकते हैं।


0

आपके दो विकल्पों में से पहला उत्तर है। यह "DVCS" में "D" द्वारा निहित है। प्रत्येक उपयोगकर्ता के पास रिपॉजिटरी का अपना स्थानीय उदाहरण है, और रिपोजिटरी प्रबंधनीय तरीकों से आपस में बात करते हैं।

आप अपना दूसरा विकल्प कर सकते हैं, लेकिन समस्या यह है कि केवल एक रिपॉजिटरी वर्किंग डायरेक्टरी है। तो काम का पेड़ एक समय में केवल एक राज्य में हो सकता है - कोई भी एक शाखा पर काम करने वाला नहीं है और जेन दूसरे पर काम कर रहा है। इसलिए डेवलपर्स एक-दूसरे के बदलावों को ओवरराइट कर सकते हैं, एक-दूसरे के काम को पूरा कर सकते हैं। क्यों, यह बिल्कुल संस्करण नियंत्रण नहीं होने जैसा है!

वहाँ एक मध्यम जमीन कहा जाता है, एक नेटवर्क ड्राइव पर एक नंगे भंडार और व्यक्तिगत उपयोगकर्ताओं के अंदर और बाहर की जाँच करें। यह आपके WIP कार्य (जो हाँ, आप स्थानीय स्तर पर रखते हैं) को आपके द्वारा रिपॉजिटरी में प्रकाशित किए जाने वाले कार्य से अलग करता है। यह "सेव" नहीं है - यह "पब्लिश" है। वह काम जिसे आप अपने साथियों को देखना और उपयोग करना चाहते हैं।

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