2010-01-24 13 views
18

बहुत सारे svn रिपॉजिटरीज़ को svn: eol-style विशेषता रखने के लिए नई फ़ाइलों की आवश्यकता होती है। क्या यह सुनिश्चित करने का कोई तरीका है कि यह गिट-एसवीएन के साथ होता है?क्या मैं git-svn हैंडल svn: eol-style बना सकता हूं?

उत्तर

12

आप उपversण कॉन्फ़िगरेशन में ऑटोप्रोपर्टीज ([1] [2]) सेट करने का प्रयास कर सकते हैं। यह सुनिश्चित करेगा कि नई फाइलों के एड ऑपरेशन के दौरान svn: eol-style ठीक से सेट है।

AFAIU git-svn केवल आंतरिक कार्य में svn का उपयोग कर रहा है, और इसे उपवर्तन कॉन्फ़िगरेशन लोड करना चाहिए, और नई फ़ाइलों के लिए ऑटो-प्रोप सेट करना चाहिए।

ठीक है, मैंने इसका परीक्षण किया, यह काम करता है।

उदाहरण .subversion/config:

[miscellany] 
enable-auto-props = yes 

[auto-props] 
*.cpp = svn:keywords=Id Revision;svn:eol-style=native 
*.cs = svn:keywords=Id Revision;svn:eol-style=native 
+1

लेकिन सावधान रहें: मेरे अनुभव में, 'git-svn' प्रतिबद्धता पर' svn: eol-style = native' विशेषता सेट करेगा, जैसा कि आप वर्णन करते हैं, लेकिन * वास्तव में प्रतिबद्ध फ़ाइलों को एलएफ लाइन अंत में परिवर्तित नहीं करेंगे करने से पहले। इसलिए, किसी भी सीआरएलएफ लाइन के अंत में विवर्तन रेपो बरकरार रखने के लिए प्रतिबद्ध किया जाएगा, लेकिन विचलन सभी 'svn: eol-style = native' विशेषता फ़ाइलों को एलएफ लाइन समाप्ति के साथ संग्रहीत करने की अपेक्षा करता है। अंत परिणाम यह है कि पहली बार जब कोई उपखंड काम करने वाली प्रतिलिपि से ऐसी फ़ाइल संपादित करता है और करता है, तो अंतर में सीआरएलएफ को एलएफ रूपांतरण में शामिल किया जाएगा। – ntc2

7

@silk's answer above केवल एक आंशिक समाधान है। एक पूर्ण समाधान में प्रतिबद्धता पर सीआरएलएफ को एलएफ में परिवर्तित करने के लिए गिट को कॉन्फ़िगर करना भी शामिल है। तो, @silk क्या पता चलता है के अलावा, आप भी करना चाहिए:

git config --global core.autocrlf input 
git config --global core.safecrlf warn 

या:

git config --global core.safecrlf warn 
git config --global core.attributesfile ~/.gitattributes 
echo '* text=auto' >> ~/.gitattributes 

स्पष्टीकरण:

मेरे अनुभव में, git-svn प्रतिबद्ध पर svn:eol-style=native विशेषता सेट हो जाएगा, जैसा कि @silk वर्णन करता है, लेकिन वास्तव में प्रतिबद्ध फ़ाइलों को एलएफ लाइन समाप्ति में बदलने से पहले परिवर्तित करेगा। इसलिए, किसी भी सीआरएलएफ लाइन के अंत में सबवर्सन रेपो को बरकरार रखा जाएगा, लेकिन विचलन सभी svn:eol-style=native एलएफ लाइन अंतराल के साथ संग्रहीत फ़ाइलों को जिम्मेदार ठहराता है। अंत परिणाम यह है कि पहली बार जब कोई उपखंड काम करने वाली प्रतिलिपि से ऐसी फ़ाइल संपादित करता है और करता है, तो अंतर में सीआरएलएफ को एलएफ रूपांतरण में शामिल किया जाएगा।

तो, एक पूर्ण समाधान में काम करने से पहले फ़ाइलों को एलएफ लाइन के अंत में परिवर्तित करने के लिए गिट को मजबूर करना शामिल होना चाहिए। आप इसे core.autocrlf=input सेट करके कर सकते हैं, जिसका अर्थ है "सभी सीआरएलएफ को प्रतिबद्धता पर एलएफ में परिवर्तित करें, लेकिन चेकआउट पर रिवर्स रूपांतरण न करें", और core.safecrlf=warn या core.safecrlf=true, जो आपको फ़ाइल करने का प्रयास करते समय चेतावनी या रोक देगा सीआरएलएफ लाइन के अंत। autocrlf सेटिंग इन सीआरएलएफ को परिवर्तित करने के लिए सुनिश्चित करेगी, इसलिए safecrlf=true शायद अधिक है। git help config देखें।

वैकल्पिक रूप से, आप सभी फ़ाइलों पर text=auto सेट करके, रूपांतरण को मजबूर करने के लिए गिट विशेषताओं का उपयोग कर सकते हैं। इसे वैश्विक रूप से करने के लिए, आपको core.attributesfile में एक विशेषता फ़ाइल निर्दिष्ट करने की आवश्यकता है। git help attributes देखें।

+0

एक और बात: इन कॉन्फ़िगरेशन के साथ, प्रतिबद्ध फाइलें आपके गिट-एसवीएन वर्किंग कॉपी में किसी भी सीआरएलएफ लाइन एंडिंग को तब तक बनाए रखेगी जब तक आप उन्हें फिर से चेक न करें। यदि आप * निक्स पर हैं और एलएफ लाइन एंडिंग चाहते हैं, तो आप एक शाखा में स्विच करके पुनः चेकआउट को मजबूर कर सकते हैं जिसमें सीआरएलएफ फाइलें नहीं हैं और फिर फिर से स्विचिंग होती हैं। वैकल्पिक रूप से, आप पंक्ति समाप्ति को परिवर्तित करने के लिए 'dos2unix' का उपयोग कर सकते हैं, और फिर फ़ाइलों को 'git add' कर सकते हैं; कोई 'गिट प्रतिबद्ध' जरूरी नहीं है क्योंकि एलएफ लाइन के अंत की उम्मीद है। – ntc2

2

SubGit का उपयोग करने पर विचार करें।

पहले निर्माण से यह उचित सबवर्जन गुणों का समर्थन करता है .gitattributes/.gitignore रूपांतरण (और इसके विपरीत)। अन्य चीजों में से जिसमें svn: eol-style और 'eol', svn: mime-type और 'text', svn: ignore और .gitignore रूपांतरण शामिल हैं।

सबगिट एक सर्वर-साइड समाधान है - इसे इसे सबवर्जन रिपोजिटरी में स्थापित करना है। उसके बाद इस रिपॉजिटरी में परिवर्तन भेजने के लिए कोई सबवर्सन या गिट क्लाइंट का उपयोग कर सकते हैं। अधिक जानकारी प्राप्त करने के लिए कृपया SubGit documenration देखें।

$ subgit configure svn_repos 
  • के रूप में Git भंडार स्थान को निर्दिष्ट करने के लिए आवश्यक svn_repos/conf/subgit.conf फ़ाइल को समायोजित करें, शाखाओं & टैग लेआउट:

    1. SubGit विन्यास फाइल उत्पन्न करें: सामान्य तौर पर यह इसका इस्तेमाल करना काफी आसान है , आदि

    2. समाप्त स्थापना:

      $ subgit install svn_repos 
      

    इस समय सबगिट आपके सबवर्जन रिपोजिटरी से गिट रिपोजिटरी में सभी संशोधनों को परिवर्तित करता है। फिर यह आने वाले संशोधनों से ट्रिगर होने के लिए अपने कस्टम हुक स्थापित करता है। इस तरह सबगिट लगातार प्रत्येक एसवीएन प्रतिबद्धता पर सबवर्जन संशोधन को परिवर्तित करता है और गिट प्रत्येक गिट पुश पर काम करता है।

    सबगिट एक वाणिज्यिक परियोजना है, लेकिन यह छोटी टीमों, ओपन-सोर्स और अकादमिक परियोजनाओं के लिए नि: शुल्क है। और मैं सबगिट डेवलपर्स में से एक हूं।

  • +0

    यह एक बिल्कुल उचित उत्तर है, लेकिन कृपया सबगिट प्रोजेक्ट के साथ अपने सहयोग का खुलासा करें, http://stackoverflow.com/help/behavior –

    +0

    @ डेवबाकर ने अभी अपना जवाब अपडेट किया है, सिर के लिए धन्यवाद। – vadishev

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