2010-10-15 13 views
16

पर माइग्रेट करना मेरे पास गिट से पर्सफोर्स तक मेरी टीम & स्रोत माइग्रेट करने का कार्य है, और मैं गिट इतिहास को पी 4 में कैसे स्थानांतरित करने के बारे में विचारों की तलाश में हूं।गिट से पर्सफोर्स

मैं केवल मास्टर शाखा को खुश करने में खुश रहूंगा। हालांकि, यहां तक ​​कि समस्याग्रस्त साबित हो रहा है।

मैं अद्भुत गिट-पी 4 उपकरण का उपयोग कर रहा हूं। मैं अपने पी 4 वर्कस्पेस में एक गंतव्य क्षेत्र बनाता हूं, और गिट-पी 4 में इसे ट्रैक करना शुरू करने के लिए git p4 clone //depot/StuffFromGit का उपयोग करता हूं। मैं गिट-पी 4 क्लोन में अपने सभी गिट भंडार के परिवर्तनों को तैयार करता हूं। मैं git p4 submit कर सकता हूं और किया जा सकता है, सभी परिवर्तन पी 4 पर धकेल दिए जाते हैं।

यह बहुत अच्छा काम करता है जब Git इतिहास इस तरह दिखता है, अच्छा और रैखिक:

A---B---C---D 

समस्या कई परियोजना पर काम कर रहे लोगों के साथ आता है। भले ही वे मास्टर पर काम कर रहे हों, फिर भी वे शाखाएं बनाते हैं जो विभाजन और विलय करते हैं। (या ABDCE, या तो व्यक्ति के इतिहास पहले)

A---B---C---E 
    \--D--/ 

Git p4 ठीक पार करता है, ताकि ABCDE करने से: फिर भी, Git-पी 4 बहादुरी से इस संभालती है।

समस्या तब होती है जब उदाहरण के लिए, सी और डी दोनों एक ही फ़ाइल को बदलते हैं, और ई वास्तविक ईमानदार-से-भलाई विलय है। git p4 rebase यहां विफल रहता है; यह काम करता है, लेकिन प्लेबैक के दौरान यह पहले सी लागू करेगा, फिर डी का प्रयास करें और एक संघर्ष खोजें। फिर मुझे विलय करने के लिए कहने से रोक दिया जाएगा। खैर, ई में विलय शामिल है लेकिन यह मुझे हाथ से विलय करने के लिए कह रहा है! 'git p4 submit' इसी तरह से असफल हो जाएगा, केवल अब यह पूर्व-विलय परिवर्तन को अस्वीकार कर रहा है।

 
Using index info to reconstruct a base tree... 
Falling back to patching base and 3-way merge... 
Auto-merging main.cpp 
CONFLICT (content): Merge conflict in main.cpp 
Failed to merge in the changes. 
Patch failed at 0005 Changing main 

तो अब मैं अटक गया हूं। क्या गिट इतिहास को स्वच्छ करने या गिट-पी 4 को समझने के लिए कोई तरीका है? यह विचलित है क्योंकि विलय वहां हैं।

विचार मैं लिया है: परस्पर विरोधी फ़ाइलों के सभी उल्लेख दूर करने के लिए

  • उपयोग Git फिल्टर शाखा। मुझे इतिहास की टिप्पणियां मिलेंगी, हालांकि कई फ़ाइल परिवर्तन गायब हैं। इतिहास में लगभग 3000 काम करने के साथ, मैं सभी प्रमुख (व्यस्त) फ़ाइलों के इतिहास को हटाने के लिए हवादार हो जाऊंगा। फ़िल्टर किए गए फाइलों के आयात के अंत में, मैं हेड की अंतिम प्रतिबद्धता करके लापता फाइलों को वापस जोड़ दूंगा।
  • इतिहास डंप करें, सिर की एक पी 4 प्रतिबद्ध करें (सरल लेकिन उदास)।
  • पी 4 पर नहीं जाएं: मैंने उस विचार को यथासंभव लंबे समय तक काम किया है।

इनमें से कोई भी वास्तव में महान नहीं है। काम करने के लिए 'gt p4 rebase' या 'git p4 submit' को गिट करने के तरीके पर कोई विचार?

+14

गिट के इतिहास को देखते हुए, यह माइग्रेट करने के लिए एक मजेदार दिशा है। –

+2

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

+16

वाह, आदमी, मुझे खेद है। लगता है जैसे आप 10-15 साल पीछे की तरह आगे बढ़ रहे हैं। – Jonathan

उत्तर

6

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

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

+0

पर्सफोर्स आमतौर पर सब का उपयोग नहीं करता है शाखाएं, लेकिन यदि आप शाखाओं का प्रबंधन करना चाहते हैं तो यह कर सकते हैं। फिर जानकारी वहाँ है। –

-2

मुझे लगता है कि आपको टोर्टोइस एसवीएन के साथ प्रयास करना चाहिए और फिर एचजी को एकल शाखा अद्यतन पर विचार करना चाहिए या आप माइग्रेशन कह सकते हैं। सुनिश्चित करें कि आपके पास सुरक्षित पक्ष पर होने वाले सभी डंप क्लोन हैं। शुभकामनाएँ!

2

क्या आपने "tailor" टूल को चेक किया है? यह विभिन्न वीसीएस सिंक्रनाइज़ करने के लिए बनाया गया है: एसएस। यह पर्सफोर्स-सपोर्ट होना चाहिए।

एक साइड-नोट के रूप में, मेरी पहली प्रतिक्रिया निर्णय पर गंभीरता से सवाल करेगी, लेकिन मुझे लगता है कि आप पहले ही ऐसा कर चुके हैं।

संबंधित मुद्दे