2012-11-08 24 views
7

शीर्षक के रूप में, क्या गिट-एसवीएन के साथ एक पूर्ण क्लोन से एक svn repo को पुनर्निर्माण करने का कोई तरीका है (जिसमें प्रत्येक एकल प्रतिबद्धता आर 1 से शुरू होती है)?(पूर्ण) गिट-एसवीएन क्लोन से svn भंडार को फिर से बनाने के लिए संभव है?

संपादित करें:

मैं शायद जोड़ने चाहिए कि मैं एक व्यावहारिक अर्थ है यह करने के लिए देख रहा हूँ (निकट परिपूर्ण प्रति जब तक ठीक है के रूप में यह सिर्फ मूल SVN भंडार के रूप में प्रयोग करने योग्य रहता है)

उत्तर

8

हां, अपने जीआईटी-एसवीएन रिपोजिटरी के करीब एक एसवीएन रिपोजिटरी बनाना संभव है (यहां तक ​​कि एसवीएन को बहाल करना: गिट मर्ज कमेट्स और एसवीएन से मर्जिन्फो: .gitignore से अनदेखा करें)। चरण करने की है कि:

1.Prepare शाखाओं और टैग:

बनाएं refs/सिर/* हर refs/रिमोट/* (वर्तमान refs/सिर/* पदों खो जाएगा) के लिए:

$ git branch -a | awk '/remotes\/([^\/])+$/{ref=substr($1, 9); system("git update-ref refs/heads/" ref " refs/remotes/" ref)}' 

या आप सेट कर सकते हैं refs/सिर/* सभी दिलचस्प शाखाओं के लिए मैन्युअल रूप से

ध्यान दें कि refs/सिर/मास्टर SVN ट्रंक करने के लिए मैप किया गया है, लेकिन स्क्रिप्ट ऊपर refs/सिर/ट्रंक refs/रिमोट के लिए सेट हो जाएगा/सूँ ढ। तो यह चल रहा है एक के बाद एक refs/सिर/स्वामी के पास refs/रिमोट/ट्रंक की स्थापना की और refs/सिर/ट्रंक को हटा देना चाहिए:

$ git update-ref refs/heads/master refs/remotes/trunk 
$ git branch --delete refs/heads/trunk 

टैग के बारे में एक ही: सेट refs/टैग/* करने के लिए refs/रिमोट/टैग/* पदों:

$ git branch -a | awk '/remotes\/tags\/([^\/])+$/{ref=substr($1, 14); system("git update-ref refs/tags/" ref " refs/remotes/tags/" ref)}' 

चेक कि सभी refs/रिमोट/* और refs/रिमोट/टैग/* refs/सिर/* और refs/टैग में बदल रही हैं/* क्योंकि केवल इन संदर्भों को परिवर्तित किया जाएगा।

2.Create एक खाली SVN भंडार

$ svnadmin path/for/svn/repository 

3.Create एक नंगे Git refs/सिर/* और refs/टैग युक्त भंडार/* चरण 1 में तैयार:

$ git clone --bare path/to/git-svn/repository path/for/svn/repository/.git 

4 इस link का उपयोग करके सबगिट डाउनलोड करें और इंस्टॉल करें (इंटरमीडिएट बिल्ड जो "गिट-एसवीएन-आईडी:" को हटाता है, गिट से हस्ताक्षर कनवर्ट करते समय संदेश करता है)। आम तौर पर, सबगिट मुफ्त नहीं है लेकिन एक शॉट रूपांतरण (आपके मामले) के लिए इसे मुफ्त में उपयोग किया जा सकता है। SubGit साथ भंडार कन्वर्ट

$ subgit install path/for/svn/repository 

5.After SubGit स्थापना Git और SVN खजाने सिंक में रखा जाएगा (यह पथ पर Git भंडार// SVN/भंडार/.git के लिए खोजने के लिए उम्मीद है)। वैकल्पिक रूप से द्वि-दिशात्मक तुल्यकालन को तोड़ने के लिए, चलाने

$ subgit uninstall path/for/svn/repository 
+0

अद्भुत, (यदि आप इसे किसी भी समय सक्षम कर सकते हैं) एक बार मैं समय इस सत्यापित करने के लिए मैं स्वीकार करेंगे – prusswan

0

में सिद्धांत, यह संभव है जो मूल सबवर्सन रिपोजिटरी के बहुत करीब एक रिपोजिटरी को फिर से बनाने के लिए है। हालांकि, सबवर्जन रेपॉजिटरी डेटा (जैसे गुण और मर्जिन्फो) के कुछ पहलू हैं जिन्हें git-svn द्वारा क्लोन नहीं किया गया है। इसलिए आप मूल रूप से सटीक मूल की प्रतिलिपि बनाने में सक्षम नहीं होंगे।