बड़े svn इतिहास के बारे में क्या करना है जब git पर जा रहे हैं?


23

संपादित करें: कुछ इसी तरह के सवालों के विपरीत जैसे कि मल्टी-जीबी एसवीएन रेपो को जीआईटी या /programming/540535/managing-large-binary-files-with-git पर ले जाना मेरे परिदृश्य में ऐसे सबप्रोजेक्ट शामिल नहीं हैं जो आसानी से गिट सबमॉडल में परिवर्तित किया जा सकता है, न ही कुछ बहुत बड़ी बाइनरी फाइलें जो गिट-एनेक्स के लिए अच्छी तरह से अनुकूल हैं। यह एक एकल रिपॉजिटरी है जहां बायनेरिज़ टेस्ट सूट होते हैं जो एक ही संशोधन के मुख्य स्रोत कोड से कसकर जोड़े जाते हैं, जैसे कि वे ग्राफिक्स जैसे समय संपत्ति का संकलन करते थे।

मैं svn से एक पुराने माध्यम / बड़े आकार (50 उपयोगकर्ता, 60k संशोधन, 80Gb इतिहास, 2Gb कार्य प्रतिलिपि) कोड रिपॉजिटरी को स्विच करने की जांच कर रहा हूं। जैसे-जैसे उपयोगकर्ताओं की संख्या बढ़ी है, ट्रंक में बहुत अधिक मंथन हुआ है, और कई बार कोड की समीक्षा करने के लिए कई कमेंट्स पर विशेषताएं फैल जाती हैं। इसके अलावा शाखा के बिना "गेट" खराब कोड का कोई तरीका नहीं है, केवल ट्रंक के लिए प्रतिबद्ध होने के बाद ही समीक्षा की जा सकती है । मैं विकल्पों की जांच कर रहा हूं। मैं उम्मीद कर रहा था कि हम पकड़ में आ सकते हैं, लेकिन मुझे कुछ समस्याएं हो रही हैं।

जहां तक ​​गिट जाता है, वर्तमान रेपो के साथ समस्या आकार की है। वहाँ बहुत पुराना cruft है, और इसे साफ करने के साथ --filter- शाखा के साथ जब गिट में परिवर्तित किया जाता है, तो यह लगभग 5-10GB तक, परिमाण के क्रम से आकार में कटौती कर सकता है। यह अभी भी बहुत बड़ा है। बड़े रिपॉजिटरी आकार का सबसे बड़ा कारण यह है कि परीक्षणों के लिए बहुत सारे बाइनरी दस्तावेज़ हैं। ये फाइलें .5mb और 30mb के बीच बदलती हैं, और सैकड़ों हैं। उनमें भी काफी बदलाव हैं। मैंने सबमॉड्यूल्स, गिट-एनेक्स आदि को देखा है, लेकिन एक सबमॉड्यूल में परीक्षण करना गलत लगता है, क्योंकि इसमें कई फाइलों के लिए एनेक्स होता है जिसके लिए आप पूरा इतिहास चाहते हैं।

इसलिए वितरित प्रकृति की प्रकृति वास्तव में मुझे इसे अपनाने से रोक रही है। मैं वास्तव में वितरित के बारे में परवाह नहीं करता, मैं सिर्फ सस्ते ब्रांचिंग और शक्तिशाली विलय की विशेषताएं चाहता हूं। जैसे मुझे लगता है कि 99.9% git उपयोगकर्ता करते हैं, हम एक धन्य, नंगे केंद्रीय भंडार का उपयोग करेंगे।

मुझे यकीन नहीं है कि मैं समझता हूं कि प्रत्येक उपयोगकर्ता को git का उपयोग करते समय एक पूर्ण स्थानीय इतिहास क्यों होना चाहिए? यदि वर्कफ़्लो विकेंद्रीकृत नहीं है, तो वह डेटा उपयोगकर्ताओं के डिस्क पर क्या कर रहा है? मुझे पता है कि गिट के हाल के संस्करणों में आप केवल हाल के इतिहास के साथ एक उथले क्लोन का उपयोग कर सकते हैं। मेरा सवाल है: क्या यह पूरी टीम के लिए ऑपरेशन के मानक मोड के रूप में ऐसा करना व्यवहार्य है? जीआईटी को हमेशा उथले होने के लिए कॉन्फ़िगर किया जा सकता है ताकि आपके पास केवल एक पूरी तरह से इतिहास हो सके, लेकिन डिफ़ॉल्ट रूप से उपयोगकर्ताओं के पास केवल 1000 इतिहास हैं? पाठ्यक्रम का विकल्प सिर्फ 1000 रीव्स को जिट में बदलना होगा, और पुरातत्व के लिए svn रेपो को रखना होगा। इस परिदृश्य में, हालांकि, परीक्षण के दस्तावेजों के लिए कई हजार संशोधनों के बाद हम फिर से उसी समस्या का सामना करेंगे।

  • बड़ी है कि आप कई द्विआधारी फ़ाइलों से युक्त रेपोस साथ Git का उपयोग कर के लिए एक अच्छा सर्वोत्तम तरीका क्या है करते हैं के लिए इतिहास करना चाहते हैं? अधिकांश सर्वोत्तम प्रथाओं और ट्यूटोरियल इस मामले से बचने के लिए लगते हैं। वे कुछ विशाल बायनेरिज़ की समस्या को हल करते हैं, या पूरी तरह से बायनेरिज़ को छोड़ने का प्रस्ताव करते हैं।
  • उथले क्लोनिंग ऑपरेशन के एक सामान्य मोड के रूप में प्रयोग करने योग्य है या यह "हैक" है?
  • क्या सबमॉड्यूल्स का उपयोग कोड के लिए किया जा सकता है जहां आपके पास मुख्य स्रोत संशोधन और सबमॉड्यूल संशोधन (जैसे संकलन समय बाइनरी निर्भरता, या एक यूनिट टेस्ट सूट) के बीच एक तंग निर्भरता है?
  • गेट रिपॉजिटरी (परिसर में) के लिए "बहुत बड़ा" कितना बड़ा है? अगर हम इसे 4GB तक ले सकें तो क्या हमें स्विच करने से बचना चाहिए? 2GB?


मैंने इस पर जानकारी के लिए बहुत कुछ खोजा, और मुझे ऐसा कुछ नहीं मिला जो मेरे प्रश्न का उत्तर देता हो। लिंक किए गए प्रश्न में वर्कऑनड्र्स (सबमॉड्यूल, एनेक्स आदि) मेरे परिदृश्य की तुलना में बहुत बेहतर काम करेंगे।
एंडर्स फॉर्सग्रेन ने


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

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

जवाबों:


10

वाह, यह एक लंबा सवाल है (और एक जटिल समस्या)। मैं इस पर जाने की कोशिश करूंगा।

मुझे यकीन नहीं है कि मैं समझता हूं कि प्रत्येक उपयोगकर्ता को गिट का उपयोग करते समय एक पूर्ण स्थानीय इतिहास क्यों होना चाहिए?

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

बड़े भंडार आकार के लिए सबसे बड़ा कारण यह है कि परीक्षणों के लिए बहुत सारे द्विआधारी दस्तावेज हैं। ये फाइलें .5mb और 30mb के बीच बदलती हैं, और सैकड़ों हैं। उनमें भी काफी बदलाव हैं।

यही वह बिंदु है जिसके बारे में मैं पहले सोचूंगा। स्रोत नियंत्रण में कई लगातार बदलती बाइनरी फाइलें होने से मुझे (यहां तक ​​कि एसवीएन के साथ) समस्याग्रस्त लगती है। क्या आप एक अलग दृष्टिकोण का उपयोग नहीं कर सकते? विचार:

  • स्रोत कोड के विपरीत, एक 3 एमबी बाइनरी फ़ाइल संभवतः हाथ से नहीं लिखी गई है। यदि कुछ उपकरण / प्रक्रिया इसे उत्पन्न करती है, तो डेटा को संग्रहीत करने के बजाय अपने बिल्ड में एकीकृत करने पर विचार करें।

  • यदि वह व्यावहारिक नहीं है, तो बाइनरी फाइलें आमतौर पर एक विरूपण साक्ष्य भंडार में बेहतर होती हैं (जैसे कि आर्टिफैक्ट फॉर मावेन और सह।)। हो सकता है कि यह आपके लिए एक विकल्प हो।

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

दरअसल, ऐसा लग रहा है कि git-annex पूरी तरह से फिट होगा। git-annex मूल रूप से आपको git रिपॉजिटरी के बाहर फ़ाइल सामग्री को संग्रहीत करने की अनुमति देता है (रिपॉजिटरी में इसके बजाय एक प्लेसहोल्डर होता है)। आप फ़ाइल सामग्री को विभिन्न तरीकों से संग्रहीत कर सकते हैं (केंद्रीय गिट रेपो, साझा ड्राइव, क्लाउड स्टोरेज ...), और आप स्थानीय स्तर पर जो सामग्री चाहते हैं उसे नियंत्रित कर सकते हैं।

क्या आपको शायद गलतफहमी थी कि गिट-एनेक्स कैसे काम करता है? git-annex उन सभी फाइलों के लिए पूरा इतिहास संग्रहीत करता है जो इसे प्रबंधित करती हैं - यह आपको स्थानीय स्तर पर कौन सी फ़ाइल सामग्री चुनने की सुविधा देता है।

अंत में, अपने प्रश्नों के बारे में:

कई बाइनरी फ़ाइलों वाले बड़े रिपोज़ के साथ गिट का उपयोग करने के लिए एक अच्छा सर्वोत्तम अभ्यास क्या है जिसे आप इतिहास चाहते हैं?

मेरे अनुभव में, विकल्प आमतौर पर हैं:

  • रेपो में बायनेरिज़ की आवश्यकता से बचें (उन्हें मांग पर रखें, उन्हें कहीं और स्टोर करें)
  • git-annex (या Git LFS जैसे एक समान समाधान) का उपयोग करें
  • एक बड़े रेपो के साथ रहते हैं (सभी गिट ऑपरेशन बड़ी फ़ाइलों से प्रभावित नहीं होते हैं, और यदि आपके पास एक तेज़ कंप्यूटर और ड्राइव है, तो यह काफी कारगर हो सकता है)

उथले क्लोनिंग ऑपरेशन के एक सामान्य मोड के रूप में प्रयोग करने योग्य है या यह "हैक" है?

यह उल्लेखनीय हो सकता है; हालाँकि, मुझे नहीं लगता कि इससे आपकी समस्या हल हो जाएगी:

  • आप इतिहास के त्वरित खोज जैसे पूर्ण इतिहास होने से आने वाले लाभ के लाभ को खो देंगे
  • विलय मुश्किल हो सकता है, क्योंकि AKAIK आपके पास कम से कम इतिहास को शाखा बिंदु पर वापस विलय करने के लिए होना चाहिए
  • उपयोगकर्ताओं को अपने क्लोन का आकार छोटा रखने के लिए समय-समय पर पुन: क्लोन करने की आवश्यकता होगी
  • यह गिट का उपयोग करने का सिर्फ एक असामान्य तरीका है, इसलिए आप कई उपकरणों के साथ समस्याओं में भाग लेंगे

गेट रिपॉजिटरी (परिसर में) के लिए "बहुत बड़ा" कितना बड़ा है? अगर हम इसे 4GB तक ले सकें तो क्या हमें स्विच करने से बचना चाहिए? 2GB?

यह रेपो (कुछ / कई फाइलें आदि) की संरचना पर निर्भर करता है कि आप क्या करना चाहते हैं, आपके कंप्यूटर कितने मांसल हैं, और आपके धैर्य पर। :-)

आपको एक त्वरित विचार देने के लिए: मेरे (नए, लेकिन कम-कल्पना) लैपटॉप पर, 500 एमबी की फाइल करने में 30-60 का समय लगता है। बस लिस्टिंग इतिहास (गिट लॉग आदि) बड़ी फ़ाइलों से प्रभावित नहीं होती है; "गिट लॉग-एस" जैसी चीजें जो फ़ाइल सामग्री को स्कैन करना चाहिए, वे बहुत धीमी हैं - हालांकि, गति में मुख्य रूप से I / O का प्रभुत्व है, इसलिए यह वास्तव में गिट की गलती नहीं है।

मुट्ठी भर संशोधनों के साथ 3 जीबी रेपो पर, "गिट लॉग-एस" में लगभग एक मिनट लगता है।

तो मैं कहूँगा कि GB का एक जोड़ा ठीक है, हालांकि आदर्श नहीं है। 10-20 जीबी से अधिक शायद इसे आगे बढ़ा रहा है, लेकिन यह संभव हो सकता है - आपको इसे आज़माना होगा।


आपके विस्तृत उत्तर के लिए धन्यवाद। मैं निश्चित रूप से परीक्षण दस्तावेजों के लिए अनुलग्नक का उपयोग करने पर ध्यान दूंगा। "उचित प्रदर्शन" के लिए बार शायद "svn के करीब" है, अर्थात यदि यह किसी भी ऑपरेशन के लिए काफी धीमा है, तो स्विच करने के लिए बहुत अधिक घर्षण होगा।
एंडर्स फॉर्सग्रेन ने

मुझे लगता है कि Git LFS का उपयोग बड़े बाइनरी फाइल स्टोरेज के लिए भी किया जा सकता है।
इगोरगानापोलस्की

@ आईजीआरजी: हां, जीआईटी एलएफएस एक विकल्प है, अन्य हैं। इसे इंगित करने के लिए धन्यवाद, मैंने अपनी पोस्ट संपादित की।
२१:०६ पर साल्के

4

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

Git में जाने से ये समस्याएँ हल नहीं होंगी, वे समस्या हैं कि आप उपकरण का उपयोग कैसे करते हैं और यदि आप इसी तरह git का उपयोग करते हैं, तो समस्याएँ बनी रहेंगी।

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

इसलिए मैं पहले आपके वर्कफ़्लो को बदलकर देखूंगा, केवल एक बार काम करने का बेहतर तरीका होने पर ही माइग्रेट करना होगा। यदि आप फ़ाइलों या निर्देशिकाओं का नाम नहीं बदलते हैं, तो SVN में ब्रांचिंग और विलय को लागू करें।


4
"आप svn में केवल आसानी से गिट में शाखा कर सकते हैं, और विलय आम तौर पर आसान है और एक ही नुकसान है", वाह यह वास्तव में विवादास्पद दावा है। मेरी राय में गिट में विलय आमतौर पर एक हवा है और svn में आमतौर पर एक दुःस्वप्न होता है, यहां तक ​​कि संस्करणों में मर्ज-ट्रैकिंग पर एक आधे-बेक्ड प्रयास के बाद पेश किया गया था (हां, मैं इस रेपो पर नहीं, बल्कि गिट के साथ काम करता हूं)। वर्कफ़्लो जो हम चाहते हैं वह वह है जहाँ आप उस शाखा पर एक सुविधा शाखा, कोड समीक्षा / CI निर्माण करते हैं। बड़े पैमाने पर हताशा के बिना SVN में ऐसा करने का कोई तरीका नहीं है।
एंडर्स फॉर्सग्रेन ने

2
नहीं, हम इसे हर समय यहाँ करते हैं। मैं सिर्फ अपने SVN रेपो में 157 शाखाओं के माध्यम से जा रहा हूं जिसे देखने के लिए हटा दिया जा सकता है। हम शाखा, देव, समीक्षा करते हैं और फिर यहां लगभग दैनिक आधार पर विलय करते हैं, कभी-कभी परेशानी में पड़ जाते हैं लेकिन वह हमेशा एक नई शाखा को ट्रंक से हटाकर और परिवर्तनों को मर्ज करके तय करता है (इसलिए इसे बाद में आसानी से ट्रंक में मिला दिया जा सकता है) । हालांकि यह वास्तव में प्राचीन शाखाओं पर ही लागू होता है। यदि आपको भारी निराशा होती है, तो आप इसे अच्छी तरह से समझ नहीं पाते हैं। Git आपको बड़े पैमाने पर निराशा भी देगा।
gbjbaanb

2
मैं अभी इसका अनुभव नहीं करता। जब git के साथ काम करना (जैसे मैंने कहा कि मैं करता हूं, लेकिन छोटे रिपोज में) मुझे फीचर ब्रांचिंग, रिबासिंग, स्क्वैशिंग और मर्जिंग करना काफी आसान और स्वाभाविक लगता है। "वृक्ष का नाम बदलने के बाद संघर्ष" आदि बहुत दुर्लभ लगता है, और यह तथ्य कि आप एक रैखिक और सरल इतिहास का अनुकरण कर सकते हैं (रिबास + स्क्वैश आदि के माध्यम से) बहुत महत्वपूर्ण है। तो: विषय पर सवाल रखने के लिए (बड़े प्रतिनिधि के साथ git): चलो मान लेते हैं कि svn मेरे द्वारा आवश्यक वर्कफ़्लो का समर्थन नहीं करता है, और git करता है।
एंडर्स फॉर्सग्रेन ने

1
पिछली कंपनी में हमने git का उपयोग किया था, और मैं किसी ऐसे व्यक्ति को जानता हूं, जो नियमित रूप से इसका उपयोग करके अपना काम खो देता है, इसलिए यह किसी भी तरह से एक आदर्श प्रणाली नहीं है! न ही एसवीएन है, लेकिन एसवीएन आपके हालात के लिए फिट आईएमएचओ की तुलना में बहुत बेहतर है, और यह काम करता है। ऑन-टॉपिक, आप कैसे चाहते हैं जैसे काम करने के लिए ... मुझे वास्तव में यकीन नहीं है कि यह होगा, क्षमा करें।
gbjbaanb

7
@gbjananb यदि कोई Git के साथ अपना काम खो रहा है, तो वे कुछ गलत कर रहे हैं।
रबरडुक

2

जीसीसी मेलिंग सूची में देखें। एसवीएन से जीसीसी संकलक के स्रोत के पेड़ की ओर पलायन , जीसीसी के इतिहास को ध्यान में रखते हुए अभी (अगस्त और सितंबर 2015) पर चर्चा की गई है। जैसे रूपांतरण रूपांतरण के लिए रूपांतरण मशीनरी और स्वीकृति मानदंड के लिए रिपॉजिटरी देखें ; आपको रूपांतरण से संबंधित टूल और प्रक्रियाओं के संदर्भ मिलेंगे (जो ऐसा लगता है कि जितना सीधा नहीं है, उतने बड़े कोड बेस इतिहास के रूपांतरण में 36 घंटे और लगभग 64Gbytes RAM, IIRC की आवश्यकता होती है)


क्या आपका मतलब SVN से Git की ओर पलायन है? एक संस्करण नियंत्रण प्रणाली से एक कंपाइलर सूट में माइग्रेट करना थोड़ा ... अजीब लगता है। इसके अलावा, यह उत्तर की तुलना में टिप्पणी की तरह थोड़ा अधिक पढ़ता है।
8bittree

हाँ। टाइपो के लिए क्षमा करें।
बेसिल स्टारीनेवविच

धन्यवाद। 36 घंटे एक हवा की तरह लगता है, हमारे कुछ हफ़्ते में परिवर्तित कर सकते हैं ...
एंडर्स Forsgren

2

यदि पूरे SVN रिपॉजिटरी को Git में परिवर्तित करने के परिणामस्वरूप विशाल रिपॉजिटरी मिलती है , जो क्लोन के लिए अनुकूल है , तो आप अपने Subversion रिपोजिटरी के कुछ हिस्सों के लिए छोटे Git दर्पण बनाने के लिए SubGit का उपयोग करने का प्रयास कर सकते हैं ।

उदाहरण के लिए, आप अपने SVN रिपॉजिटरी के कुछ उपनिर्देशिका को आयात और सिंक कर सकते हैं http://domain/repos/trunk/project/src:

subgit configure --layout auto --trunk trunk/project/src http://domain/repos project.git
edit project.git/subgit/config
edit project.git/subgit/authors.txt
subgit install project.git

SubGit का उपयोग करने के बारे में अधिक जानकारी के लिए इसके दस्तावेज देखें ।

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

वैकल्पिक रूप से, आप संपूर्ण SVN रिपॉजिटरी आयात कर सकते हैं, लेकिन बड़ी फ़ाइलों को सिंक से बाहर कर सकते हैं:

subgit configure --layout auto --trunk trunk http://domain/repos project.git
edit project.git/subgit/config
...
[svn]
    excludePath = *.bin
    excludePath = *.iso
...
edit project.git/subgit/authors.txt
subgit install project.git

परिणामी Git रिपॉजिटरी का उचित आकार होना चाहिए और डेवलपर्स अभी भी Git का उपयोग अपने परिवर्तनों को सबवर्सन रिपॉजिटरी में सबमिट करने के लिए कर सकते हैं।

ध्यान दें कि यदि आप सबवर्सन सर्वर को चालू रखने और अपने SVN रिपॉजिटरी के साथ Git का उपयोग करने के लिए तैयार हैं, तो यह समाधान आपके लिए अच्छी तरह से काम करना चाहिए।

अस्वीकरण: मैं सबजीत डेवलपर्स में से एक हूं; सबजीट कमर्शियल सॉफ्टवेयर है जिसमें कई तरह के मुफ्त विकल्प उपलब्ध हैं।


1

मैं निम्नलिखित तरीके से आपकी स्थिति के बारे में बताता हूं:

1) अपने SVN रेपो के रूप में एक ही निर्देशिका में एक गिट रिपॉजिटरी को आरम्भ करें। करो git initऔर git remote add originउस गिट रेपो को शुरू करो । इस तरह से आप SVN पर प्रतिबद्ध रहना जारी रख सकते हैं और जब तक आप तैयार नहीं होते हैं, तब तक एक पूर्ण रूपांतरण से निपटने के बिना अलग-अलग काम कर सकते हैं।

2) अपने git रेपो को छोटा और छोटा करने के लिए सक्रिय रूप से bfg और फ़िल्टर-शाखा टूल का उपयोग करें, जैसा कि यहाँ चर्चा की गई है: https://confluence.atlassian.com/bitbucket/reduce-repository-size-3218482626.html

3) अपने बड़े बायनेरिज़ के लिए गिट-एनेक्स, या गिट एलएफएस, या सिर्फ एक बाहरी भंडारण सर्वर का उपयोग करें (बिल्ड समय पर शेल स्क्रिप्ट का उपयोग करके फ़ाइलों को परिवहन करना)।

4) एक बार जब आप अपने गिट रेपो में विलय / शाखा रणनीति के साथ सहज हो जाते हैं, और अपने गिट रेपो के आकार के साथ सहज होते हैं, तो आप अपने svn से git में पूर्ण प्रवास कर सकते हैं।

उम्मीद है की यह मदद करेगा।

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