गिट-एसवीएन से दूरस्थ शाखा नियमित गिट रिमोट के समान ही है। तो आपके स्थानीय भंडार में आप अपने गिट-एसवीएन क्लोन प्राप्त कर सकते हैं और गिटहब में बदलाव कर सकते हैं। गिट परवाह नहीं है। यदि आप अपना गिट-एसवीएन क्लोन बनाते हैं और गिटहब में सटीक उसी बदलाव को दबाते हैं, तो आपके पास Google Code रिपॉजिटरी का एक अनौपचारिक दर्पण होगा। बाकी वेनिला गिट है।
git svn clone http://example.googlecode.com/svn -s
git remote add origin [email protected]:example/example.git
git push origin master
अब आपके पास यह है, कभी-कभी आपको गिट के साथ सबवर्जन रिपोजिटरी को सिंक्रनाइज़ करना होगा। यह कुछ इस तरह दिखाई देंगे:
git svn rebase
git push
gitk में या जो कुछ भी है, इस कुछ इस तरह दिखेगा:
o [master][remotes/trunk][remotes/origin/master]
|
o
|
o
और जब आप git svn rebase
चलाने के लिए, तो आप इस होगा:
o [master][remotes/trunk]
|
o
|
o [remotes/origin/master]
|
o
|
o
तो अब git push
चल रहा है जो उन लोगों को गिटहब, [रिमोट/मूल/मास्टर] शाखा में धक्का देगा। और आप पहले ASCII कला आरेख में परिदृश्य पर वापस आ जाएंगे।
समस्या अब है, आप मिश्रण में अपने परिवर्तन कैसे काम करते हैं? विचार यह है कि, आप कभी भी उसी शाखा पर प्रतिबद्ध नहीं होते हैं कि आप git-svn-rebase-ing और git-pushing हैं। आपको अपने परिवर्तनों के लिए एक अलग शाखा की आवश्यकता है। अन्यथा, आप सबवर्सन के शीर्ष पर अपने परिवर्तनों को फिर से समाप्त कर देंगे, जो आपके गिट भंडार को क्लोन करने वाले किसी भी व्यक्ति को परेशान कर सकता है। मेरे पीछे आओ? ठीक है, तो आप एक शाखा बनाते हैं, चलिए इसे "फीचर्स" कहते हैं। और आप एक प्रतिबद्धता बनाते हैं और इसे फीट शाखा में गिटहब तक पहुंचाते हैं। आपका गिट कुछ ऐसा दिखाई देगा:
o [features][remotes/origin/features]
|
o
|
o [master][remotes/trunk][remotes/origin/master]
|
o
यहां आपको अपनी विशेषताओं की शाखा Google कोड शाखा से पहले कुछ काम करती है, है ना? तो क्या होता है जब आप Google Code से नई सामग्री को शामिल करना चाहते हैं? आप git svn rebase
पहले चलाने के लिए और इस मिल चाहते हैं:
o [features][remotes/origin/features]
[master][remotes/trunk] o |
| o
o/
|/
o[remotes/origin/master]
|
o
आप git push
मास्टर बाहर हैं, तो आप मास्टर के रूप में एक ही बिंदु पर जा रहा है [रिमोट/मूल/मास्टर] कल्पना कर सकते हैं। लेकिन आपकी फीचर शाखा में बदलाव नहीं हैं। अब आपके विकल्प मास्टर में विशेषताओं को मर्ज करने या सुविधाओं को रीबेज करने के लिए हैं।एक विलय इस
git checkout features
git merge master
o [features]
/|
/o [remotes/origin/features]
[master] o |
| o
o/
|/
o
|
o
फिर आप गिटहब में सुविधाओं को धक्का देंगे। मैंने अंतरिक्ष को बचाने के लिए मास्टर के रिमोट को छोड़ दिया है, वे [मास्टर] के समान बिंदु पर होंगे।
रिबेस दृष्टिकोण थोड़ा और बुरा है - आपको मजबूती से धक्का देना होगा क्योंकि आपका धक्का तेजी से आगे बढ़ने वाला नहीं होगा (आप सुविधाओं को शाखा के नीचे से खींच लेंगे जिसने इसे क्लोन किया था)। ऐसा करने के लिए वास्तव में ठीक नहीं माना जाता है, लेकिन यदि आप निर्धारित हैं तो कोई भी आपको रोक नहीं सकता है। यह कुछ चीजों को भी आसान बनाता है, जैसे कि जब पैच थोड़ा सा पुनर्निर्मित रूप में अपस्ट्रीम स्वीकार करते हैं। यह विवादों के बारे में गड़बड़ करने से बचाएगा, आप बस पुनः दावा कर सकते हैं - अपस्ट्रीम पैच को छोड़ दें। वैसे भी, एक रिबेस इस तरह होगा:
git rebase master features
o [features]
|
o
| o [remotes/origin/features]
[master] o |
| o
o/
|/
o
|
o
और फिर आप git push --force
कि करना होगा। आप देख सकते हैं कि आपको इसे मजबूर करने की आवश्यकता क्यों है, इतिहास में [रिमोट/मूल/विशेषताएं] से नए वर्तमान पोस्ट-रीबेस [सुविधाओं] पर इतिहास का एक बड़ा पुराना विवाद है।
यह सब काम करता है, लेकिन यह बहुत प्रयास है। यदि आप नियमित योगदानकर्ता बनने जा रहे हैं, तो सबसे अच्छा शर्त कुछ समय के लिए इस तरह काम करना होगा, कुछ पैच अपस्ट्रीम भेजें और देखें कि क्या आप सबवर्जन तक पहुंच प्राप्त कर सकते हैं। यह विफल हो रहा है, शायद गिटहब में अपने परिवर्तनों को धक्का न दें। उन्हें स्थानीय रखें और कोशिश करें और उन्हें वैसे भी अपस्ट्रीम स्वीकार कर लें।
धन्यवाद। (यहां 'गिट' नोब।) त्वरित सवाल। मैंने यह एक बड़े एसवीएन रेपो के खिलाफ किया और यह ~ 141 मेगाबाइट तक आया। मैंने इसे गिटूब पर धक्का दिया और फिर इसे वापस बंद कर दिया, और यह 130 मेगाबाइट तक पहुंच गया। मैं दोनों पर 'गिट जीसी' भाग गया। अंतर के लिए क्या खाता हो सकता है? – mpontillo
... इसे समझ लिया। मुझे 'गिट पुश उत्पत्ति --mirror' की आवश्यकता थी। – mpontillo
एक आकर्षण की तरह काम किया, अब मुझे अपने साथ github का उपयोग करने के लिए मूल googlecode devs को बताने की आवश्यकता है: D – electblake