2012-08-09 12 views
8

मैं गिट svn का उपयोग कर रहा हूं और आज मैं कुछ परेशानी में भाग गया।मैं इस तरह गिट-एसवीएन और एसवीएन सीआरएलएफ समस्याओं से कैसे बचूं?

मैंने git svn clone किया और थोड़ी देर के लिए मेरी परियोजना पर काम किया। कुछ दिनों के बाद, मैंने अपना काम svn रिमोट (git svn dcommit) पर धक्का दिया है। फिर मैंने TortoiseSVN के साथ प्रोजेक्ट को चेकआउट करने का प्रयास किया है और देखें कि सब ठीक है या नहीं। दुर्भाग्यवश, सबकुछ यूनिक्स लाइन के अंत में परिवर्तित हो गया था, और वीसी 6 परियोजना को खोलने में असफल रहा।

तो, मेरी गिट काम करने वाली प्रतिलिपि सीआरएलएफ थी, लेकिन मेरी एसवीएन काम करने वाली प्रतिलिपि एलएफ थी। मुझे लगता है कि गिट ने इसे git commit या git svn dcommit के दौरान परिवर्तित कर दिया है।

क्या मुझे यह मानने का अधिकार है कि अगर मैं core.autocrlf = false को अपने गिट कामकाजी प्रतिलिपि के लिए सेट करता हूं तो मैं इस समस्या से बच सकता हूं? क्या यह बल अकेले न्यूलाइन छोड़ने के लिए गिट करेगा? क्या मेरे कुछ सहकर्मियों के लिए समस्या पैदा किए बिना गिट svn को उपयोग करने में आसान बनाने के लिए कुछ और करने की ज़रूरत है?

(यह भी है कि मैं एक ही मशीन पर Git SVN का इस्तेमाल किया है से पहले, सेटिंग्स को छुए बिना, और यह इस तरह पहली बार कुछ हुआ था उल्लेख करने के लिए दिलचस्प हो सकता है।)

उत्तर

0

सबवर्सन की संभावना है व्यक्तिगत फ़ाइलों के लिए ईओएल रूपांतरण सेटिंग्स। और वास्तव में गिट में भी .gitattributes फ़ाइलों ('टेक्स्ट' और 'eol' विशेषताओं) के रूप में है। सामान्य मामले के लिए core.autocrlf पर्याप्त नहीं है।

यदि आप इसे गलत पर सेट करते हैं, तो svn: eol-style = देशी के साथ सभी फ़ाइलों में git-svn कार्यशील प्रतिलिपि में समाप्त होने वाली एलएफ लाइन होगी, जो विंडोज़ के लिए अपेक्षित नहीं है।

यदि आप इसे सत्य पर सेट करते हैं, तो सभी लाइन समाप्ति एलएफ में परिवर्तित हो जाएंगी, और एलएफ (हमेशा) के रूप में एसवीएन को भेजी जाएगी।

असल svn:eol-style=unset '-टेक्स्ट' Git विशेषता (है कि कोई रूपांतरण का मतलब है), svn:eol-style=LF के अनुरूप होना चाहिए --- 'EOL = वामो' विशेषता और svn:eol-style=CRLF को --- 'EOL = CRLF' विशेषता के लिए; svn:eol-style=native सिस्टम निर्भर है, इसलिए एक अपरिवर्तित ईओएल सेटिंग द्वारा नियंत्रित किया जा सकता है, इसलिए संबंधित गिट विशेषता '! Eol' है (जिसका मतलब है कि eg सेटिंग को 0gसे .git/config) प्राप्त करें।

गिट-एसवीएन के बजाय, आप किसी भी समाधान का उपयोग कर सकते हैं जो svn: eol-style को अलग-अलग फ़ाइलों के लिए संबंधित .gitattirbutes मानों और इसके विपरीत स्वचालित रूप से परिवर्तित करेगा। एक समाधान सर्वर साइड है: यदि आप अपने SVN भंडार में SubGit स्थापित करने और सिर्फ शुद्ध Git इंटरफ़ेस SubGit पैदा करेगा का उपयोग: फिर

$ subgit install path/to/svn/repository 
# Git interface with correct .gtattributes repository will appear at path/to/svn/repository/.git 
# you should setup an access to it 

ग्राहक आप इसे क्लोन पर और 'CRLF' के लिए core.eol सेट विंडोज़ और अन्य ओएस के लिए 'एलएफ' के लिए (डिफ़ॉल्ट मान 'एलएफ' है)।

$ git clone <URL> working_tree 
$ cd working_tree 
$ git config core.eol crlf #for Windows only 

और उसके बाद गिट एसवीएन के समान व्यवहार करेगा।

वैकल्पिक रूप से ग्राहक पक्ष पर आप SmartGit का उपयोग कर सकते हैं: आप इसके साथ एसवीएन रिपोजिटरी क्लोन कर सकते हैं (मौजूदा गिट-एसवीएन रिपोजिटरी नहीं खोलें) --- और फिर यह svn: eol-style को .gitattributes में परिवर्तित कर देगा। इस मामले के लिए कोई अतिरिक्त कोर.ईओएल सेटिंग की आवश्यकता नहीं है, स्मार्टगिट इसकी परवाह करेगा।

+4

मैं इस जवाब से थोड़ा उलझन में हूं..यह सब बहुत उपयोगी जानकारी है, लेकिन मुझे लगता है कि आप इस सवाल को गलत समझ सकते हैं।मैं एसवीएन पर कुछ भी छू नहीं सकता, और मैं लोगों को svn: eol-style का उपयोग नहीं कर सकता, विचार यह है कि कोई भी शोर नहीं जानता कि मैं गिट का उपयोग कर रहा हूं। तो जो भी सेटिंग मुझे बदलने की जरूरत है वह गिट साइड पर होना चाहिए। क्या इससे इस मुद्दे को स्पष्ट करने में मदद मिलती है? वैसे, उस समय गिट svn के साथ क्लोजिटरी मैं खाली था, पहली सामग्री पहले dcommit के बाद गिट से आया था। –

संबंधित मुद्दे