2010-01-27 11 views
5

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

कृपया मदद करें ... शायद कुछ वर्कफ़्लो है जिसमें मैं गिट का उपयोग अपनी पूर्ण महिमा में कर सकता हूं और svn बड़ा करने के लिए (मेरे 'निजी' नहीं ... शायद बहुत छोटे बदलाव और जो कुछ समय के लिए कोड संकलित नहीं करता है) मेरी कंपनी भंडार में परिवर्तन।

अग्रिम धन्यवाद!

उत्तर

8

मैं अपनी रिमोट डिस्क पर किसी अन्य गिट भंडार के साथ गिट रिपॉजिटरी को सिंक्रनाइज़ करना चाहता हूं ताकि मैं इसे विभिन्न कंप्यूटर पर किसी अन्य गिट रिपॉजिटरी के साथ सिंक्रनाइज़ कर सकूं।

प्रयास करें:

git remote add external-repo ssh://host/path/to/git/repo.git 
git push origin external-repo 

मैं जब मैं तय करते हैं कि इस छोटे कदम प्रतिबद्ध करने के लिए (साझा करने के लिए काफी बड़ा) के लायक हैं मेरी Git भंडार में अक्सर प्रतिबद्ध करने के लिए चाहते हैं और मैं प्रतिबद्ध करने के लिए चाहते हैं उन्हें svn करने के लिए लेकिन केवल एक प्रतिबद्ध के साथ।

कोई पसीना नहीं। git rebase -i (इसे "स्क्वैशिंग" कहा जाता है) के साथ कई कामों को संकुचित करें और यह तय करें कि आप रखना चाहते हैं, फेंक दें, या प्रत्येक प्रतिबद्ध को बड़े पैमाने पर स्क्वैश करें। बाहरी रेपो को धक्का देने से पहले संगठित होने के लिए यह बहुत उपयोगी है। -i "इंटरैक्टिव" मोड के लिए है।

'गीट svn' के साथ मैं शाखाओं का उपयोग नहीं कर सकता (क्योंकि जब मैं उन्हें मास्टर के साथ विलय करता हूं, तो मास्टर के पास लिबरल इतिहास नहीं होगा)।

यह सच नहीं है। svn के साथ ट्रैक करने के लिए प्रत्येक शाखा के लिए बस git पर एक शाखा सेट करें। विपरीत दिशा में, आप वैसे भी एक शाखा को एक ही समय में दबा रहे हैं।

2

मैं अपनी कंपनी में हर समय इस तरह से काम करता हूं (वास्तव में अब सबवर्सन खड़ा नहीं हो सकता है)। आपको क्या लगता है कि आप गिट svn के साथ शाखाओं का उपयोग नहीं कर सकते हैं? न केवल आप उनका उपयोग कर सकते हैं, आप सीधे उनसे सबवर्सन पर प्रतिबद्ध कर सकते हैं।

काम करने के विलय करने के लिए आप git rebase remotes/trunk --interactive जैसे कुछ उपयोग करेंगे और स्क्वैश एक साथ काम करता है। हालांकि आप एक ही समय में अपने विस्तारित संस्करण और आपके संघीय संस्करण दोनों को बनाए रख सकते हैं। आप या तो सभी छोटे छोटे काम करते हैं या आप squashed वाले मिलता है।

+0

क्या इस वर्कफ़्लो को दिखाते हुए एक वीडियोकास्ट है? ऐसा लगता है कि मैं कोशिश करना चाहता हूं, चीयर्स – roundcrisis

+0

त्वरित उत्तर के लिए धन्यवाद। लेकिन अगर मैं गिट में विस्तृत इतिहास बनाना चाहता हूं और नतीजतन मैं स्क्वैश करना चाहता हूं तो क्या नहीं? शाखाएं ... क्या मेरे पास केवल मेरी (एसवीएन में साझा नहीं) शाखाएं हो सकती हैं? जैसा कि मेरा संबंध है, मैं अपनी शाखा को मास्टर के साथ विलय नहीं कर सकता और फिर मास्टर गिट svn में कर सकता हूं ... क्योंकि मास्टर के पास रैखिक इतिहास नहीं होगा। कंपनी में गिट और एसवीएन के साथ व्यक्तिगत रूप से काम करने का आपका सबसे अच्छा अभ्यास क्या है? क्या आप उदाहरण के जरिए अपना वर्कफ़्लो दिखा सकते हैं? – miki

+0

@ मिकी: रे शाखाएं - हां वे (svn में साझा नहीं) वे थे जिनके बारे में मैं बात कर रहा था। आप जितनी शाखाएं चाहें उतनी शाखाएं बना सकते हैं और svn पर वापस आने से पहले उन्हें मास्टर में वापस मर्ज कर सकते हैं। या आप सीधे उन शाखाओं से svn तक dcommit कर सकते हैं। –

2

इंटरैक्टिव रीबेस के बजाय आप "आधिकारिक" शाखा पर git merge --squash का भी उपयोग कर सकते हैं।

git checkout master 
git merge --squash development 

इसका लाभ यह है कि यह आपके विकास इतिहास को नष्ट नहीं करेगा। अब आप अपने सभी परिवर्तनों वाली एक बड़ी प्रतिबद्धता बना सकते हैं, या आप इंडेक्स को रीसेट कर सकते हैं (git reset का उपयोग करके) और git add -p या git gui का उपयोग अपनी शाखा से अलग-अलग काम करने के लिए करते हैं, जिसे आप सामान्य रूप से master और git-svn dcommit पर उचित करते समय उचित करते हैं ।

1

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

यह किसी भी तरह से सुरुचिपूर्ण नहीं है, लेकिन चूंकि मैं केवल सप्ताह में कुछ बार केंद्रीय रेपो से चेकआउट/चेकइन हूं, यह पूरी तरह से अच्छी तरह से काम करता है।

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