2011-02-15 14 views
9

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

अब, किसी ने 'रिलीज' से एक फीचर शाखा बनाई है, जिसे मैं 'फीचर' कहने जा रहा हूं, कि मैं अपनी स्थानीय शाखा में उतरना चाहता हूं और साथ ही साथ प्रतिबद्ध हूं। निश्चित रूप से, मैं सिर्फ क्लोनिंग के साथ दूर हो सकता हूं कि स्थानीय रूप से दूसरी निर्देशिका/गिट रिपॉजिटरी में शाखा बंद हो जाती है, लेकिन मैं वास्तव में क्या करना चाहूंगा, मेरे स्थानीय गिट भंडार के भीतर स्थानीय शाखा में 'फीचर' प्रतिबिंबित है और साथ ही विलय करना जितना संभव हो उतना सीधा। मैंने देखा है कि अन्य stackoverflow.com पोस्ट दिखाते हैं कि यह कैसे काम करता है कि आपने git svn init--stdlayout के साथ उपयोग किया है, लेकिन मैंने ऊपर दिए गए कारणों के लिए मेरे मामले में ऐसा नहीं किया।

यहाँ मेरी .git/config है

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
[svn-remote "svn"] 
    url = https://our.svn.server/svn/root/branches/release 
    fetch = :refs/remotes/git-svn 

मैं यह सोचते कर रहा हूँ क्या मैं अपने [svn-remote] खंड में जरूरत है एक branches = $something है, लेकिन मैं नहीं जानता कि क्या है कि $ कुछ इस मामले में है और न ही किस जादू गिट चेकआउट और अन्य आदेश जो मुझे उस परिवर्तन को करने के बाद चाहिए .git/config।

कोई सुझाव?


संपादित करें - निम्न काम करता है:

तो मैं खरोंच से शुरू किया और निम्नलिखित क्लोन आदेश किया था:

git svn clone https://my.svn.server/svn/root -T branches/branch_I_want_as_master -b branches

कौन सा, के बारे में 16 घंटे के बाद, अंत में सब कुछ खींच लिया नीचे यह आवश्यक है। परिणामी .git/config इस तरह दिखता है:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
[svn-remote "svn"] 
    url = https://my.svn.server/svn/root 
    fetch = branches/branch_I_want_as_master:refs/remotes/trunk 
    branches = branches/*:refs/remotes/* 

तो मैं इस काम करता है - मैं कर सकते हैं git checkout -b name-of-a-branch name-of-a-branch और यह मेरे अपने स्थानीय Git रेपो में दूरदराज के शाखा देता है। पिछले जवाब मुझे आवश्यक सटीक उत्तरों नहीं थे, लेकिन मैं मददगार था क्योंकि वे मददगार थे।

इस बिंदु पर, मैं जवाब स्वीकार करूंगा जो बताता है कि यह क्यों काम करता है और शायद एक उपयोगी लिंक जो चीजों को ठीक से कैसे करता है .git/config।

उत्तर

2

क्या आपने अपने svn-remote अनुभाग में केवल branches=.. जोड़ने का प्रयास किया है?(url अंक सीधे release शाखा पर मानते हैं)। आपको रिलीज शाखा को ट्रैक करने वाले अतिरिक्त release हेड मिलेगा, लेकिन फिर आपको अन्य सभी शाखाएं भी ट्रैक की जाएंगी ताकि आप उन्हें देख सकें। बोनस git svn branch के रूप में (शायद) नई शाखाएं बनाने के लिए भी काम करेगा!

एक साइड नोट के रूप में, आप अपने svn repo को क्लोन करने के लिए अभी भी --stdlayout का उपयोग कर सकते थे, और फिर trunk के बजाय release ट्रैक करने के लिए मास्टर सेट अप कर सकते थे। ऐसा करना मुश्किल नहीं है।

+0

में ट्रैक करना चाहते हैं मैंने इस विधि को भी आजमाया है। संशोधित करने के बाद मैं वास्तव में क्या करूँगा। Git/config "शाखा = .." को शामिल करने के लिए? बस एक सादा 'गिट एसवीएन fetch' कुछ भी नीचे नहीं लाया था और 'गिट शाखा- $ $ $ रिमोटनाम' के परिणामस्वरूप मुझे रिमोट शाखा को ट्रैक नहीं किया गया। – whaley

5

आप भंडार config इस तरह लग रही किया जाना चाहिए:

[svn-remote "svn"] 
url = https://our.svn.server/svn/root 
fetch = branches/release:refs/remotes/git-svn 
branches = branches/release/feature1:refs/remotes/branches/* 
branches = branches/release/feature2:refs/remotes/branches/* 

url अपने भंडार की जड़ में इंगित करना चाहिए। fetch आपके ट्रंक को इंगित करता है (यह वास्तव में कोई शाखा हो सकता है), और branches प्रविष्टियों की संख्या हो सकती है, जो आपके सुविधा शाखाओं को इंगित करती है।

शायद आपको अपने गिट भंडार को स्कैच से बनाना चाहिए, लेकिन यह कॉन्फ़िगरेशन काम करता है।

+0

फीचर शाखा के अंत में/src का अतिरिक्त क्यों? – cbz

+0

मुझे खेद है, प्रतिलिपि के बाद संपादित करना भूल गया – gor

+1

मेरी कॉन्फ़िगरेशन को संपादित करने के बाद मेरी कॉन्फ़िगरेशन संपादित करने के बाद, मुझे 'गीट svn fetch' जारी करने के बाद निम्नलिखित मिलता है: ग्लोब में एक' * 'की आवश्यकता है:' शाखाएं/रिलीज/फीचर 1 '(मैं शाखा के वास्तविक नाम के लिए फीचर 1 को प्रतिस्थापित कर रहा हूं) – whaley