SVN

2014-07-20 11 views
10

में सिमलिंक का पालन करें मैं एक linux निर्देशिका है (और किसी भी विंडोज़ चेकआउट जरूरत नहीं है):SVN

/home/me/projects/project1 

इस परियोजना में, मैं SVN (1.8.8) एक सिमलिंक "link1" का पालन करने की जरूरत है:

/home/me/projects/project1/link1/<some_directories_and_files> 

लेकिन SVN मुझे ऐसा नहीं दूँगा, यह सिर्फ link1 नहीं बल्कि अपनी सामग्री जोड़ें। अगर मैं अपनी सामग्री जोड़ने की कोशिश, मैं कोई त्रुटि मिलती है:

svn add link1/* 
svn: E145001: Can't schedule an addition of '/home/me/projects/project1/link1/first_directory' below a not-directory node 

मैं हार्ड लिंक को link1 परिवर्तित करने की कोशिश की लेकिन मैं नहीं कर सकता है कि या तो:

ln /path/to/my/linked/directory link1 
ln: ‘/path/to/my/linked/directory’: hard link not allowed for directory 

किसी भी विचार? आप इस तरह की कॉन्फ़िगरेशन को कैसे संभालेंगे? मैं बस एक साधारण svn commit

उत्तर

7

से /home/me/projects/project1 से सब कुछ प्रतिबद्ध करने के लिए अगर मैं आपकी समस्या को समझने की जरूरत है, तुम हो:

project1/ 
project1/link1 -> ../../some/where/else 

यह तोड़फोड़ संग्रह का सिमलिंक प्रविष्टि है, लेकिन क्या कहते हैं आप एक सरल svn add link1 करते हैं आप पूरा करने की कोशिश कर रहे हैं पेड़ में कहीं और सामान प्राप्त कर रहा है।

यदि यह मामला है, तो आप गलत दिशा में लड़ रहे हैं, आपको वास्तविक फाइलों और निर्देशिकाओं को लिंक 1 के तहत बनाना चाहिए, और लक्ष्य स्थान को लिंक 1 निर्देशिका में सिमलिंक करना चाहिए। यह समस्या का एक आसान समाधान होगा।

एक और समाधान स्थान ../../some/where/else अपने स्वयं के दाईं ओर एक svn स्थान बनाना होगा, और उस स्थान के लिए लिंक 1 को बाह्य परिभाषा बनाना होगा। जब आप मुख्य निर्देशिका में प्रतिबद्ध होते हैं, तो बाहरी समय एक ही समय में किया जाएगा जो जानकारी संग्रहित करेगा; हालांकि यह सुनिश्चित करने के लिए कि अन्य स्थान सिंक में रखा गया था, आपको इसे संग्रहीत डेटा के समान संस्करण में अपडेट करना सुनिश्चित करना होगा।

मेरे मामले में, मेरा डेस्कटॉप पर, मैं एक सेटिंग निर्देशिका है:

$HOME/settings 

यह वह जगह है एक से .bashrc, .profile, .vimrc, .vim, आदि फ़ाइलें और फ़ोल्डर होते एक निर्देशिका की एक प्रति की जाँच svn रेपो। मेरी सभी प्रोफाइल फाइलें और निर्देशिकाएं इस फ़ोल्डर में सिम्लिंक थीं, इसलिए उदाहरण के लिए .profile ->settings/.profile, आदि। जब मैं परिवर्तन करता हूं, तो वे svn पेड़ में दिखाई देते हैं, जिसे मैं यह सुनिश्चित करने के लिए वापस कर सकता हूं कि मैं नहीं कर सकता जब मैं किसी अन्य सिस्टम पर जाता हूं तो मेरी कॉन्फ़िगरेशन सेटिंग्स खो दें।

तुम सच में SVN hardlinks रूप सिमलिंक पालन करने के लिए (क्योंकि यह एक बुरी बात ™ होगा आप निर्देशिका hardlinks नहीं कर सकते हैं) चाहते हैं, तो आप SVN ग्राहक स्रोत हैक करने इतना है कि यह किया होगा क्या तुम चाहते थे; लेकिन यह एक रखरखाव दुःस्वप्न होगा।

आप एक बाँध में सिमलिंक बनाने के साथ दूर हो सकता है माउंट लक्ष्य के निर्देश पर बिंदु, लेकिन वह यह खुद मुद्दों है है - आप यह पूरा करने के लिए रूट करने की आवश्यकता होगी, और उस में अजीब प्रविष्टियों छोड़ने समाप्त होता है अपने/proc/mounts इसे पूरा करने के लिए:

mount --bind /absolute/path/to/some/where/else project1/link1 
+0

शानदार उत्तर।मैं अभी के लिए सरल समाधान के साथ जाऊंगा। – Cyrille

+0

ओह, मुझे बस याद आया कि मैंने ऐसा क्यों किया (काम करने वाली प्रतिलिपि के अंदर बाहरी निर्देशिका में सिम्लिंक): मुझे इस निर्देशिका में फ़ाइलों को लिखने में सक्षम होने के लिए www-data उपयोगकर्ता की आवश्यकता थी। चूंकि मैं अपनी होम निर्देशिका में मेरी कामकाजी प्रतिलिपि तक सभी तरह की अनुमतियों को बदलना नहीं चाहता, मुझे लगता है कि मुझे आपके वैकल्पिक समाधानों को ब्राउज़ करना होगा ... – Cyrille

+0

लॉल, पीट, अनुमान लगाओ कि कौन सा सिम्लिंक मुझे यहां लाया? ;-) चलिए इसे जल्द ही ले जाएं! – gatopeich