मैं एक नई वितरित परियोजना शुरू कर रहा हूं। क्या मुझे SVN या Git का उपयोग करना चाहिए, और क्यों?
मैं एक नई वितरित परियोजना शुरू कर रहा हूं। क्या मुझे SVN या Git का उपयोग करना चाहिए, और क्यों?
जवाबों:
एसवीएन एक रेपो और बहुत सारे ग्राहक हैं। Git एक ग्राहक के साथ बहुत से रेपो है, प्रत्येक उपयोगकर्ता के साथ। यह एक ऐसे बिंदु पर विकेंद्रीकृत है जहां लोग बाहरी सर्वर पर चीजों को धक्का दिए बिना स्थानीय रूप से अपने स्वयं के संपादन को ट्रैक कर सकते हैं।
एसवीएन को अधिक केंद्रीय होने के लिए डिज़ाइन किया गया है जहां जीआईटी प्रत्येक उपयोगकर्ता पर आधारित होता है जिसमें अपना स्वयं का गिट रेपो होता है और जो रिपोज पुश एक केंद्रीय एक में बदल जाते हैं। उस कारण से, Git व्यक्तियों को बेहतर स्थानीय संस्करण नियंत्रण देता है।
इस बीच आपके पास TortoiseGit , GitExtensions (और यदि आप अपने "केंद्रीय" gitub पर रिपॉजिटरी, अपने स्वयं के क्लाइंट - विंडोज के लिए GitHub ) को होस्ट करते हैं ।
यदि आप SVN से बाहर निकलना चाह रहे हैं, तो आप बाज़ार का मूल्यांकन थोड़ा कर सकते हैं । यह संस्करण नियंत्रण प्रणालियों की अगली पीढ़ी में से एक है जिसमें यह वितरित तत्व है। यह GOS की तरह POSIX पर निर्भर नहीं है इसलिए देशी विंडोज बिल्ड हैं और इसमें कुछ शक्तिशाली ओपन सोर्स ब्रांड हैं।
लेकिन आपको इन प्रकार की सुविधाओं की अभी तक आवश्यकता नहीं है। पर एक नज़र डालें सुविधाओं, फायदे और वितरित VCSes का नुकसान । यदि आपको SVN ऑफ़र से अधिक की आवश्यकता है, तो एक पर विचार करें। यदि आप नहीं करते हैं, तो आप SVN के (वर्तमान में) बेहतर डेस्कटॉप एकीकरण के साथ रहना चाह सकते हैं।
"विंडोज पर अच्छा नहीं होने" की इस अवधारणा को मैंने कभी नहीं समझा; मैं विशेष रूप से विंडोज के तहत विकसित करता हूं और मुझे कभी भी गिट के साथ कोई समस्या नहीं हुई है।
मैं निश्चित रूप से तोड़फोड़ पर गिट की सिफारिश करूंगा; बस इतना अधिक बहुमुखी और "ऑफ़लाइन विकास" को एक तरह से तोड़फोड़ की अनुमति देता है जो वास्तव में कभी नहीं हो सकता। इसकी लगभग हर प्लेटफ़ॉर्म पर कल्पनाशील उपलब्ध है और इससे अधिक सुविधाएँ हैं जो शायद आप कभी भी उपयोग करेंगे।
यहाँ एक उत्तर की एक प्रति है जिसे मैंने कुछ डुप्लिकेट प्रश्न से बनाया है जिसके बाद Git बनाम SVN (सितंबर 2009) के बारे में हटा दिया गया है ।
बेहतर? सामान्य लिंक WhyGitIsBetterThanX के अलावा , वे अलग हैं:
एक एक सेंट्रल वीसीएस है जो शाखाओं के लिए सस्ती कॉपी पर आधारित है और अन्य टैग्स (Git) एक वितरित VCS है जो संशोधनों के ग्राफ पर आधारित है। VCS की मुख्य अवधारणाएँ भी देखें ।
उस पहले हिस्से ने कुछ गलत सूचनाओं वाली टिप्पणियों को उत्पन्न किया, जिसमें कहा गया था कि दो कार्यक्रमों (एसवीएन और गिट) का मूल उद्देश्य एक ही है, लेकिन उन्हें काफी अलग तरीके से लागू किया गया है। SVN और Git के बीच मूलभूत अंतर
को स्पष्ट करने के लिए , मुझे rephrase दें:
एसवीएन एक संशोधन नियंत्रण का तीसरा कार्यान्वयन है : आरसीएस, फिर सीवीएस और अंत में एसवीएन संस्करणित डेटा की निर्देशिकाओं का प्रबंधन करते हैं। SVN VCS सुविधाएँ (लेबलिंग और विलय) प्रदान करता है, लेकिन इसका टैग सिर्फ एक निर्देशिका प्रतिलिपि है (एक शाखा की तरह, सिवाय इसके कि आप टैग निर्देशिका में कुछ भी छूने के लिए "माना नहीं जाता"), और इसका विलय अभी भी जटिल है, वर्तमान में मेटा पर आधारित है -डेटा को यह याद रखने के लिए जोड़ा गया कि क्या पहले ही विलय हो चुका है।
Git एक फ़ाइल सामग्री प्रबंधन (फ़ाइलों को मर्ज करने के लिए बनाया गया एक उपकरण) है, जो एक वास्तविक संस्करण नियंत्रण प्रणाली में विकसित होता है , जो DAG ( डायरेक्टेड एसाइक्लिक ग्राफ ) पर आधारित होता है, जहाँ शाखाएँ डेटा के इतिहास का हिस्सा होती हैं (और डेटा ही नहीं) ), और जहां टैग एक सच्चे मेटा-डेटा हैं।
यह कहने के लिए कि वे "मौलिक रूप से" अलग नहीं हैं क्योंकि आप एक ही चीज़ को प्राप्त कर सकते हैं, एक ही समस्या को हल कर सकते हैं, वह है ... इतने सारे स्तरों पर सादा झूठ।
अभी भी उस पुराने (हटाए गए) जवाब पर टिप्पणी जोर देकर कहते हैं:
VonC: आप कार्यान्वयन में मूलभूत अंतर को भ्रमित कर रहे हैं (अंतर बहुत मौलिक हैं, हम दोनों स्पष्ट रूप से इस पर सहमत हैं) उद्देश्य में अंतर के साथ।
वे दोनों एक ही उद्देश्य के लिए उपयोग किए जाने वाले उपकरण हैं: यही कारण है कि पूर्व में एसवीएन का उपयोग करने वाली कई टीमों ने इसे सफलतापूर्वक गिट के पक्ष में डंप करने में सक्षम किया है।
यदि वे एक ही समस्या को हल नहीं करते हैं, तो यह प्रतिस्थापन नहीं होगा।
, जिसके लिए मैंने उत्तर दिया:
"प्रतिस्थापन" ... दिलचस्प शब्द ( कंप्यूटर प्रोग्रामिंग में प्रयुक्त )।
बेशक, गेट शायद ही एसवीएन का एक उपप्रकार है।
आप दोनों के साथ समान तकनीकी सुविधाएँ (टैग, ब्रांच, मर्ज) प्राप्त कर सकते हैं, लेकिन Git आपके रास्ते में नहीं आती है और आपको टूल के बारे में सोचे बिना, फ़ाइलों की सामग्री पर ध्यान केंद्रित करने की अनुमति देती है।
आप निश्चित रूप से (हमेशा) एसआईएन को Git द्वारा प्रतिस्थापित नहीं कर सकते हैं "" उस प्रोग्राम के किसी भी वांछनीय गुण को बदलने के बिना (शुद्धता, कार्य प्रदर्शन, ...) "(जो उपर्युक्त प्रतिस्थापन योग्य परिभाषा का संदर्भ है ):
फिर, उनकी प्रकृति मौलिक रूप से अलग है (जो तब अलग कार्यान्वयन की ओर जाता है लेकिन यह बात नहीं है)।
एक निर्देशिका और फ़ाइलों के रूप में संशोधन नियंत्रण देखते हैं, दूसरे केवल फ़ाइल की सामग्री देखते हैं (इतना है कि खाली निर्देशिका Git में भी नहीं होगा!)।
सामान्य अंत-लक्ष्य एक ही हो सकता है, लेकिन आप उन्हें उसी तरह से उपयोग नहीं कर सकते हैं, और न ही आप समस्या के एक ही वर्ग (गुंजाइश या जटिलता में) को हल कर सकते हैं।
SVN के 2 प्रमुख लाभ जो शायद ही कभी उद्धृत किए जाते हैं:
बड़ी फ़ाइल का समर्थन। कोड के अलावा, मैं अपने होम डायरेक्टरी को प्रबंधित करने के लिए SVN का उपयोग करता हूं। एसवीएन एकमात्र वीसीएस (वितरित या नहीं) है जो मेरी ट्रू-क्रिप्ट फ़ाइलों पर चोक नहीं करता है (कृपया मुझे सही करें अगर कोई और वीसीएस है जो 500 एमबी + फ़ाइलों को प्रभावी ढंग से संभालता है)। ऐसा इसलिए है क्योंकि अलग-अलग तुलनाओं को प्रवाहित किया जाता है (यह एक बहुत ही आवश्यक बिंदु है)। Rsync अस्वीकार्य है क्योंकि यह 2-तरफ़ा नहीं है।
आंशिक भंडार (उपखंड) चेकआउट / चेकइन। Mercurial और bzr इसका समर्थन नहीं करते हैं, और git का समर्थन सीमित है। यह टीम के माहौल में खराब है, लेकिन अमूल्य है अगर मैं अपने होम डायर से दूसरे कंप्यूटर पर कुछ जांचना चाहता हूं।
बस मेरे अनुभव।
अधिक शोध करने के बाद, और इस लिंक की समीक्षा करें: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html
(नीचे कुछ अर्क):
यह सब पढ़ने के बाद, मुझे यकीन है कि Git जाने का रास्ता है (हालाँकि सीखने की थोड़ी सी मात्रा मौजूद है)। मैंने विंडोज प्लेटफॉर्म पर भी Git और SVN का इस्तेमाल किया है।
मुझे यह सुनकर अच्छा लगेगा कि ऊपर पढ़ने के बाद दूसरों को क्या कहना है?
मैं एक तोड़फोड़ भंडार स्थापित करूंगा। इसे इस तरह से करके, अलग-अलग डेवलपर्स चुन सकते हैं कि क्या सबवर्सन क्लाइंट या Git क्लाइंट (के साथ git-svn
) का उपयोग करना है या नहीं । उपयोग करने से git-svn
आपको पूर्ण Git समाधान के सभी लाभ नहीं मिलते हैं, लेकिन यह व्यक्तिगत डेवलपर्स को अपने स्वयं के वर्कफ़्लो पर बहुत अधिक नियंत्रण देता है।
मेरा मानना है कि यह एक अपेक्षाकृत कम समय होगा जब Git विंडोज पर काम करता है और साथ ही यह Unix और Mac OS X (जब से मैंने पूछा है) पर काम करता है।
विंडोज के लिए सबवर्सन में उत्कृष्ट उपकरण होते हैं, जैसे कि एक्सप्लोरर एकीकरण के लिए TortoiseSVN और Visual Studio एकीकरण के लिए AnkhSVN।
मजेदार बात यह है: मैं प्रोजेक्ट्स को तोड़फोड़ के प्रस्ताव में होस्ट करता हूं, लेकिन उन्हें Git Clone कमांड के जरिए एक्सेस करता हूं।
कृपया Google कोड प्रोजेक्ट पर विकास के साथ पढ़ें
यद्यपि Google कोड मूल रूप से तोड़फोड़ बोलता है, आप आसानी से विकास के दौरान Git का उपयोग कर सकते हैं। "Git svn" की खोज से यह पता चलता है कि यह प्रथा व्यापक है, और हम आपको इसके साथ प्रयोग करने के लिए प्रोत्साहित करते हैं।
Svn रिपोजिटरी पर Git का उपयोग करने से मुझे लाभ मिलता है:
backup/public
svn भंडार हैवास्तव में आपके प्रश्न का उत्तर नहीं दे रहा है, लेकिन यदि आप डिस्ट्रीब्यूटेड रिविजन कंट्रोल के लाभ चाहते हैं - तो ऐसा लगता है कि आप ऐसा करते हैं - और आप विंडोज का उपयोग कर रहे हैं मुझे लगता है कि आप मर्क्यूरियल का उपयोग करना बेहतर होगा, बजाय इसके कि मर्क्यूरियल का बेहतर समर्थन विंडोज़ के रूप में किया जाए। मर्क्यूरियल में मैक पोर्ट भी होता है।
यदि आपकी टीम पहले से ही cvs या svn जैसे संस्करण और स्रोत नियंत्रण सॉफ्टवेयर्स से परिचित है, तो, एक सरल और छोटी परियोजना के लिए (जैसे कि आप यह दावा करते हैं), मैं आपको SVN से चिपके रहने की सलाह दूंगा। मैं svn के साथ वास्तव में सहज हूं, लेकिन वर्तमान ई-कॉमर्स परियोजना के लिए मैं django पर काम कर रहा हूं, मैंने गिट पर काम करने का फैसला किया है (मैं svn-mode में git का उपयोग कर रहा हूं, अर्थात, एक केंद्रीकृत रेपो के साथ जिसे मैं धक्का देने और खींचने के लिए करता हूं कम से कम एक अन्य डेवलपर के साथ सहयोग करने के लिए)। अन्य डेवलपर एसवीएन के साथ सहज है, और जबकि अन्य के अनुभव भिन्न हो सकते हैं, हम दोनों को इस छोटे से प्रोजेक्ट के लिए एक बहुत बुरा समय आ गया है। (हम दोनों कट्टर लिनक्स उपयोगकर्ता हैं, अगर यह बिल्कुल भी मायने रखता है।)
सचमुच में, आपका माइलेज अलग अलग हो सकता है।
निश्चित रूप से svn
, चूंकि विंडोज़ दुनिया में सबसे अच्छा-एक द्वितीय श्रेणी का नागरिक है git
( अधिक विवरण के लिए http://en.wikipedia.org/wiki/Git_(software)#Portability देखें)।
अद्यतन: टूटी हुई लिंक के लिए क्षमा करें, लेकिन मैंने URI के साथ काम करने के लिए SO पाने की कोशिश की है जिसमें कोष्ठक शामिल हैं। [लिंक अब ठीक किया गया। -ईडी]
मुख्य बिंदु यह है कि Git एक वितरित VCS और सबवर्सन एक केंद्रीकृत है। वितरित वीसीएस को समझना थोड़ा मुश्किल है, लेकिन इसके कई फायदे हैं। यदि आपको इस लाभ की आवश्यकता नहीं है, तो तोड़फोड़ बेहतर विकल्प हो सकता है।
एक और सवाल टूल-सपोर्ट का है। आपके द्वारा उपयोग किए जाने वाले उपकरणों के लिए कौन सा VCS बेहतर समर्थित है?
संपादित करें: तीन साल पहले मैंने इस तरह से उत्तर दिया:
और Git इस समय केवल Cygwin या MSYS के माध्यम से विंडोज पर काम करता है । तोड़फोड़ ने शुरुआत से ही विंडोज का समर्थन किया। चूंकि विंडोज़ के लिए गिट-सॉल्यूशंस आपके लिए काम कर सकते हैं, इसलिए समस्याएँ हो सकती हैं, क्योंकि लिनक्स के साथ काम करने वाले अधिकांश डेवलपर्स शुरुआत से ही दिमाग में पोर्टेबिलिटी नहीं रखते थे। फिलहाल मैं विंडोज के तहत विकास के लिए तोड़फोड़ को प्राथमिकता दूंगा। कुछ वर्षों में यह अप्रासंगिक हो सकता है।
अब दुनिया थोड़ी बदल गई है। Git का अब विंडोज़ पर अच्छा कार्यान्वयन है। हालाँकि मैंने खिड़कियों पर पूरी तरह से परीक्षण नहीं किया (क्योंकि अब मैं इस प्रणाली का उपयोग नहीं करता), मुझे पूरा विश्वास है, कि सभी प्रमुख VCS (SVN, Git, Mercurial, Bazaar) में अभी उचित Windows-कार्यान्वयन है। एसवीएन के लिए यह लाभ चला गया है। अन्य बिंदु (केंद्रीकृत बनाम वितरित और उपकरण समर्थन के लिए जांच) मान्य रहते हैं।
मैं SVN के लिए विकल्प चुनूंगा क्योंकि यह अधिक व्यापक रूप से फैला हुआ है और बेहतर ज्ञात है।
मुझे लगता है, Git लिनक्स उपयोगकर्ता के लिए बेहतर होगा।
Git मूल रूप से विंडोज के तहत समर्थित नहीं है, बस अभी तक। यह Posix सिस्टम के लिए अनुकूलित है। हालाँकि Cygwin या MinGW चलाने से आप Git को सफल बना सकते हैं।
आजकल मैं एसवीएन पर गिट पसंद करता हूं, लेकिन सीवीएस, एसवीएन भूमि से आने पर दहलीज पर पहुंचने में थोड़ा समय लगता है।
मैं शायद गिट को चुनूंगा क्योंकि मुझे लगता है कि यह एसवीएन की तुलना में बहुत अधिक शक्तिशाली है। वहाँ सस्ते कोड होस्टिंग सेवाएं उपलब्ध हैं जो मेरे लिए बहुत अच्छा काम करती हैं - आपको बैकअप या कोई रखरखाव कार्य करने की आवश्यकता नहीं है - GitHub सबसे स्पष्ट उम्मीदवार है।
उस ने कहा, मुझे विजुअल स्टूडियो के एकीकरण और विभिन्न SCM प्रणालियों के बारे में कुछ भी पता नहीं है। मैं विशेष रूप से बेहतर SVN के साथ एकीकरण की कल्पना करता हूं।
मैंने लंबे समय से एसवीएन का उपयोग किया है, लेकिन जब भी मैंने गिट का इस्तेमाल किया, तो मुझे लगा कि जीआईटी बहुत शक्तिशाली है, हल्का है, और यद्यपि इसमें सीखने की थोड़ी सी मात्रा शामिल है, लेकिन एसवीएन से बेहतर है।
मैंने जो नोट किया है वह यह है कि जब तक यह निर्यात नहीं किया जाता है, तब तक प्रत्येक एसवीएन परियोजना, बड़े आकार की परियोजना बन जाती है। जहां के रूप में, GIT प्रोजेक्ट (Git डेटा के साथ) आकार में बहुत हल्का है।
SVN में, मैंने डेवलपर्स से नौसिखिए से लेकर विशेषज्ञों तक की डील की है, और novices और मध्यवर्ती फाइल संघर्ष का परिचय देते हैं, यदि वे इसे फिर से उपयोग करने के लिए किसी अन्य SVN प्रोजेक्ट से एक फ़ोल्डर की प्रतिलिपि बनाते हैं। जबकि, मुझे लगता है कि Git में, आप केवल फ़ोल्डर की प्रतिलिपि बनाते हैं और यह काम करता है, क्योंकि Git अपने सभी सबफ़ोल्डर्स में .गित फ़ोल्डर्स को प्रस्तुत नहीं करता है (जैसा कि SVN करता है)।
लंबे समय से एसवीएन के साथ काम करने के बाद, मैं आखिरकार अपने डेवलपर्स और मुझे गिट में स्थानांतरित करने के लिए सोच रहा हूं, क्योंकि काम को सहयोग करना और मर्ज करना आसान है, साथ ही साथ एक बड़ा फायदा यह है कि एक स्थानीय प्रतिलिपि के परिवर्तनों को अधिक से अधिक प्रतिबद्ध किया जा सकता है वांछित, और फिर एसवीएन (जहां हमें सर्वर पर रिपॉजिटरी में समय-समय पर बदलाव करना पड़ता है) के विपरीत, एक बार में सर्वर पर शाखा में धकेल दिया गया।
कोई भी जो मुझे यह तय करने में मदद कर सकता है कि क्या मुझे वास्तव में गिट के साथ जाना चाहिए?
.svn
को प्रत्येक उप-निर्देशिका में फ़ोल्डर की आवश्यकता नहीं होती है । ऐसा होने से पहले कॉपी करने की त्रुटि को "ठीक" करता है।
यह इस स्तर तक नीचे आता है:
क्या आपका विकास रैखिक होगा? यदि ऐसा है, तो आपको तोड़फोड़ के साथ रहना चाहिए।
यदि दूसरी तरफ, आपका विकास रैखिक नहीं होगा, जिसका अर्थ है कि आपको विभिन्न परिवर्तनों के लिए शाखा बनाने की आवश्यकता होगी, और फिर ऐसे परिवर्तनों को वापस मुख्य विकास लाइन में विलय करना होगा (जिसे मास्टर शाखा के रूप में जाना जाता है) तो Git करेगा। आपके लिए और अधिक।
क्या आपने बज़्र की कोशिश की है ?
यह बहुत अच्छा है, सामंजस्यपूर्ण (जो लोग उबंटू बनाते हैं) ने इसे बनाया क्योंकि उन्हें बाजार पर कुछ और पसंद नहीं था ...
क्या मुझे इस सवाल पर विस्तार करना चाहिए और पूछना चाहिए कि क्या Git MacOS पर अच्छा काम करता है?
टिप्पणी का जवाब: समाचार के लिए धन्यवाद, मैं इसे आज़माने के लिए उत्सुक हूं। मैं इसे अपने मैक पर घर पर स्थापित करूँगा।
इस बारे में YouTube पर एक दिलचस्प वीडियो है। लिनुस टोरवाल्ड्स से इसकी खुद: गोलज टेक टॉक: लिनस टोरवाल्ड्स ऑन गिट
एसवीएन विंडोज के तहत एक अच्छा विकल्प लगता है, जैसा कि अन्य लोगों द्वारा बताया गया है।
यदि आपका कोई विकासकर्ता GIT आज़माना चाहता है, तो वह हमेशा GIT-SVN का उपयोग कर सकता है जहाँ SVN रिपॉजिटरी को GIT रिपॉजिटरी में पुनः बनाया जाता है। फिर उसे जीआईटी के साथ स्थानीय रूप से काम करने में सक्षम होना चाहिए और फिर मुख्य रिपॉजिटरी में इसके परिवर्तनों को प्रकाशित करने के लिए एसवीएन का उपयोग करना चाहिए।
आपको DVCS के साथ जाना होगा, यह स्रोत प्रबंधन में एक क्वांटम छलांग की तरह है। व्यक्तिगत रूप से मैं मोनोटोन का उपयोग करता हूं और इसके विकास के समय का कोई अंत नहीं है। हम इसे विंडोज, लिनक्स और मैक के लिए उपयोग कर रहे हैं और यह बहुत स्थिर रहा है। मैं भी प्रत्येक प्लेटफ़ॉर्म पर प्रोजेक्ट के नाइट बिल्ड कर रहा हूँ।
DVCS को वितरित करते समय आमतौर पर इसका मतलब है कि आप लोगों के लिए परिवर्तनों को आगे बढ़ाने के लिए सिर्फ एक केंद्रीय सर्वर बनाएंगे।