2009-09-04 23 views
10

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

एसवीएन क्लाइंट उपयोगिता में कार्यशील प्रतिलिपि में सिम्लिंक डीरफ्रेंसिंग से संबंधित कोई विकल्प नहीं दिखता है। मुझे मैनुअल (http://svnbook.red-bean.com/en/1.5/index.html) में कोई संदर्भ नहीं मिला, या तो।

(यही कारण है कि पोस्टर के बजाय कठिन लिंक का उपयोग कर समाप्त हो गया:

मैं SVN उपयोगकर्ताओं की सूची, जो एक ही प्रश्न पूछा लेकिन एक जवाब है, यहाँ कभी नहीं प्राप्त डाक पर एक पोस्टर पाया symlinks। यह तकनीक मेरे मामले में एक विकल्प नहीं है, क्योंकि असली अंतर्निहित फाइलें एक अलग फाइल सिस्टम पर रहते हैं।)

मैं फेडोरा 11. पर सबवर्सन v1.6.1 का उपयोग कर रहा हूं।

इसके लायक होने के लिए, मुझे पता है कि वैकल्पिक उपकरण/तकनीकें हैं जो इस व्यवहार का अनुमान लगाने में मदद कर सकती हैं, लेकिन मुझे विभिन्न कारणों से त्यागना है। मैंने पहले से ही [और धूल-बिन] इन संभावनाओं पर विचार किया है: - एक "यूनियन" माउंट, एसवीएन वर्किंग-कॉपी निर्देशिका के साथ यूनियन में "शीर्ष" परत के रूप में वास्तविक फ़ाइलों वाली सभी निर्देशिकाओं को विलय कर रहा है; - असली फ़ाइलों को एक ही फाइल सिस्टम में एसवीएन कामकाजी प्रतिलिपि के रूप में कॉपी/स्थानांतरित करना, और सिम्लिंक की बजाय हार्डलिंक का उपयोग करना; - गैर-एसवीएन संस्करण नियंत्रण प्रणाली। ये सभी साफ विचार थे, और मुझे यकीन है कि वे अन्य समस्याओं के लिए अच्छे समाधान हैं, लेकिन वे इस पर्यावरण और स्थिति की बाधाओं को देखते हुए काम नहीं करेंगे।

+0

मुझे नहीं लगता कि यह संभव है (और मुझे नहीं लगता कि कोई भी वीसीएस ऐसा कर सकता है, यह या तो सिम्लिंक का पालन करता है लेकिन उन्हें ट्रैक नहीं कर सकता है, या यह उन्हें ट्रैक करता है और इसका पालन नहीं करता है)। – tonfa

+0

यह उस तरह से दिखना शुरू कर रहा है। जो बेवकूफ लगता है, यह देखते हुए कि सबसे अधिक उपयोगिताएं जो पथ संरचनाओं (सीपी, एमवी, एलएन, आरएम, आरएसआईएनसीसी) में हेरफेर करती हैं, में सभी के पास विकल्प हैं कि सिम्लिंक को संदर्भित किया जाना चाहिए, जिसका शाब्दिक व्यवहार नहीं किया जाना चाहिए। मेरा मतलब है, क्या यह सिर्फ मुझे है, या 'dereference' विकल्प की अनुपस्थिति उपकरण की कार्यक्षमता को कम करती है? (अगर मैं अकेला हूं, तो शायद मैं एसवीएन परियोजना के लिए एक फीचर अनुरोध जमा करने से परेशान नहीं होगा।) –

+0

3 साल बहुत देर हो चुकी है, लेकिन आप अकेले नहीं हैं। मुझे यह भी चाहिए। –

उत्तर

1

आपके पास बहुत सी बाधाएं हैं लेकिन एक चीज है जो हमेशा काम करती है: स्रोत को हैक करें।

आप आसानी से लिनक्स के लिए अपना स्वयं का svn बना सकते हैं, हालांकि यह मोड "आसान" हो सकता है या नहीं। वैसे भी, यदि आपके पास कोई प्रबंधित प्रतीकात्मक लिंक नहीं है, तो आप एक क्रूड हैक बना सकते हैं और केवल svn हमेशा उनका अनुसरण कर सकते हैं, जैसे कि वे कठिन लिंक हैं।

यदि आपके भंडार में संस्करणित लिंक हैं, और आपको इसके उस हिस्से को देखना होगा, तो आपको एक ऐसी परिष्कृत हैक की आवश्यकता होगी जो प्रति फ़ाइल या प्रति पदानुक्रम या कुछ सुविधा को नियंत्रित करने वाली संपत्ति का उपयोग करे।

एक और विकल्प हो सकता है: संस्करणित लिंक 1.1.0 में दिखाई दिए, यदि उससे पहले का व्यवहार प्रतीकात्मक लिंक का पालन करना था तो शायद आप पुराने क्लाइंट को चला सकते हैं।

+0

तो, आप मेरे वास्तविक प्रश्न का उत्तर कह रहे हैं (क्या एसवीएन क्लाइंट इसे कर सकता है) "नहीं" है। सही? –

+1

ठीक है, मैं कह रहा हूं "नहीं, कम से कम, 1.1.0 के बाद से नहीं और शायद इससे पहले नहीं,"। मुझे लगता है कि आपने अन्य फाइल सिस्टम पेड़ जोड़ने और फिर स्थानीय विचलित सिम्लिंक को रखने पर विचार किया है। यह पूरी कामकाजी प्रति को सिंक करने के लिए एक से अधिक प्रतिबद्धताओं या अद्यतन की आवश्यकता के अलावा अच्छी तरह से काम करना प्रतीत होता है। (लेकिन स्थानीय लिंक के बिना अन्य कामकाजी प्रतियों पर नहीं।) – DigitalRoss

0

आइडिया: एलडी_PRELOAD का उपयोग करके एक साझा लाइब्रेरी इंजेक्ट करें जो स्टेट/ओपन/अनलिंक इत्यादि को इंटरसेप्ट करता है ताकि svn symlinks नहीं देख सके। यह आपको svn स्रोत को संशोधित करने से बचाएगा।

0

आप प्रतीकात्मक लिंक के बजाय भौतिक लिंक भी उपयोग कर सकते हैं।

0

जहां तक ​​मुझे पता है, मौजूदा उपवर्तन संस्करण (1.6.x) के साथ ऐसा करने का कोई तरीका नहीं है। यदि यह एक ही फाइल सिस्टम पर फ़ाइलों (निर्देशिका नहीं) के लिए किया गया था तो आप हार्ड लिंक का उपयोग कर सकते थे (-sln कमांड में स्विच करें)।

0

मुझे एक समान चुनौती का सामना करना पड़ा। मेरी होम निर्देशिका में विभिन्न उप-निर्देशिकाओं के बारे में बिखरे हुए ~/scripts में कई स्क्रिप्ट शामिल हैं। हालांकि, मैं सहकर्मियों को लाभ पहुंचाने के लिए एसवीएन में एक क्लीनर लेआउट चाहता था जो कोड उदाहरणों की तलाश में चीजों को समझें।

मैं prod और test नीचे उप-निर्देशिका, तो मुश्किल से जुड़े सभी स्क्रिप्ट कहीं और बिखरे हुए के साथ एक ~/scripts/svn/signal15/code/ निर्देशिका बनाया।

निम्न आदेश तब मुझे आवश्यक निर्देशिका/फ़ाइल लेआउट आयात किया गया;

cd ~/scripts ; svn import svn http://svn_server/repos/code

रेपो अब "prod" और "परीक्षण" उप-निर्देशिका के साथ http://svn_server/repos/code/signal15/ को दर्शाता है।

अब मेरे पास कस्टम लेआउट हैं; ए) मेरा घर निर्देशिका का लेआउट अपरिवर्तित रहता है (sans ~/scripts/svn उप-निर्देशिका) बी) एसवीएन भंडार में मेरी संगठित स्क्रिप्ट के साथ "सिग्नल 15" शाखा है। पीएस: एक खोल समारोह के साथ, मैं भी आवश्यकतानुसार चेक-इन और चेक-आउट कर सकता हूं।