Git उपयोगकर्ताओं के लिए Perforce? [बन्द है]


173

वहाँ "Git for Perforce उपयोगकर्ताओं" के बहुत सारे दस्तावेज़ हैं, लेकिन प्रतीत होता है कि इसके विपरीत बहुत कम हैं।

मैंने केवल पहले Git का उपयोग किया है और हाल ही में एक नौकरी शुरू की है जहाँ मुझे Perforce का बहुत उपयोग करना है, और बहुत समय में अपने आप को बहुत उलझन में पाया। जिन अवधारणाओं का उपयोग मैं Git से कर रहा हूं, वे ऐसा प्रतीत नहीं करते हैं कि Perforce का मानचित्र बिल्कुल भी नहीं है।

क्या किसी को पेरिट का उपयोग करने के लिए कुछ युक्तियों को एक साथ रखने में रुचि है, जो गिट के लिए उपयोग किया जाता है?

जवाबों:


334

यह कुछ मैं पिछले कुछ हफ्तों से अधिक काम कर रहा हूं। यह अभी भी विकसित हो रहा है, लेकिन यह मददगार हो सकता है। कृपया ध्यान दें कि मैं एक Perforce कर्मचारी हूँ।

Git उपयोगकर्ताओं के लिए Perforce का परिचय

यह कहना कि Git से Perforce या Perforce से Git में जाना गैर-तुच्छ है, एक भव्य समझ है। दो उपकरण होने के लिए जो कि एक ही चीज़ को अस्थिरता से करते हैं, उनका दृष्टिकोण अधिक भिन्न नहीं हो सकता है। यह संक्षिप्त लेखन नए पेरफोर्स उपयोगकर्ताओं को Git से आने वाले नए दुनिया को समझने में मदद करने की कोशिश करेगा जो वे अंदर हैं।

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

यदि आप Git Fusion को स्थापित करने के लिए अपने व्यवस्थापक को मना नहीं कर सकते हैं, तो Git अपने आप में GFS-P4 नामक एक Perforce बाइंडिंग के साथ आता है जो आपको Perit कार्यक्षेत्र में फ़ाइलों को बदलने और सबमिट करने के लिए Git का उपयोग करने की अनुमति देता है। उस पर अधिक जानकारी यहां पाई जा सकती है: https://git.wiki.kernel.org/index.php/GitP4

अभी भी यहीं? अच्छा है, आइए Perforce को देखें।

कुछ शब्दावली अंतर छाँटने के लिए अंतर

इससे पहले कि हम विवरण में मिलें, हमें Git और Perforce के बीच कुछ शब्दावलियों के अंतरों को संक्षेप में कवर करना होगा।

पहला चेकआउट है । Git में यह है कि आप किसी दिए गए शाखा से कोड की एक प्रति अपने कार्य क्षेत्र में कैसे प्राप्त करें। पेरफोर्स में हम इसे कमांड लाइन या हमारे GUI P4V "गेट लेटेस्ट रिवीजन" से सिंक कहते हैं। Perforce P4V से या कमांड लाइन से चेकआउट शब्द का उपयोग करता है, जिसका p4 editअर्थ है कि आप संस्करण नियंत्रण प्रणाली से एक फ़ाइल को बदलने की योजना बनाते हैं। इस दस्तावेज़ के बाकी हिस्सों में, मैं शब्द के Perforce अर्थ में चेकआउट का उपयोग करूंगा।

दूसरा है Git प्रतिबद्ध बनाम Perforce सबमिट । जहां आप Git में प्रतिबद्ध होंगे, आप Perforce में जमा करेंगे। सभी ऑपरेशन साझा किए गए Perforce संस्करण सेवा के विरुद्ध होने के नाते, Perforce के लिए एक समान नहीं है git push। इसी तरह हमारे पास नहीं है pull; ऊपर से सिंक कमांड हमारे लिए फाइलें प्राप्त करने का ध्यान रखती है। जब तक आप संक्षेप में वर्णित हमारे P4Sandbox टूल का उपयोग करने का चयन नहीं करते हैं, तब तक Perforce में शुद्ध स्थानीय सबमिट की कोई अवधारणा नहीं है।

Perforce में प्रमुख अवधारणाएँ

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

पेरफोर्स वर्कस्पेस या क्लाइंट उस सिस्टम में एक ऑब्जेक्ट है जो पेरफोर्स सर्वर में फाइलों का एक सेट किसी यूजर के फाइल सिस्टम पर किसी लोकेशन पर मैप करता है। प्रत्येक उपयोगकर्ता के पास उपयोग की जाने वाली प्रत्येक मशीन के लिए एक कार्यक्षेत्र होता है, और अक्सर उपयोगकर्ताओं के पास एक ही मशीन के लिए एक से अधिक कार्यक्षेत्र होंगे। कार्यक्षेत्र का सबसे महत्वपूर्ण हिस्सा कार्यक्षेत्र मैपिंग या दृश्य है।

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

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

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

कार्यस्थान क्यों?

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

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

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

Perforce कार्यस्थानों की पूरी शक्ति के बारे में अधिक जानकारी के लिए P4 कॉन्फ़िगर करना पढ़ें ।

स्पष्ट चेकआउट बनाम निहित चेकआउट

Git से Perforce में जाने वाले उपयोगकर्ताओं के लिए सबसे बड़ी चुनौतियों में से एक स्पष्ट चेकआउट की अवधारणा है। यदि आप फ़ाइलों को बदलने के Git / SVN / CVS वर्कफ़्लो के आदी हैं और फिर संस्करण नियंत्रण प्रणाली को यह बताने के लिए कि आपने क्या किया है, तो यह एक अत्यंत दर्दनाक संक्रमण हो सकता है।

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

क्यों चेकआउट हुआ?

एक प्रश्न जो मुझे अक्सर प्राप्त होता है, वह है "आप कभी भी स्पष्ट चेकआउट का उपयोग क्यों करना चाहेंगे?" यह पहले ब्लश पर एक पागल डिजाइन निर्णय लगता है, लेकिन स्पष्ट चेकआउट के कुछ शक्तिशाली लाभ हैं।

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

एक और लाभ स्पष्ट है कि चेकआउट अतुल्यकालिक संचार का एक रूप प्रदान करता है जो डेवलपर्स को आमतौर पर यह बताता है कि उनके साथी क्या काम कर रहे हैं, या कम से कम कहां। यह आपको बता सकता है कि आप एक निश्चित क्षेत्र में काम करने से बचना चाहते हैं ताकि अनावश्यक संघर्ष से बचा जा सके, या यह आपको इस तथ्य से सचेत कर सकता है कि टीम का एक नया डेवलपर कोड में भटक गया है, जिसकी शायद उन्हें आवश्यकता नहीं है संपादन होना। मेरा व्यक्तिगत अनुभव यह है कि मैं उन परियोजनाओं पर ऑलराइट के साथ Git में या Perforce का उपयोग करने के लिए काम करता हूं, जहां मैं या तो केवल एक योगदानकर्ता या एक अनन्त योगदानकर्ता हूं, और जब मैं एक टीम के साथ कसकर काम कर रहा हूं, तो स्पष्ट चेकआउट। शुक्र है कि चुनाव आपका है।

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

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

पेरिट्स रिप्लेसमेंट फॉर गिट फीचर्स

  • git stash ==> p4 shelve
  • git लोकल ब्रांचिंग ==> या तो Perforce अलमारियों या कार्य शाखाओं को
  • git blame==> p4 annotateया जीयूआई से समय- सीमा देखें

काम करना बंद कर दिया

Perforce संस्करण सेवा से डिस्कनेक्ट किए गए कार्य के लिए दो विकल्प हैं (वह है Perforce सर्वर के लिए हमारा फैंसी शब्द)।

1) पूर्ण स्थानीय संस्करण और स्थानीय शाखा के लिए P4Sandbox का उपयोग करें

2) फ़ाइलों को संपादित करें जैसा कि आप कृपया और 'पी 4 स्थिति' का उपयोग करके यह बताएं कि आपने क्या किया है

उपरोक्त दोनों विकल्पों के साथ आप अपने कार्यक्षेत्र में "ऑलराइट" सेटिंग का उपयोग करने का विकल्प चुन सकते हैं ताकि आपको फ़ाइलों को अनलॉक न करना पड़े। इस मोड में काम करते समय आप "p4 सिंक" के बजाय नई फ़ाइलों को सिंक करने के लिए "p4 अपडेट" कमांड का उपयोग करना चाहेंगे। "p4 अद्यतन" उन पर सिंक्रनाइज़ होने से पहले परिवर्तनों की फ़ाइलों की जाँच करेगा।

Perforce क्विकस्टार्ट

निम्नलिखित सभी उदाहरण कमांड लाइन के माध्यम से होंगे।

1) पेरफोर्स के लिए अपने कनेक्शन को कॉन्फ़िगर करें

export P4USER=matt
export P4CLIENT=demo-workspace
export P4PORT=perforce:1666

आप इन सेटिंग्स को अपने शेल कॉन्फिग फाइल में चिपका सकते हैं, p4 setविंडोज और ओएस एक्स पर उन्हें बचाने के लिए उपयोग कर सकते हैं या पेरफोर्स कॉन्फिगर फाइल का उपयोग कर सकते हैं।

1) एक कार्यक्षेत्र बनाएँ

p4 workspace

# set your root to where your files should live:
Root: /Users/matt/work

# in the resulting editor change your view to map the depot files you care about
//depot/main/... //demo-workspace/main/...
//depot/dev/...  //demo-workspace/dev/...

2) सर्वर से फ़ाइलें प्राप्त करें

cd /Users/matt/work
p4 sync

3) उस फ़ाइल को चेकआउट करें जिस पर आप काम करना चाहते हैं और उसे संशोधित करें

p4 edit main/foo; 
echo cake >> main/foo

4) इसे सर्वर पर जमा करें

p4 submit -d "A trivial edit"

5) p4 help simpleमूल आदेशों को देखने के लिए चलाएं जिन्हें आपको पेरफोर्स के साथ काम करने की आवश्यकता होगी।


5
एक अद्भुत अवलोकन। मैं अपने कुछ नए कर्मचारियों को देने के लिए इसे (या वेबसाइट पर परिणामी पोस्ट) सहेज रहा हूँ।
कालेब हुइत - cjhuitt

@ मट्ट कहते हैं, "जीआईटी से आने पर यह महसूस करना आसान है कि पूरे कार्यक्षेत्र की अवधारणा जिस तरह से अधिक मूल्य की है उससे अधिक परेशानी है।" संभवतः - लेकिन मैं वर्षों से आरसीएस और सीवीएस में इस तरह की मैपिंग कर रहा हूं। सीवीएस मॉड्यूल का उपयोग नहीं कर रहे हैं, लेकिन एक या एक से अधिक सीवीएस रेपो में इंगित करने वाले सीमलिंक के पेड़ बनाकर। विरल पेड़, सभी निर्देशिकाओं से युक्त नहीं। बहुत से कारणों से आप ऐसा करने वाले पेरफोर्स का वर्णन करते हैं। सीवीएस में इसे बनाए रखने के लिए दर्द हो सकता है। (और Git, और एचजी, और BzR ... इतना यकीन नहीं BzR के बारे में।)
क्रेजी Glew

धन्यवाद मैट, एक बेहद उपयोगी पढ़ा। मुझे अभी भी लगता है कि वर्जनिंग सिस्टम मुझे यह बताना चाहिए कि मैंने रिमोट रेपो की तुलना में या शाखाओं के बीच स्थानीय रूप से क्या बदला है न कि दूसरे तरीके से :)
jupp0r

1
वास्तव में! शुक्र है कि आप Perforce के साथ कर सकते हैं; मैंने वर्षों में 'p4 edit' नहीं चलाया है। perforce.com/blog/131112/say-goodbye-p4-edit
मैट

8
धन्यवाद, लेकिन एक सुझाव। यह शब्द 'शक्तिशाली' है, बल्कि निराला है और मुझे प्रचार के रूप में बयान की अवहेलना करने के लिए छोड़ देता है। मैं पसंद करूँगा अगर आपने फीचर को समझाया और फिर मुझे निर्णय लेने दें कि क्या यह शक्तिशाली है या नहीं।
डेमियन

24

Git और p4 के बीच सबसे बड़ा अंतर, जो कि मौजूदा जवाब पते में से कोई भी नहीं है, यह है कि वे अमूर्तता की विभिन्न इकाइयों का उपयोग करते हैं।

  • गिट में, अमूर्त पैच (उर्फ अंतर, उर्फ ​​बदलाव) है। जीआईटी में एक प्रतिबद्धता अनिवार्य रूप diffसे फाइलों के पिछले और वर्तमान स्थिति के बीच चलने का आउटपुट है ।
  • Perforce में, एब्स्ट्रैक्शन फाइल है । पी 4 में एक कमिट उस समय में कमिट में फाइलों की पूरी सामग्री है। यह एक चेंजलिस्ट में आयोजित किया जाता है, लेकिन संशोधन स्वयं एक प्रति-फ़ाइल आधार पर संग्रहीत होते हैं, और चैंजिस्ट बस फाइलों के विभिन्न संशोधनों को एक साथ इकट्ठा करता है।

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

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


10
मुझे नहीं लगता कि यह विवरण पूरी तरह से सटीक है - git स्टोर सभी फ़ाइलों का पूरा स्नैपशॉट लेता है, और एक फ़ाइल बदलने पर एक नया स्नैपशॉट बनाता है (जो कि बड़ी बाइनरी फ़ाइलों में लगातार बदलाव के मामले में महंगा बनाता है), इसलिए एक कमिट में ही शामिल होता है सभी फ़ाइलों की वर्तमान स्थिति के लिए लिंक (हैश के माध्यम से)। इसीलिए आमतौर पर गिट में शाखाओं को बदलना बहुत तेजी से होता है - यह सिर्फ उन सभी फाइलों के संदर्भित संस्करणों को कॉपी करना होता है जिनकी हैश कार्यक्षेत्र में बदल गई है। तुलना और विलय / पुनरावृत्ति के लिए आवश्यक होने पर ही मक्खी का निर्माण किया जाता है।
चेरफोंसो

3
हुड के तहत सटीक कार्यान्वयन के बावजूद, गिट में एक मर्ज कमांड (विशेष रूप से एक तुच्छ मर्ज या फास्ट-फॉरवर्ड) अंतिम-उपयोगकर्ता के दृष्टिकोण से पैच का उपयोग करने के लिए संचालित होता है , जो कि मैं बनाने की कोशिश कर रहा हूं।
डेमियन

Perforce चैंजिस्ट (चेंजसेट) मर्ज कर सकता है। यहां एक स्टैक ओवरफ्लो प्रश्न है जो इसके बारे में बात करता है। stackoverflow.com/questions/6158916/perforce-merge-changelist/…
Br.Bill

5
@ Br.Bill फिर, मैं जो बिंदु बना रहा हूं वह यह नहीं है कि क्या P4 चीजों को करने में सक्षम है (क्योंकि निश्चित रूप से यह है!)। बात अमूर्तता के बारे में है , अर्थात यह कैसे काम करता है, यह समझने के लिए उपयोगकर्ता को मॉडल को आंतरिक बनाने की आवश्यकता है।
डेमियन

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

20

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

एक से दूसरे में कमांड मैप करने की कोशिश करना सही तरीका नहीं है; केंद्रीकृत बनाम वितरित संशोधन नियंत्रण प्रणालियों की अवधारणाएं समान नहीं हैं। इसके बजाय, मैं Perforce में एक विशिष्ट वर्कफ़्लो का वर्णन करूंगा:

  1. p4 editउस प्रत्येक फ़ाइल को चलाएं जिसे आप संपादित करना चाहते हैं। आपको Perforce को यह बताने की आवश्यकता है कि आप किन फ़ाइलों का संपादन कर रहे हैं। यदि आप नई फ़ाइलें जोड़ रहे हैं, तो उपयोग करें p4 add। यदि आप फ़ाइलों को हटा रहे हैं, तो उपयोग करें p4 delete
  2. अपना कोड परिवर्तन करें।
  3. p4 changeएक बदलाव बनाने के लिए चलाएँ । यहां आप अपने परिवर्तन का विवरण बना सकते हैं और वैकल्पिक रूप से अपने बदलाव से फ़ाइलें भी जोड़ या निकाल सकते हैं। p4 change CHANGE_NUMBERयदि आवश्यक हो तो आप बाद में विवरण को संपादित करने के लिए चला सकते हैं ।
  4. यदि आपको आवश्यकता हो तो आप अतिरिक्त कोड परिवर्तन कर सकते हैं। यदि आपको अन्य फ़ाइलों को जोड़ने / संपादित करने / हटाने की आवश्यकता है, तो आप उपयोग कर सकते हैं p4 {add,edit,delete} -c CHANGE_NUMBER FILE
  5. p4 syncसर्वर से नवीनतम परिवर्तनों में खींचने के लिए चलाएँ ।
  6. p4 resolveसमन्‍वयन से किसी भी विरोध को हल करने के लिए चलाएं ।
  7. जब आप अपना परिवर्तन सबमिट करने के लिए तैयार हों, तो दौड़ें p4 submit -c CHANGE_NUMBER

आप p4 revertफ़ाइलों में अपने परिवर्तनों को वापस लाने के लिए उपयोग कर सकते हैं ।

ध्यान दें कि आप एक साथ कई परिवर्तनों पर काम कर सकते हैं जब तक कि उनकी कोई भी फाइल ओवरलैप न हो। (आपके Perforce ग्राहक की एक फ़ाइल एक समय में केवल एक बदलाव में खुली हो सकती है।) यदि आप छोटे, स्वतंत्र परिवर्तन करते हैं तो यह कभी-कभी सुविधाजनक हो सकता है।

यदि आप अपने आप को उन फ़ाइलों को संपादित करने की आवश्यकता महसूस करते हैं, जो आपके पास पहले से ही किसी अन्य बदलाव में खुली हैं, तो आप या तो एक अलग Perforce ग्राहक बना सकते हैं या बाद के लिए अपने मौजूदा बदलाव को रोक सकते हैं p4 shelve। (इसके विपरीत git stash, शेल्फ़िंग आपके स्थानीय ट्री में फ़ाइलों को वापस नहीं लाती है, इसलिए आपको उन्हें अलग से वापस करना होगा।)


3
मुझे खेद है कि मुझे यह नहीं मिला: क्या आधुनिक प्रणालियों को पारंपरिक प्रणालियों की तुलना में अधिक जटिल होना चाहिए? सॉफ्टवेयर इंजीनियरिंग में सरलता हमेशा सिद्धांत है। एक अर्थ में, मुझे लगता है कि G4 G4 की तुलना में अवधारणा और प्रयोज्य (और स्थिरता) दोनों में अधिक आधुनिक है। मुझे Git से नफरत नहीं है, लेकिन देखें, सॉफ्टवेयर इंजीनियरिंग की 30 साल की उन्नति के बाद, लोगों को वीसीएस कमांड जारी करने के लिए पाठ आधारित कंसोल का सहारा लेने के लिए मजबूर किया जाता है - मानव विकास में गिरावट!
देजुवु

5
@ डेजावू यह पारंपरिक बनाम आधुनिक के बारे में इतना नहीं है; यह केंद्रीकृत बनाम वितरित (और वितरित वाले अधिक आधुनिक होने के लिए) के बारे में अधिक है। वितरित किए गए आवश्यक रूप से अधिक जटिल नहीं हैं, लेकिन मैंने विशेष रूप से कहा है कि "Perforce ... को कम जटिल माना जाता है ...", जो कि एक बयान है, तथ्य नहीं है, और जिसका मतलब कंबल नहीं है सभी प्रणालियों के बारे में बयान। मैं व्यक्तिगत रूप से गिट को अधिक जटिल मानता हूं क्योंकि यह अधिक अवधारणाएं जोड़ता है (जैसे धक्का देना, खींचना, रिबास करना), और कुछ चीजें सीधी नहीं हैं (जैसे वैश्विक परिवर्तन संख्याओं के बजाय हैश)।
jamesdlin

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

4
@Dejavu, आपकी टिप्पणी का कोई मतलब नहीं है, आधुनिक IDEs को ग्राफिक रूप से समर्थन मानते हुए git, और उन्होंने वर्षों से ऐसा किया है।
एक्यूमेनस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.