2010-04-21 6 views
14

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

मेरे पास मुख्य लाइन से केवल मेरी परिवर्तनीय संख्याओं की एक सूची है। इसका उपयोग करके मैं 'p4 वर्णन #' कमांड की एक श्रृंखला के साथ एक स्क्रिप्ट का उपयोग करके एक सूची बदली गई फाइलें और diff आउटपुट उत्पन्न कर सकता हूं।

क्या मैं उस आउटपुट को दोबारा सुधार सकता हूं और इसे किसी भी तरह नई शाखा में लागू कर सकता हूं?

उत्तर

4

पर्सफोर्स आपको एकीकरण के लिए चेंजलिस्ट चुनने देगा, जो एक पैच उत्पन्न करने और लागू करने की कोशिश करने से आसान हो सकता है। पर्सफोर्स ट्रैक करेगा कि आपने किस संशोधन को एकीकृत किया है, जो भविष्य के एकीकरण को आसान बना सकता है।

के आप एक ट्रंक किया करते थे मान लेते हैं:

//depot/mycode/trunk 

और तुम वहाँ आपके सभी बदलावों में जाँच की। आप करने के लिए अतीत में कुछ बिंदु पर ट्रंक शाखाओं:

//depot/mycode/rel 

और तुम ट्रंक पर changelists मर्ज करने के लिए की एक सूची है।

p4 integrate //depot/mycode/trunk/[email protected],1234 //depot/mycode/rel/... 

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

+0

क्यों मैं अगर मैं केवल एक में जाँच जा रहा हूँ को हल करने की जरूरत है? उस प्रतिबद्धता के लिए संशोधित कोड में चेंजलिस्ट केवल कारक को एकीकृत नहीं करता है? अगर मैं पूरी फाइल को देख रहा था तो मैं विवादों को चित्रित कर सकता हूं। – webXL

+0

पर्सफोर्स आपको हर बार जब आप किसी भी प्रकार के संघर्ष, हाथ से संबोधित करने की आवश्यकता होती है तो आपको एकीकृत करते हैं। आपके मामले में, यदि आपके नए चेंजलिस्ट ने पिछले चेंजलिस्ट में कोड जोड़ा है तो आपको संघर्ष मिलेंगे। –

19

शीर्षक पर प्रतिक्रिया: "क्या यह संभव है चेंजलिस्ट के सेट का उपयोग करके एक पैच बनाएं? " हां।

p4 diff2 -u //path_to_your_sources/[email protected]_minus_1 //path_to_your_sources/[email protected] > /tmp/cln.patch. 

तब आप पैच उपयोगिता में इनपुट के रूप में /tmp/cln.patch का उपयोग कर सकते हैं। यहां, 'cln' सबमिट की गई परिवर्तन सूची संख्या है जिसे आप पैच बनाना चाहते हैं।

+2

ध्यान दें कि 'p4 diff2' अतिरिक्त या हटाई गई फ़ाइलों के लिए आउटपुट भिन्न नहीं होगा, इसलिए उन्हें जोड़ने या हटाने के लिए उन्हें' पैच 'प्राप्त करने के लिए विशेष हैंडलिंग की आवश्यकता होगी। – jamesdlin

8

मैंने अभी तक दो घंटे बिताए हैं। साइगविन patch का उपयोग करके, मुझे पथों को तब तक मर्ज करना पड़ा जब तक उन्हें पहचाना नहीं गया।

अंत में, जादू मंत्र इस तरह देखा (पंक्तियों में टूट):

p4 diff2 -u //depot/foo/main/[email protected] //depot/foo/main/[email protected] | 
    sed '[email protected]//depot/@E:/Source/@g' | 
    sed '/^+++\|---/[email protected]/@\\@g' | 
    patch 

यही कारण है:

  1. उपयोग p4 diff2 का हिस्सा का एक एकीकृत diff (-u) प्राप्त करने के लिए दो संशोधनों के बीच डिपो जो मुझे परवाह है। दूसरा चेंजलिस्ट से पहले है जिसे मैं चाहता हूं, अन्यथा यह diff में शामिल नहीं है।
  2. sed का उपयोग //depot/ से E:/Source/ को बदलने के लिए करें, जहां मेरा कार्यक्षेत्र रहता है।
  3. बैकस्लैश को डबल करने के लिए आगे की स्लैश बदलें (ऐसा लगता है कि यह काम करता है)।
  4. patch के माध्यम से परिणामों को पाइप करें।

साइगविन patch पेर्सफोर्स से फ़ाइलों की जांच करने के लिए पर्याप्त स्मार्ट है, लेकिन मुझे यकीन नहीं है कि इसे चुपचाप करने के लिए इसे कैसे प्राप्त किया जाए। यह Get file 'e:\Source\foo\whatever' from Perforce with lock? के साथ संकेत करता है।

यह p4 संस्करण 2010.1, Cygwin के एक काफी हाल ही में स्थापना, PowerShell पर चल रहा है के साथ है।

ओह, और इसके बाद, patch यूनिक्स-स्टाइल लाइन के अंत में लिखा, इसलिए मैंने उनको ठीक करने के लिए u2d का उपयोग किया।

+1

'p4 diff2' का उपयोग करने के बारे में एक चेतावनी के लिए http://stackoverflow.com/a/4925343/179715 पर मेरी टिप्पणी देखें। – jamesdlin