2009-06-01 7 views
7

मेरे ठेठ Git-svn कार्यप्रवाह है:गिट-एसवीएन डॉकिट क्यों मेरे गिट रेपो में डुप्लिकेट छोड़ देता है? क्या मैं इसे कर सकता हूँ?

git checkout -b story-xyz 
git commit -a -m "work" 
git commit -a -m "more work" 
git checkout master 
git svn fetch 
git merge remotes/trunk 
git checkout story-xyz 
git rebase master (sometimes with -i) 
git checkout master 
git merge story-xyz 

इस बिंदु पर मैं अपने master और story-xyz शाखाओं ही की ओर इशारा करते प्रतिबद्ध, एक या अधिक remotes/trunk से आगे करता है। remotes/trunk के बाद से सब कुछ एक रैखिक इतिहास में है।

last svn commit [remotes/trunk] <--- work <--- more work [master, story-xyz] 

मैं तो चलाने

git svn dcommit 

मैं remotes/trunk और master बन सबवर्सन संशोधनों के बीच करता देखने के लिए उम्मीद थी, और remotes/trunk, master और story-xyz सभी नवीनतम की ओर इशारा करते के साथ एक एकल रैखिक इतिहास के साथ खत्म संशोधन, जैसे:

last svn commit <--- work <--- more work [master, story-xyz, remotes/trunk] 

मेरा सबवर्जन संशोधन ठीक है, लेकिन मैं दो ब्रांडेड संरचना के साथ समाप्त होता हूं। मैंने प्रतिबद्ध होने से पहले शाखा की आम जड़ सबवर्सन हेड है। दोनों शाखाओं में काम की एक ही श्रृंखला होती है, इस अर्थ में कि उनमें एक ही अंतर होता है।

last svn commit <--- work <--- more work [master, remotes/trunk] 
        | 
        \- work <--- more work [story-xyz] 

Git करता है कि मैं git svn dcommit चलाने से पहले था संदेशों प्रतिबद्ध मेरी Git के साथ, कम शाखा (story-xyz) पर कर रहे हैं, Git: शाखा story-xyz अन्य पर एक शाखा, remotes/trunk और master के सिर पर है उपयोगकर्ता नाम और ईमेल, और गिट प्रतिबद्ध टाइमस्टैम्प। ऊपरी शाखा में काम करता है नई गिट करता है। जब मैं dcommit चलाता हूं, तो वे मेरे सबवर्जन उपयोगकर्ता नाम, टाइमस्टैम्प का उपयोग करते हैं, और प्रतिबद्ध संदेशों में git-svn-id फ़ील्ड शामिल होता है।

यह ठीक है, और मैं काम कर सकता हूं। समस्या यह है कि मैं gitk में देखता हूं और देखता हूं कि एक अनमोल शाखा story-xyz की तरह दिखता है। एक कहानी शाखा के बीच अंतर बताने में काफी मुश्किल है जिसे मैंने master में विलय कर दिया है, और जो मैंने नहीं किया है। इसे स्थानांतरित करने का सबसे स्पष्ट तरीका डुप्लिकेट प्रतिबद्ध संदेश है। मैं story-xyz शाखा को हटा सकता हूं, लेकिन ऐसा लगता है कि मैं ठीक से गिट का उपयोग नहीं कर रहा हूं और मैंने अपना कुछ इतिहास खो दिया है।

क्या मुझे ऐसा कुछ याद आ रहा है जो ऐसा करने से git-svn को रोक देगा? या क्या यह सब तरीकों में से एक है जो सबवर्सन के साथ बातचीत करने से गिट की शक्ति और स्वतंत्रता को कम करता है?

उत्तर

4

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

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

मैं कार्यप्रवाह का एक और संस्करण की पेशकश करेंगे:

git checkout -b story-xyz remotes/trunk 
git commit -a -m "work" 
git commit -a -m "more work" 
git svn fetch 
git rebase remotes/trunk (with -i, perhaps) 
git svn dcommit 

यह आपको अतिरिक्त शाखा के बिना एक पेड़ देना चाहिए। हालांकि, आपको तेजी से आगे विलय के साथ सावधान रहना होगा।

+0

धन्यवाद, मैं आज कोशिश करूँगा।ऐसा लगता है कि यह पूरी तरह से मास्टर की आवश्यकता को हटा देगा - तो क्या आप चाहते हैं कि रिमोट/ट्रंक का इतिहास अब इतिहास की हमारी 'मुख्य पंक्ति' है? –

+1

रिमोट/ट्रंक का इतिहास आपके मामले में 'मुख्य रेखा' भी है। अपना अंतिम ग्राफ देखें। मास्टर का इतिहास रिमोट/ट्रंक के इतिहास के समान है। दोनों समान रूप से "मुख्य रेखा" के रूप में मान्य हैं - और भी अधिक रिमोट करते हैं, क्योंकि यह _shared_ मुख्य पंक्ति है। आपको पूरी तरह मास्टर को खत्म करने की आवश्यकता नहीं है। आप इतिहास में कुछ पहले बिंदु पर इसे लटक सकते हैं। फिर अगर आपको ऐसा करने की ज़रूरत है एक प्रतिबद्धता, आप चेकआउट मास्टर और svn वर्तमान दिन को रीबेज कर सकते हैं। –

+0

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

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