GIT बनाम Perforce- दो VCS दर्ज करेंगे ... एक छोड़ देगा [बंद]


85

इसलिए मैं जीआईटी को काम पर बेचने की प्रक्रिया में हूं। पहली चीज जो मुझे चाहिए वह यह है कि सभी को यह समझाना है कि जीआईटी बेहतर है जो वे पहले से ही इस्तेमाल कर रहे हैं। वर्तमान में हम Perforce का उपयोग करते हैं। किसी और को भी इसी तरह की बिक्री के माध्यम से जाना? कोई अच्छा लिंक / सलाह?

बड़ी जीत में से एक यह है कि हम नेटवर्क से डिस्कनेक्ट किए गए इसके साथ काम कर सकते हैं। एक और जीत IMO जिस तरह से जोड़ता है / चेकआउट संभाला जाता है। अधिक अंक का स्वागत है! इसके अलावा हमारे पास कुल 10-20 देवता हैं।

जवाबों:


75

Perl 5 दुभाषिया स्रोत कोड वर्तमान में Perforce से git में परिवर्तित करने के माध्यम से चल रहा है। शायद सैम विलेन का git-p4rawआयातक हित है।

किसी भी स्थिति में, आप प्रत्येक केंद्रीकृत वीसीएस पर प्रमुख जीत में से एक होंगे और अधिकांश वितरित कच्चे, ब्लिस्टरिंग गति भी हैं । आप कल्पना भी नहीं कर सकते कि पूरे प्रोजेक्ट इतिहास को हाथ में लेने से यह कैसे मुक्त हो जाता है, जब तक कि आपने इसे अनुभव नहीं किया है, तब तक एक सेकंड के फ्रैक्चर के मात्र अंश हैं। यहां तक ​​कि पूरे प्रोजेक्ट इतिहास का एक कमिट लॉग उत्पन्न करना जिसमें प्रत्येक कमिट के लिए एक पूर्ण भिन्न शामिल है, एक सेकंड के अंशों में मापा जा सकता है। गित इतनी तेज है कि आपकी टोपी उड़ जाएगी। वीसीएस जिन्हें नेटवर्क पर राउंडट्रिप करना है, उनके पास प्रतिस्पर्धा का कोई मौका नहीं है, यहां तक ​​कि गीगाबिट ईथरनेट लिंक पर भी नहीं।

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

मैंने पाया है कि एक साथ, ये तथ्य मुझे स्वाभाविक रूप से कई और अधिक ध्यान केंद्रित करने का कारण बनाते हैं, जितना मैंने इस्तेमाल किया। यह बदले में न केवल आपके इतिहास को आम तौर पर अधिक उपयोगी बनाता है, बल्कि विशेष रूप से मूल्यवर्धित उपकरणों जैसे कि के लिए फायदेमंद है git bisect

मुझे यकीन है कि अभी और चीजें हैं जो मैं अभी नहीं सोच सकता। अपनी टीम को git पर बेचने के प्रस्ताव के साथ एक समस्या यह है कि कई लाभ परस्पर जुड़े हुए हैं और एक दूसरे से खेलते हैं, जैसा कि मैंने ऊपर संकेत दिया है, जैसे कि यह आसानी से git की सुविधाओं और लाभों की एक सूची को देखने के लिए कठिन है और वे कैसे आपके वर्कफ़्लो को बदलने जा रहे हैं, और कौन से बदलाव अलाउड सुधार करने जा रहे हैं। आपको इसे ध्यान में रखने की आवश्यकता है, और आपको इसे स्पष्ट रूप से इंगित करने की भी आवश्यकता है।


कथित तौर पर, p4sandbox p4 को कुछ ऑफ़लाइन क्षमताएं प्रदान करता है। बहरहाल मुझे अभी भी गिट पसंद है। :)
डोमिनिक मिशेल

13
Git 'ऑफ़लाइन क्षमताओं' प्रदान नहीं करता है, यह है ऑफ़लाइन। केवल आप तार पर डेटा भेजते हैं जब आप मूल को धक्का देते हैं या अन्य उप-रिपॉजिटरी से परिवर्तन खींचते हैं।
इवान प्लाइस

2
"गेट इतनी तेज है कि आपकी टोपी उड़ जाएगी" प्यार कि :) केवल यह बहुत ही सच नहीं है जब आप चेक-इन बाइनरी फ़ाइलों को शुरू करते हैं। बड़े repos git में परेशान हैं।
v.oddou

1
दुर्भाग्यवश यह सच है। जिस तरह से जीआईटी काम करता है वह फाइलों को पढ़ने और कुछ हद तक उन्हें अलग करने पर निर्भर करता है, इसलिए उन्हें मामूली आकार और अच्छी तरह से अलग करने की आवश्यकता होती है। तब यह बहुत तेज़ होगा (जैसे कि सैकड़ों आवागमन के लिए तत्काल पूर्ण-भिन्न इतिहास के उदाहरण में)। विशाल बूँद के साथ? ऐसा नहीं है ...
अरस्तू पगलतज़िस 18

84

मैं काम पर Perforce का उपयोग करता हूं। मैं Git का उपयोग इसलिए भी करता हूं क्योंकि जब मैं कोड पर काम कर रहा होता हूं, तब भी कुछ प्रकार के संस्करण नियंत्रण पसंद करता हूं और सर्वर से कनेक्ट नहीं हो पाता। नहीं, ऑफ़लाइन कार्य को समेटना केवल समान नहीं है। यहाँ है जहाँ मैं एक महान लाभ मिल गया है:

  1. शाखाओं में बंटी गति - गिट में कुछ सेकंड लगते हैं।
  2. संघर्ष - P4Merge के ऑटो रिज़ॉल्यूशन ने एक बार एक हफ्ते के काम को नष्ट कर दिया। तब से मैं विलय के समय हाथ से हल करूंगा। जब Git मुझे एक संघर्ष के बारे में संकेत देता है, तो यह वास्तव में एक संघर्ष है। बाकी समय, गिट सामान को सही ढंग से हल करता है और मैं समय के ढेर को बचाता हूं।
  3. मर्ज का ध्यान रखना - यदि आपकी एक शाखा है जो लगातार दो अन्य शाखाओं से मर्ज प्राप्त कर रही है, तो आप जानते हैं कि यह क्या सिरदर्द हो सकता है। गिट के साथ, सिरदर्द को कम किया जाता है क्योंकि गिट में एक मर्ज का परिणाम वास्तव में एक नई प्रतिबद्धता है जो जानता है कि इसके पूर्वज कौन हैं।
  4. अनुमतियाँ - मैंने जितनी बार किसी फ़ाइल पर काम करने की कोशिश की है, उसका ट्रैक खो दिया है, लेकिन ऐसा इसलिए नहीं किया जा सका क्योंकि इसे Perforce में नहीं देखा गया था। यदि आपने XCode (या किसी भी संपादक के पास ठोस पेरफोर्स SCM प्लगइन) के साथ ऑफ़लाइन काम किया है, तो आप जानते हैं कि यह कैसे परेशान कर सकता है। मुझे उसके बारे में चिंता करने की जरूरत नहीं है। मैं अपने बदलाव करता हूं। Git मुझे रोकता नहीं है और उन्हें पृष्ठभूमि में ट्रैक करता है।
  5. मुख्य पेड़ को सुव्यवस्थित रखना - गिट के साथ, मैं अपने कमिट्स को सॉर्ट कर सकता हूं और कोड को साफ कर सकता हूं ताकि इतिहास अच्छा और साफ दिखाई दे। इस फ़ाइल में कोई भी "जाँच नहीं कर रहा है क्योंकि यह पिछले चेकइन का हिस्सा होना चाहिए" बकवास। मैं उस तरह से स्क्वैश करता हूं, क्योंकि वे किसी की मदद नहीं करते हैं।
  6. स्टैशिंग - आपका पेरफोर्स सर्वर p4 शेल्व कमांड का उपयोग करने के लिए 2010.1 या नया संस्करण होना चाहिए।
  7. पैच बनाना - git में करना आसान है। पता नहीं है कि क्या यह कमांड लाइन का उपयोग किए बिना पेरफोर्स में संभव है।
  8. जीयूआई से मेलिंग पैच - फिर से, जीआईटी यहां जीतता है।
  9. डिस्क स्थान - पेरफोर्स के साथ, हर शाखा एक प्रति है। इसका मतलब है कि यदि आपके स्रोत का पेड़ विशाल है, तो आपका डिस्क स्थान तेजी से खाया जाता है। एक बार जब आप निर्माण शुरू करते हैं तो यह अतिरिक्त स्थान भी नहीं गिनता है। यहां तक ​​कि शाखाओं और डिस्क स्थान के बीच एक लिंक क्यों है? गिट के साथ, आपके पास 100 शाखाएं हो सकती हैं और एक बार में केवल एक शाखा मौजूद होती है। यदि आप विशेष रूप से दो संस्करणों पर एक साथ काम करना चाहते हैं तो आप एक साथ क्लोन कर सकते हैं, अपना काम कर सकते हैं और फिर एक क्लोन से छुटकारा पा सकते हैं यदि आप चाहें, तो बिना कुछ खोए।
  10. यदि आप XCode4 पर हैं, तो पेरफोर्स सपोर्ट को हटा दिया गया है और git सपोर्ट अब बनाया गया है। यदि आप क्रॉस प्लेटफॉर्म जैसे I करते हैं, तो यह बहुत मायने रखता है। विजुअल स्टूडियो के साथ, आप गिट एक्सटेंशन का उपयोग कर सकते हैं। पेरफोर्स के साथ, यह दोनों ओएस पर समान रूप से yuck है। ठीक है, शायद थोड़ा और मैक पर अब XCode4 के साथ दृश्य पर।
  11. दोषपूर्ण चेकिन (या, जीआईटी बिसेक्ट रूल्स) का पता लगाना - कभी भी एक बग की शुरुआत करने का पता लगाने के लिए पेरिफेर के साथ एक द्विआधारी खोज करने की कोशिश की गई थी? काफी परेशानी है, हाँ? बीच में अन्य शाखाओं से एकीकृत होने पर भी अधिक परेशानी होती है। क्यों? क्योंकि ऐसे कार्यों के लिए कोई स्वचालन नहीं है। आपको अपने स्वयं के टूल को पर्फेक्ट से बात करने के लिए लिखने की आवश्यकता है और आपके पास आमतौर पर समय नहीं है। गिट के साथ, आप इसे शुरुआती बिंदु ("अच्छा" बिंदु और "बुरा" बिंदु) देते हैं और यह आपके लिए खोज को स्वचालित करता है। इससे भी बेहतर, अगर आपके पास एक स्क्रिप्ट है जो बिल्ड और टेस्ट प्रक्रिया को स्वचालित कर सकती है, तो आप स्क्रिप्ट को हुक कर सकते हैं और चेकइन खोजने की पूरी प्रक्रिया स्वचालित है। इसे ऐसा होना चाहिए।
  12. रिफ्लेक्टर में परिवर्तन पर नज़र रखना - BigClass को SmallClass1 और SmallClass2 में विभाजित करने का प्रयास करें। Perforce के लिए, BigClass का अस्तित्व अब समाप्त हो गया है और दो नए वर्ग (SmallClass1 और SmallClass2 स्रोत पेड़ में शामिल हो गए हैं)। Perforce के लिए, BigClass और SmallClass1 और SmallClass2 के बीच कोई संबंध नहीं है। दूसरी ओर, Git यह जानने के लिए काफी स्मार्ट है कि BigClass का x% अब SmallClass1 में है और BigClass का y% SmallClass2 में है और BigClass का अस्तित्व समाप्त हो गया है। अब, किसी ऐसे व्यक्ति के दृष्टिकोण से, जो कई शाखाओं में परिवर्तनों की समीक्षा कर रहा है, आप मुझे बताएं कि आपको कौन सा दृष्टिकोण अधिक उपयोगी लगेगा - Git or Perforce's। व्यक्तिगत रूप से, मैं Git के दृष्टिकोण को पसंद करता हूं क्योंकि यह अधिक सटीक रूप से कोड में वास्तविक परिवर्तन को दर्शाता है। Git ऐसा करने में सक्षम है क्योंकि यह फ़ाइल के भीतर सामग्री को ट्रैक करता है न कि फ़ाइल को।
  13. केंद्रीकृत या विकेन्द्रीकृत: Git एक DVCS प्रणाली है, जबकि पारेषण केंद्रीकृत है। एक केंद्रीकृत वीसीएस को बाद में विकेंद्रीकृत नहीं किया जा सकता है, लेकिन एक डीवीसीएस (विशेषकर गिट) को केंद्रीकृत किया जा सकता है। ऐसे कई उत्पाद हैं जो बहुत बढ़िया अनाज पहुंच नियंत्रण को जीआईटी से जोड़ते हैं, अगर यह कुछ ऐसा है जो व्यापार की जरूरत है। व्यक्तिगत रूप से, मैं एक ऐसी प्रणाली के साथ जाऊंगा जो मुझे लंबी अवधि में अधिक लचीलापन दे।
  14. ब्रांच मैपिंग: यदि आप पेरफोर्स में सही ब्रांचिंग करना चाहते हैं, तो आपको ब्रांच मैपिंग बनाने की आवश्यकता है। इसके लिए कारण हैं, लेकिन वे इस बात से बंधे हैं कि पेरफोर्स किस तरह एक शाखा की अवधारणा करता है। एक डेवलपर या एक टीम के रूप में, इसका मतलब है काम प्रवाह में एक और कदम, जिसे मैं बिल्कुल भी कुशल नहीं मानता।
  15. टीमों के बीच काम साझा करना: पेरफोर्स के साथ, आप एक सबमिशन नहीं तोड़ सकते। टीम ए फीचर बी पर काम कर रही है। टीम बी फीचर बी पर काम कर रही है। टीम सी बग फिक्स पर काम करती है। अब, टीम ए और बी को अपनी सुविधाओं को लागू करने के लिए बगों का एक गुच्छा ठीक करना होगा। केवल एक चीज है, वे अपने परिवर्तनों को करते समय इतने अनुशासित नहीं थे (शायद इसलिए कि वे एक समय सीमा पर जा रहे हैं) और इसलिए उनके "बग फिक्स" बड़े सबमिशन के हिस्से हैं जिनमें नया सामान भी शामिल है जहां तक ​​कि संस्करण नियंत्रण भी उनके ऊपर है शाखाओं का संबंध है। हालाँकि, टीम C अब एक पॉइंट रिलीज़ कर रही है और दूसरी टीमों से बग को ठीक करना चाहती है। यदि वे Git का उपयोग कर रहे थे, तो टीम C अन्य टीमों के प्रासंगिक बदलावों को चुन सकती है, उन्हें विभाजित कर सकती है और केवल आंशिक रूप से कार्यान्वित सुविधाओं को शुरू करने के बारे में चिंता किए बिना केवल वही ले सकती है जो उन्हें चाहिए। पेरफोर्स के साथ,
  16. प्लेटफ़ॉर्म बदलना - यदि, भविष्य में किसी भी कारण से, आप अपनी पसंद के प्लेटफ़ॉर्म को बदलने का निर्णय लेते हैं, तो आप Perforce.com की दया पर हैं और आपके चयन के प्लेटफ़ॉर्म के लिए टूल की उपलब्धता।
  17. भविष्य के अद्भुत स्रोत नियंत्रण इंजन एक्स में परिवर्तन - यदि आप स्रोत नियंत्रण के लिए जो उपयोग करते हैं उसे बदलने का निर्णय लेते हैं, तो अपने स्रोत नियंत्रण इतिहास को पेरफोर्स से निकालकर नए सिस्टम एक्स पर ले जाना एक बुरा सपना होने जा रहा है, क्योंकि यह बंद स्रोत और सबसे अच्छा है आप अनुमान लगा सकते हैं - क्या मैं जिस बारे में बात कर रहा हूं, उसके बारे में जानने के लिए पेरिट्स फॉर जीआईटी माइग्रेशन के लिए बस Google। कम से कम गिट के साथ, इसका खुला स्रोत है, इसलिए यह बहुत सारे अनुमान को शामिल करता है।

खैर, यह मेरा 2 सेंट है। पेरफोर्स डिफेंस में, मैं कहता हूं कि उनके ग्राहक समर्थन नियम हैं और इसलिए उनका टाइम लैप्स व्यू टूल है। मैं नहीं जानता कि कैसे git के साथ एक समय व्यतीत करने का दृश्य मिलता है। लेकिन सुविधा और समय की बचत के लिए, मैं किसी भी दिन गिट के साथ जाऊंगा।


2
re # 6 (stash): पी 4 शेल्व, यह नया है।
ट्रे

धन्यवाद। मैंने अपना उत्तर अपडेट किया है :)
कार्ल

8
पेरफोर्स और गिट के बीच सबसे बड़ा अंतर आवश्यक सेट मन है। यदि आप एक केंद्रीकृत VCS दुकान चला रहे हैं, तो git वास्तव में कठिन बिकने वाला है, क्योंकि इसमें आपके, आपकी टीम और व्यवसाय के संस्करण नियंत्रण के बारे में सोचने के तरीके में बदलाव की आवश्यकता होती है। दूसरे शब्दों में, git एक उत्कृष्ट और कुशल उपकरण है जो तकनीकी रूप से Perforce से अधिक सक्षम है। कठिन हिस्सा मनुष्यों को आश्वस्त कर रहा है :)
कार्ल

1
मैं Perforce के साथ प्यार में हूं। इस पोस्ट को पढ़ने से लगता है कि धोखा ...
KlausCPH

2
@ कम से कम कम से कम आपको पर्फेक्ट छोड़ने पर ब्रेकअप स्पीच तैयार नहीं करनी पड़ेगी :)
कार्ल

46

यह मुझे लागू करने के लिए स्विच करने के लिए बहुत आश्वस्त होगा। जिन दो कंपनियों में मैंने इसका इस्तेमाल किया था, वह पर्याप्त से अधिक थी। वे दोनों अलग-अलग कार्यालयों वाली कंपनियां थीं, लेकिन कार्यालयों को बहुत सारे बुनियादी ढांचे के साथ स्थापित किया गया था ताकि असंतुष्ट / डिस्कनेक्ट की गई सुविधाओं की आवश्यकता न हो।

आप कितने डेवलपर को बदलने की बात कर रहे हैं?

असली सवाल यह है कि यह क्या है कि आपके संगठन की जरूरतों को पूरा नहीं कर रहा है जो git प्रदान कर सकता है? और इसी तरह, पेरिट की तुलना में क्या कमजोरियां हैं? यदि आप स्वयं इसका उत्तर नहीं दे सकते हैं तो यहाँ से पूछना मदद नहीं करेगा। आपको अपनी कंपनी के लिए एक व्यावसायिक मामला खोजने की आवश्यकता है। (उदाहरण के लिए शायद यह स्वामित्व की कम समग्र लागत के साथ है (जिसमें अंतरिम सीखने के चरण के लिए उत्पादकता का नुकसान शामिल है, उच्च व्यवस्थापक लागत (कम से कम शुरू में), आदि)

मुझे लगता है कि आप एक कठिन बिक्री के लिए हैं - पेरफोर्स को बदलने की कोशिश करने के लिए एक बहुत अच्छा है। यदि आप pvcs या ssafe को बूट करने का प्रयास कर रहे हैं तो यह कोई ब्रेनर नहीं है।


18
मैं जोड़ूंगा कि जीआईटी की उल्लेखनीय विशेषता सेट खड़ी सीखने की अवस्था की लागत पर आती है। (हालांकि मैंने कभी भी उन सभी को सहज ज्ञान युक्त नहीं पाया।)
savetheclocktower

1
शानदार जवाब टिम। जस्टिन - आपके बॉस को क्यों बेचा जाता है? निश्चित रूप से आपने टिम के प्रश्न को संबोधित किया होगा? मुझे औचित्य में भी दिलचस्पी होगी।
ग्रेग व्हिटफील्ड

4
आपको एक वाणिज्यिक environemnt में Perforce के लिए भुगतान करना होगा, और वास्तव में मुझे हमेशा यह पता चलता है कि Perforce का उपयोग करने के लिए शब्दजाल है। और एकमात्र ताकत जो मुझे वास्तव में दिखाई देती है, वह है विशाल बाइनरी ब्लब्स को संभालना अच्छा है।
कैलिथ

2
@ जस्टिन: "हम केवल बुनियादी सुविधाओं का उपयोग करेंगे" कारण से सावधान रहें। गिट के साथ, आप अधिक उन्नत सामान का उपयोग करके समाप्त हो जाएंगे। क्यों नहीं करेंगे? बिस्ट तुरंत दिमाग में आता है। इसलिए रीबेस और चेरी-पिक करें।
कार्ल

3
दरअसल, हम टिप्पणियों में एक प्रासंगिक बातचीत कर रहे हैं, जो कि जैसे ही समाप्त हुआ "क्या आप सुनिश्चित हैं कि आप इसे चैट में स्थानांतरित नहीं करना चाहते हैं" संकेत आया कि आखिरकार किसी ने नोटिस किया है कि यह प्रश्न वास्तव में, एसओ के लिए उपयुक्त नहीं है। यह अनिवार्य रूप से यह पूछ रहा है कि एक प्रणाली दूसरे की तुलना में "बेहतर" क्यों है, और इसके साथ बहुत सारी उत्साही बहस को आमंत्रित कर रहा है।
एडम पार्क्सिन

15

मुझे लगता है कि / पोस्ट स्विच ओवर के दौरान लोगों को खुश रखने के संदर्भ में, चीजों को जल्दी से पार करने के लिए, बस एक निजी शाखा Git में कितनी निजी हो सकती है, और कितनी आज़ादी है जो उन्हें गलतियाँ करने के लिए देती है। उन सभी को वर्तमान कोड से कुछ निजी शाखाओं को क्लोन करने के लिए प्राप्त करें और फिर प्रयोग करते हुए वहां जंगली जाएं। कुछ फ़ाइलों का नाम बदलें, सामान की जांच करें, चीजों को दूसरी शाखा से मर्ज करें, इतिहास को फिर से लिखें, दूसरे के शीर्ष पर परिवर्तन के एक सेट को फिर से भरें, और इसी तरह। यह दिखाएं कि स्थानीय स्तर पर भी उनके सबसे बुरे हादसों का उनके सहयोगियों के लिए कोई परिणाम नहीं है। आप जो चाहते हैं वह एक ऐसी स्थिति है जहां डेवलपर्स सुरक्षित महसूस करते हैं, इसलिए वे तेजी से सीख सकते हैं (चूंकि गिट में एक महत्वपूर्ण सीखने की अवस्था है) और फिर अंततः इसलिए कि वे डेवलपर्स के रूप में अधिक प्रभावी हैं।

जब आप एक केंद्रीकृत उपकरण सीखने की कोशिश कर रहे हैं, तो जाहिर है कि आप कुछ नासमझ बनाने के बारे में चिंतित होंगे जो रिपॉजिटरी के अन्य उपयोगकर्ताओं के लिए समस्याएं पैदा करते हैं। अकेले शर्मिंदगी का डर लोगों को प्रयोग करने से हतोत्साहित करने के लिए पर्याप्त है। यहां तक ​​कि एक विशेष "प्रशिक्षण" रिपॉजिटरी में मदद नहीं करता है, क्योंकि अनिवार्य रूप से डेवलपर्स उत्पादन प्रणाली में एक ऐसी स्थिति का सामना करेंगे जो उन्होंने प्रशिक्षण के दौरान कभी नहीं देखा था, और इसलिए वे चिंता में वापस आ गए हैं।

लेकिन गिट की वितरित प्रकृति इस के साथ दूर करती है। आप किसी स्थानीय शाखा में किसी भी प्रयोग की कोशिश कर सकते हैं, और अगर यह बुरी तरह से गलत हो जाता है, तो बस शाखा को फेंक दें और किसी को भी जानने की आवश्यकता नहीं है। चूँकि आप किसी भी चीज़ की स्थानीय शाखा बना सकते हैं, आप एक समस्या को दोहरा सकते हैं जिसे आप वास्तविक लाइव रिपॉजिटरी के साथ देख रहे हैं, फिर भी "बिल्ड को तोड़ने" या अन्यथा खुद को बेवकूफ बनाने का कोई खतरा नहीं है। आप पूरी तरह से सब कुछ जांच सकते हैं, जैसे ही आपने इसे किया है, कोई भी साफ छोटे पैकेज में काम करने की कोशिश नहीं कर रहा है। तो न केवल दो प्रमुख कोड परिवर्तन आपने आज पर चार घंटे बिताए, बल्कि यह भी तय कर लें कि आपने आधे रास्ते को याद किया है, और दस्तावेज़ में वर्तनी की गलती जो आपने किसी सहकर्मी को कुछ समझाते समय स्पॉट की थी, और इसी तरह। और अगर बड़े बदलावों को छोड़ दिया जाता है क्योंकि परियोजना दिशा बदल रही है,


कोई कारण नहीं है कि आपके पास एक केंद्रीकृत प्रणाली की निजी शाखा नहीं हो सकती है। DVCS कभी-कभी विलय पर बेहतर काम करते हैं, लेकिन सिर्फ इसलिए कि निजी शाखा रिमोट रेपो पर मौजूद नहीं है, इसका मतलब यह नहीं है कि आप केवल आपके लिए एक शाखा नहीं बना सकते हैं जो रिमोट रेपो पर मौजूद है।
बिली ओनेल

2
यह टिप्पणी तकनीकी रूप से सही है, लेकिन यह इस बिंदु को याद करने की तरह है। संशोधन नियंत्रण प्रणाली एक सामाजिक उपकरण है। सामाजिक रूप से साझा सर्वर में उस पर आपके नाम के साथ शाखा "निजी" नहीं है जिसे वह साझा करता है। हां, यहां तक ​​कि एसीएल के साथ भी और जो भी हो। तकनीकी अंतर भी हैं (जाहिर है कि मेरी git निजी शाखा का उपयोग तब किया जाता है जब मैं घर पर आ रहा हूं, बिना किसी अविश्वसनीय इंटरनेट के) लेकिन वे सामाजिक अंतर के लिए सहायक हैं।
tialaramex

2
पर्फेक्ट वाली एक निजी शाखा, बस बेकार है। जिस आसानी से आप git में शाखाओं के बीच बनाते और स्विच करते हैं, उसकी तुलना perforce से नहीं की जा सकती। कितना निजी वास्तव में एक "निजी" शाखा है। आप इसे स्थानीय नहीं रखते। आप पूरी तरह से नेटवर्क एक्सेस पर निर्भर हैं।
एरिक इंगहेम

9

व्यक्तिगत रूप से मुझे git पर बेचने वाली कमांड bisect थी । मुझे नहीं लगता कि यह सुविधा अब तक किसी अन्य संस्करण नियंत्रण प्रणाली में उपलब्ध है।

कहा जा रहा है, अगर लोगों को स्रोत नियंत्रण के लिए GUI क्लाइंट के लिए उपयोग किया जाता है, तो वे git से प्रभावित नहीं होने वाले हैं। अभी केवल पूर्ण-विशेषताओं वाला क्लाइंट कमांड-लाइन है।


1
निष्पक्षता के लिए (मैंने एचजी पर गिट उठाया) यह ध्यान दिया जाना चाहिए कि मर्क्यूरियल में द्विभाजन क्षमता भी है - हालांकि यह एक प्लगइन के रूप में जहाज करता है जिसे आपको स्पष्ट रूप से लोड करना होगा।
अरस्तू पगलतज़िस

2
git के अस्तित्व में आने से पहले से ही darcs का "ट्रैकडाउन" हो चुका है। प्रारंभिक संस्करण बहुत मोटे तौर पर, मोटे तौर पर थे।
अष्टमी

2
UI के बारे में - OSX पर GitX उत्कृष्ट है।
एंटनी स्टब्स

4
SourceTree भी एक और अच्छा देशी osx क्लाइंट है। इसे हासिल करने के बाद यह मुक्त हो गया। मैं कुछ समय से इसका उपयोग कर रहा हूं और मुझे यह पसंद है। मैं SourceTree का उपयोग करने से पहले ज्यादातर कमांडर था।
प्रकाश नादर

1
गिट के साथ मेरे अनुभव में, आपको वास्तव में इसे प्रभावी ढंग से उपयोग करने के लिए कमांड लाइन और एक ग्राफिकल क्लाइंट दोनों की आवश्यकता है। आपको कमांड लाइन की आवश्यकता है क्योंकि वहां बहुत अधिक शक्ति है जो एक जीयूआई में डालना आसान नहीं है, और आपको जीयूआई (या कम से कम git log --graph) की आवश्यकता है क्योंकि गिट रिवीजन हिस्टरी में बिना चित्र के कल्पना करने के लिए निर्मल और कठोर होने की प्रवृत्ति है। मैं GUI के रूप में GitX और SourceTree का उपयोग करता हूं, हालांकि gitk (जो अब Git के साथ आता है) एक चुटकी में निष्क्रिय है।
मार्नेन लाईबो-कोसर

9

लोग क्या Perforce सुविधाओं का उपयोग कर रहे हैं?

  • एक मशीन पर कई कार्यस्थान
  • गिने चुने चंगेल
  • डेवलपर शाखाएं
  • आईडीई (विजुअल स्टूडियो, एक्लिप्स, स्लिकएडिट, ...) के साथ एकीकरण
  • कई का निर्माण
  • समग्र कार्यक्षेत्र
  • कुछ फ़िक्सेस को एकीकृत करना लेकिन दूसरों को नहीं
  • आदि

मैं पूछता हूं क्योंकि अगर सभी लोग कर रहे हैं और कमांड लाइन से प्राप्त किया जाता है, तो गिट को कवर किया गया है, और इसलिए सभी अन्य आरटीएस करें।


2
इस बारे में निश्चित नहीं है कि "सिंगल मशीन पर कई कार्यस्थान" का अर्थ क्या है - अन्य VCS में केवल कार्यक्षेत्र की अवधारणा नहीं है, इसलिए इसे वास्तव में Perforce के लिए एक सुविधा के रूप में नहीं जाना जा सकता है। दूसरों को समझ में आता है।
बिली ओनेल

एकाधिक कार्यक्षेत्र उदाहरण: क्लाइंट A के पास केवल-ए फ़ाइलों के देव और रिलीज़ संस्करण हैं और संस्करण 1.52 पर आंतरिक उपकरणों का सबसेट; क्लाइंट बी के पास देव और रिलीज की गई फाइलें हैं और साथ ही आंतरिक उपकरणों के एक अलग लेकिन अतिव्यापी उप-संस्करण भी हैं, देव और संस्करण 1.52। डेवलपर एक साथ दोनों पर काम कर रहा है, और ए टूटे हुए आंतरिक उपकरणों को देखने के लिए चुन सकता है कि क्या टूटता है।
थॉमस एल होलाडे

6
@ टॉमा: आप क्यों नहीं ... बस दो बार चेक आउट कर चुके हैं? Perforce को एक "सुविधा" के रूप में होना चाहिए क्योंकि अन्यथा यह सुनिश्चित करने के लिए अजीब हो जाता है कि पर्यावरण चर को ठीक से सेट किया गया है, रजिस्ट्री प्रविष्टियां सही हैं, आदि।
अरफांगियन

@Arafangion, यह स्पष्ट नहीं है कि दो बार जांच करने से सेट बनाने के लिए फ़ाइलों के चयनात्मक एक्सपोज़र की सुविधा मिलती है।
थॉमस एल होलडे

6

जाहिरा तौर पर GitHub अब कंपनियों को git प्रशिक्षण पाठ्यक्रम प्रदान करता है । इसके बारे में उनके ब्लॉग पोस्ट को उद्धृत करें :

मैं पिछले कुछ हफ्तों में Google परिसर में कई बार गया हूं और वहां पर Android को Git में प्रशिक्षित करने में मदद करता हूं। मुझे शॉन पीयर्स द्वारा पूछा गया था (आप उन्हें उनके Git और EGit / JGit गौरव से जान सकते हैं - वह हीरो हैं जो मेनटैनन्स को संभालते हैं जब जूनियो शहर से बाहर होता है) उसे संक्रमण में एंड्रियोड पर काम करने वाले Google वीडियो की मदद करने के लिए आने के लिए Perforce से Git तक , इसलिए Android को आम लोगों के साथ साझा किया जा सकता है। मैं आपको बता सकता हूं कि मैं इसे करने से ज्यादा खुश था।

[...]

लॉजिकल भयानक अब आधिकारिक तौर पर सभी कंपनियों को इस प्रकार की कस्टम प्रशिक्षण सेवा की पेशकश कर रहा है, जहां हम आपके संगठन को प्रशिक्षण और योजना के साथ मदद कर सकते हैं यदि आप गिट के लिए भी स्विच करने के बारे में सोच रहे हैं।

जोर मेरा।


4

मैं लंबे समय से Perforce का उपयोग कर रहा हूं और हाल ही में मैंने GIT का उपयोग करना भी शुरू कर दिया है। यहाँ मेरा "उद्देश्य" राय है:

Perforce सुविधाएँ:

  1. GUI उपकरण अधिक सुविधा संपन्न प्रतीत होते हैं (जैसे समय व्यतीत करना दृश्य, संशोधन ग्राफ़)
  2. गति जब सिर संशोधन के लिए सिंकिंग (पूरे इतिहास को स्थानांतरित करने का कोई ओवरहेड नहीं)
  3. ग्रहण / दृश्य स्टूडियो एकीकरण वास्तव में अच्छा है
  4. आप प्रति चैनल एक शाखा में कई विशेषताएं विकसित कर सकते हैं (अगर यह GIT पर एक फायदा है तो मुझे अभी भी 100% यकीन नहीं है)
  5. आप "जासूसी" कर सकते हैं कि अन्य डेवलपर्स क्या कर रहे हैं - उन्होंने किस तरह की फाइलें चेक की हैं।

जीआईटी विशेषताएं:

  1. मुझे आभास हुआ कि GIT कमांड लाइन Perforce (init / क्लोन, ऐड, कमिटमेंट) से कहीं अधिक सरल है। जटिल वर्कस्पेस का कोई कॉन्फ़िगरेशन नहीं है)
  2. चेकआउट के बाद प्रोजेक्ट हिस्ट्री एक्सेस करते समय स्पीड
  3. ऑफलाइन मोड (डेवलपर्स शिकायत नहीं करेंगे कि पहुंच से बाहर P4 सर्वर उन्हें कोडिंग से प्रतिबंधित करेगा)
  4. नई शाखाएँ बनाना ज्यादा तेज है
  5. "मुख्य" जीआईटी सर्वर को स्टोरेज के बहुत सारे टीबीटी की आवश्यकता नहीं है, क्योंकि प्रत्येक डेवलपर का अपना स्थानीय सैंडबॉक्स हो सकता है
  6. GIT OpenSource है - कोई लाइसेंस शुल्क नहीं
  7. यदि आपकी कंपनी OpenSource परियोजनाओं में भी योगदान कर रही है, तो पैच साझा करना GIT के साथ बहुत आसान है

OpenSource / वितरित परियोजनाओं के लिए कुल मिलाकर मैं हमेशा GIT की सिफारिश करूंगा, क्योंकि यह एक P2P एप्लिकेशन की तरह है और हर कोई विकास में भाग ले सकता है। उदाहरण के लिए, मुझे याद है कि जब मैं पेरफोर्स के साथ रिमोट डेवलपमेंट कर रहा था तो मैं हफ्ते में एक बार 1 जीबीपीएस लिंक पर 4 जीबी प्रोजेक्ट्स को सिंक कर रहा था। समय की वजह से बस बर्बाद हो गया था। इसके अलावा हमें वीपीएन सेट अप करने की जरूरत है।

यदि आपके पास एक छोटी कंपनी है और पी 4 सर्वर हमेशा ऊपर रहेगा तो मैं कहूंगा कि पेरफोर्स भी एक बहुत अच्छा विकल्प है।


Git फीचर # 1 सबसे अच्छा में एक संदिग्ध दावा है। शायद गिट सेटअप पर जीतता है, लेकिन दिन-प्रतिदिन का उपयोग बहुत ही अनाड़ी है (अक्सर एक सरल कार्य को पूरा करने के लिए कई आदेशों की आवश्यकता होती है)
एडम पार्किन

1
@AdamParkin कमांड लाइन से आपको कौन से कार्य अनाड़ी लगते हैं? (जहां संभव हो मैं GUI का उपयोग करता हूं, लेकिन मुझे लगता है कि Git का कमांड स्ट्रक्चर सभ्य है।)
Marnen Laibow-Koser

1
@AdamParkin खैर, कमांड लाइन का उपयोग करने में आसानी सौंदर्य पहलू है, इसलिए यह कम से कम व्यक्तिपरक है। इसका कारण यह है कि मैं व्यक्तिगत रूप से पेरिट्स की तुलना में गिट की कमांड लाइन को सरल मानता हूं, यह है कि पेरफोर्स में आपको एकल "गिट क्लोन" की तुलना में रिपॉजिटरी फाइलों के साथ काम करना शुरू करने से पहले कार्यक्षेत्र और पर्यावरण चर (P4USER आदि) स्थापित करने होंगे। आदेश। निश्चित रूप से कुछ उन्नत git Commands हैं जो Perforce में अनुपस्थित हैं (उदाहरण के लिए स्थानीय इतिहास को फिर से लिखना) और वे नियमित Perforce उपयोगकर्ताओं के लिए "रॉकेट साइंस" की तरह लग सकते हैं।
user389238

मैंने इसका इस्तेमाल नहीं किया, लेकिन मुझे लगता है कि परिवर्तन सेट का प्रबंधन करना एक गरीब आदमी की शाखा है, जिसमें आप अपनी सुविधा शाखाओं को स्क्वैश कर सकते हैं या उन्हें मास्टर में रिबेस कर सकते हैं।
रयान द लीच

4

हम कुछ समय से Git का उपयोग कर रहे हैं, हाल ही में हमारे Git सर्वर का हार्डड्राइव क्रैश हो गया और हम नवीनतम स्थिति में वापस नहीं लौट सके। हम कुछ दिन पुरानी अवस्था में वापस आने में कामयाब रहे। जब सर्वर बैक हुआ था। टीम में सभी ने अपने परिवर्तनों और वॉइला को खींचा / धक्का दिया, सर्वर वर्तमान स्थिति में वापस आ गया है।


3
एक बात में लिनुस ने @ Google को Git के बारे में बताया कि वह इस बारे में बात करता है कि वह कैसे बैकअप नहीं करता है क्योंकि लिनक्स कर्नेल के सभी क्लोन इसका पूर्ण बैकअप है। वास्तव में वास्तव में अच्छी बात है।
एडम पार्किन

यह सभी अर्थों में सच है, प्रत्येक पास "बैकअप" है, लेकिन कई मामलों में गिट को अभी भी "केंद्रीकृत-वितरित" उपकरण के रूप में उपयोग किया जाता है। यानी एसवीएन की तरह ही जोड़ा शाखाओं में होने वाले लाभों के साथ। संगठन हमेशा उनके पास मौजूद हर चीज का बैक-अप चाहता है।
प्रकाश नादर

3

पेरफोर्स और गिट (और सबसे अधिक उल्लेखित) के बीच एक महत्वपूर्ण अंतर उनकी बड़ी द्विआधारी फ़ाइलों की संबंधित हैंडलिंग है।

उदाहरण के लिए, एक वीडियो गेम डेवलपमेंट कंपनी के कर्मचारी के इस ब्लॉग में: http://corearchitecture.blogspot.com/2011/09/git-vs-perforce-from-game-development.html

हालाँकि, महत्वपूर्ण बात यह है कि, git और perforce के बीच की गति का अंतर, जब आपके पास एक विशाल 6gb रिपॉजिटरी होती है, जिसमें डॉक्यूमेंटेशन से लेकर हर बाइनरी तक सब कुछ होता है (और अंत में, अरे हाँ! वास्तविक स्रोत इतिहास), आमतौर पर आता है। तथ्य यह है कि विशाल कंपनियां पेरफोर्स को चलाती हैं, और इसलिए वे तहखाने में विशाल सर्वर बैंक के सभी महत्वपूर्ण कार्यों को बंद करने के लिए इसे स्थापित करते हैं।

पेरफोर्स के हिस्से में यह महत्वपूर्ण लाभ केवल एक कारक से आता है, जिसका पेरफोर्स के साथ कोई लेना-देना नहीं है, यह तथ्य कि कंपनी इसे चला रही है वह सर्वर बैंक कह सकती है।

और, वैसे भी, अंत में, Perforce और गिट अलग-अलग उत्पाद हैं। Git को केवल VCS के रूप में डिज़ाइन किया गया था, और यह Perforce की तुलना में कहीं बेहतर है (इसमें इसकी विशेषताएं अधिक हैं, जो आमतौर पर उपयोग करने में आसान हैं, विशेष रूप से, दूसरे के शब्दों में, Perforce में शाखा देना खुले दिल से प्रदर्शन करने जैसा है सर्जरी, यह केवल विशेषज्ञों द्वारा किया जाना चाहिए: पी) ( http://stevehanov.ca/blog/index.php?50=50 )

किसी भी अन्य लाभ जो कंपनियों को लागू करते हैं, जो पेरफोर्स लाभ का उपयोग करते हैं, केवल इसलिए आए हैं क्योंकि पेरफोर्स केवल एक वीसीएस नहीं है, यह एक फाइलरवर भी है, साथ ही बिल्ड्स के प्रदर्शन के परीक्षण के लिए अन्य विशेषताओं के मेजबान भी हैं, आदि।

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


3

मुझे लगता है कि एक चीज जो मुझे पता है कि जीआईटी जीतती है, यह सभी फाइलों पर "लाइन एंडिंग को संरक्षित करने" की क्षमता है, जबकि पेरफर्स उन्हें यूनिक्स, डॉस / विंडोज या मैकओएस 9 प्रारूप ("\ n", "\" में या तो अनुवाद करने पर जोर देते हैं। r \ n "या" \ r)।

यह एक वास्तविक दर्द है यदि आप विंडोज वातावरण, या मिश्रित ओएस वातावरण में यूनिक्स स्क्रिप्ट लिख रहे हैं। प्रति-फ़ाइल-एक्सटेंशन के आधार पर नियम सेट करना भी संभव नहीं है। उदाहरण के लिए, यह .sh, .bash, .unix फ़ाइलों को यूनिक्स प्रारूप में परिवर्तित करेगा, और .cc, .bat या .com फ़ाइलों को डॉस / विंडोज प्रारूप में परिवर्तित करेगा।

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

इस व्यवहार को प्राप्त करने का एकमात्र तरीका, फाइलों को बाइनरी के रूप में चिह्नित करना है। जैसा कि मैंने देखा है, कि एक लापता सुविधा को हल करने के लिए एक बुरा हैक होगा। सभी लिपियों पर करने के लिए थकाऊ होने के अलावा, आदि, यह भी शायद सबसे भिन्नता को तोड़ देगा, आदि।

"समाधान" जो हमने फिलहाल तय किया है, हर बार जब वे अपने यूनिक्स वातावरण में तैनात होते हैं, तो स्क्रिप्ट से सभी कैरिज रिटर्न को हटाने के लिए एक sed कमांड चलाना है। यह आदर्श नहीं है, खासकर जब से उनमें से कुछ WAR फ़ाइलों के अंदर तैनात किए गए हैं, और जब वे अनपैक किए जाते हैं तो सीड लाइन को फिर से चलाना पड़ता है।

यह कुछ ऐसा है जो मुझे लगता है कि जीआईटी को एक बड़ा फायदा देता है, और जो मुझे नहीं लगता कि ऊपर उल्लेख किया गया है।

संपादित करें: थोड़ी देर के लिए पेरफोर्स का उपयोग करने के बाद, मैं एक और टिप्पणी जोड़ना चाहूंगा:

ए) पेरफोर्स में मुझे जो कुछ याद आता है वह स्पष्ट और उदाहरण है, जिसमें परिवर्तित, हटाई गई और जोड़ी गई फाइलें शामिल हैं। इस के साथ GIT में उपलब्ध हैgit diff कमांड के , लेकिन पेरफोर्स में, फ़ाइलों को उनके परिवर्तनों को रिकॉर्ड करने से पहले जांचना पड़ता है, और जब आप अपने मुख्य संपादकों (जैसे एक्लिप्स) को स्वचालित रूप से फ़ाइलों की जांच करने के लिए सेट कर सकते हैं जब आप उन्हें संपादित करते हैं, तो आप कभी-कभी अन्य तरीकों से फ़ाइलों को संपादित कर सकते हैं (नोटपैड, यूनिक्स कमांड आदि)। और नई फ़ाइलों को स्वचालित रूप से बिल्कुल भी नहीं जोड़ा जा सकता है, यहां तक ​​कि ग्रहण और p4eclipse का उपयोग करते हुए, जो कि बल्कि कष्टप्रद हो सकता है। इसलिए सभी परिवर्तनों को खोजने के लिए, आपको पूरे कार्यक्षेत्र पर एक "डिफ के खिलाफ ..." चलाना होगा, जिसे चलाने के लिए सबसे पहले कुछ समय लगता है, और दूसरी बात इसमें सभी प्रकार की अप्रासंगिक चीजें शामिल हैं जब तक कि आप बहुत जटिल अपवर्जन सूचियां सेट नहीं करते हैं, जो मुझे अगले बिंदु पर ले जाता है।

बी) जीआईटी में मुझे .िटिग्नोर बहुत सरल और प्रबंधन, पढ़ने और समझने में आसान लगता है। हालाँकि, कार्यक्षेत्र उपेक्षा / बहिष्कृत सूचियाँ Perforce में विन्यास योग्य और अनावश्यक रूप से जटिल लगती हैं। मैं वाइल्डकार्ड के साथ काम करने का कोई भी निष्कर्ष नहीं निकाल सका हूं। मैं कुछ ऐसा करना चाहूंगा

-//Server/mainline/.../target/...   //Svend_Hansen_Server/.../target/...

सर्वर / मेनलाइन के अंदर सभी परियोजनाओं के भीतर सभी लक्ष्य फ़ोल्डर को बाहर करने के लिए। हालाँकि, यह काम नहीं करता है जैसे मुझे उम्मीद थी, और मैंने हर परियोजना के लिए एक लाइन जोड़ना समाप्त कर दिया है जैसे:

-//Server/mainline/projectA/target/...  //Svend_Hansen_Server/projectA/target/...
-//Server/mainline/projectB/target/...  //Svend_Hansen_Server/projectB/target/...
...

और बिन फ़ोल्डर्स, .classpath और .projet फ़ाइलों और अधिक के लिए समान लाइनें।

सी) पेरफोर्स में बल्कि उपयोगी चेंजेलिस्ट हैं। हालाँकि, मान लें कि मैं परिवर्तनों का एक समूह बनाता हूं, उन सभी की जांच करें और उन्हें एक चैनल में डाल दें, फिर उस चैनल को प्रस्तुत करने से पहले किसी और चीज़ पर काम करें। अगर मैं बाद में पहली चेंजलॉजिस्ट में शामिल फ़ाइलों में से एक में बदलाव करता हूं, तो वह फाइल अभी भी उस चैंजिस्ट में होगी, और मैं बाद में सिर्फ यह मानते हुए चेंजलिस्ट जमा नहीं कर सकता कि इसमें केवल वही बदलाव हैं जो मैंने मूल रूप से जोड़े थे (हालांकि यह वही फाइलें होगी)। GIT में, यदि आप कोई फ़ाइल जोड़ते हैं और वे उसमें और परिवर्तन करते हैं, तो वे परिवर्तन जोड़े नहीं गए होंगे (और फिर भी एक दिन में दिखाई देंगेgit diffऔर आप नए बदलावों को जोड़ने के बिना पहले फ़ाइल को कमिट नहीं कर पाएंगे। बेशक, यह उसी तरह से उपयोगी नहीं है जिस तरह से चैंजिस्ट हो सकता है क्योंकि आपके पास केवल एक सेट की गई फाइलें हैं, लेकिन जीआईटी में आप केवल बदलाव कर सकते हैं, क्योंकि यह वास्तव में उन्हें धक्का नहीं देता है। आप उन्हें धक्का देने से पहले अन्य परिवर्तनों पर काम कर सकते हैं, लेकिन आप पूर्व में हुए बदलावों को आगे बढ़ाए बिना किसी भी चीज़ को आगे नहीं बढ़ा पाएंगे।


2

मुझे गिट के साथ कोई अनुभव नहीं है, लेकिन मेरे पास मर्क्यूरियल है जो एक वितरित वीसीएस भी है। यह वास्तव में परियोजना पर निर्भर करता है, लेकिन हमारे मामले में एक वितरित वीसीएस परियोजना को अनुकूल बनाता है क्योंकि मूल रूप से अक्सर टूटे हुए निर्माणों को हटा दिया जाता है।

मुझे लगता है कि यह वास्तव में परियोजना पर निर्भर करता है, क्योंकि कुछ ग्राहक-सर्वर वीसीएस के लिए बेहतर अनुकूल हैं, और अन्य एक वितरित की ओर इशारा करते हैं।


(दी, यह एक पुराना जवाब है, लेकिन ...) आप Git चला सकते हैं (और मुझे भी मर्क्यूरियल लगता है) मानो यह एक क्लाइंट-सर्वर VCS था। यह अभी भी क्लाइंट-सर्वर वीसीएस की तुलना में बेहतर काम करता है, क्योंकि ब्रांचिंग और मर्जिंग में आसानी और निजी कमिट की संभावना है। मुझे क्लाइंट-सर्वर वीसीएस के लिए अधिक उपयोग नहीं दिखता है, कम से कम तब तक जब तक कि उन्हें अपने मर्ज कौशल बराबर नहीं मिलते।
मार्नेन लाईबो-कोसर

-5

यहाँ मुझे git के बारे में पसंद नहीं है:

सबसे पहले, मुझे लगता है कि वितरित विचार वास्तविकता के सामने उड़ जाता है। हर कोई जो वास्तव में गिट का उपयोग कर रहा है, वह केंद्रीकृत तरीके से कर रहा है, यहां तक ​​कि लिनस टॉर्वाल्ड्स भी। यदि कर्नेल को वितरित तरीके से प्रबंधित किया गया था, तो इसका मतलब है कि मैं वास्तव में "आधिकारिक" कर्नेल स्रोतों को डाउनलोड नहीं कर सकता हूं - एक नहीं होगा - मुझे यह तय करना होगा कि मुझे लिनुस का संस्करण चाहिए, या जो का संस्करण, या बिल का संस्करण। यह स्पष्ट रूप से हास्यास्पद होगा, और यही कारण है कि एक आधिकारिक परिभाषा है जो लाइनस एक केंद्रीकृत वर्कफ़्लो का उपयोग करके नियंत्रित करती है।

यदि आप स्वीकार करते हैं कि आप अपने सामान की एक केंद्रीकृत परिभाषा चाहते हैं, तो यह स्पष्ट हो जाता है कि सर्वर और क्लाइंट भूमिका पूरी तरह से अलग हैं, इसलिए हठधर्मिता कि क्लाइंट और सर्वर सॉफ्टवेयर्स समान होना चाहिए, विशुद्ध रूप से सीमित हो जाता है। हठधर्मिता कि क्लाइंट और सर्वर डेटा समान रूप से हास्यास्पद होना चाहिए, विशेष रूप से कोडबेस में, जो पंद्रह वर्षों के इतिहास में मिला है, जिसके बारे में कोई भी परवाह नहीं करता है, लेकिन हर किसी को क्लोन करना होगा।

हम वास्तव में उस सभी पुराने सामान के साथ क्या करना चाहते हैं, इसे एक अलमारी में रखा जाता है और यह भूल जाते हैं कि यह वहीं है, जैसे कोई सामान्य वीसीएस करता है। तथ्य यह है कि यह सब हर दिन नेटवर्क पर आगे पीछे हिलता है बहुत खतरनाक है, क्योंकि यह आपको इसे चुभाने के लिए नग करता है। उस छंटाई में बहुत सारे थकाऊ फैसले शामिल हैं और यह गलत हो सकता है। तो लोग शायद इतिहास में विभिन्न बिंदुओं से स्नैपशॉट रिपोज की एक पूरी श्रृंखला रखेंगे, लेकिन क्या ऐसा नहीं था कि पहली बार किस स्रोत का नियंत्रण था? यह समस्या तब तक मौजूद नहीं थी जब तक कि किसी ने वितरित मॉडल का आविष्कार नहीं किया।

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

आइए एक अच्छी तरह से वित्त पोषित, बड़ी परियोजना का एक उदाहरण लें और देखें कि उनके लिए कैसे काम कर रहा है: Android। मैंने एक बार खुद एंड्रॉइड सिस्टम के साथ एक नाटक करने का फैसला किया। मुझे पता चला कि मैं लिपियों के एक समूह का उपयोग करने वाला था जिसे रेपो कहा जाता है। रेपो के कुछ क्लाइंट पर और कुछ सर्वर पर चलते हैं, लेकिन दोनों ही, अपने अस्तित्व से, इस तथ्य को स्पष्ट कर रहे हैं कि दोनों में से कोई भी क्षमता अधूरी है। क्या हुआ कि मैं लगभग एक सप्ताह तक स्रोतों को खींचने में असमर्थ था और फिर पूरी तरह से छोड़ दिया। मुझे कई अलग-अलग रिपॉजिटरी से वास्तव में बड़ी मात्रा में डेटा खींचना होगा, लेकिन सर्वर मुझ जैसे लोगों से पूरी तरह से भरा हुआ था। रेपो का समय समाप्त हो रहा था और वह फिर से शुरू नहीं कर पा रहा था जहां से यह समय समाप्त हो गया था। अगर git इतना अधिक वितरण योग्य है, तो आपने सोचा होगा कि वे ' d ने उस एक सर्वर पर लोड को राहत देने के लिए किसी तरह की पीयर-टू-पीयर चीज की है। Git वितरण योग्य है, लेकिन यह एक सर्वर नहीं है। Git + रेपो एक सर्वर है, लेकिन रेपो डिस्ट्रिब्यूटेबल कॉस नहीं है, यह सिर्फ हैक्स का एड-हॉक कलेक्शन है।

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

यदि आप वितरित वस्तु पर विश्वास करते हैं, तब भी गिट एक गड़बड़ होगा। उदाहरण के लिए, एक शाखा क्या है? वे कहते हैं कि आप हर बार जब आप एक रिपॉजिटरी को क्लोन करते हैं, तो आप एक शाखा बनाते हैं, लेकिन यह एक एकल रिपॉजिटरी में एक शाखा के समान नहीं हो सकती है। इसलिए कम से कम दो अलग-अलग चीजों को शाखाओं के रूप में संदर्भित किया जा रहा है। लेकिन फिर, आप एक रेपो में रिवाइंड भी कर सकते हैं और बस संपादन शुरू कर सकते हैं। क्या यह दूसरी तरह की शाखा है, या फिर कुछ अलग है? शायद यह निर्भर करता है कि आपको किस प्रकार का रेपो मिला है - ओह हां - जाहिर है कि रेपो बहुत स्पष्ट अवधारणा भी नहीं है। सामान्य हैं और नंगे हैं। आप एक सामान्य को धक्का नहीं दे सकते क्योंकि नंगे भाग अपने स्रोत पेड़ के साथ सिंक से बाहर निकल सकते हैं। लेकिन आप एक नंगे एक कॉस पर cvsimport नहीं कर सकते हैं जो उन्होंने ऐसा नहीं सोचा था। तो आप एक सामान्य करने के लिए cvsimport है, क्लोन करने के लिए कि एक नंगे जो डेवलपर्स को मारा, और cvsexport कि एक cv काम कर रहे प्रतिलिपि करने के लिए जो अभी भी cvs में जाँच की जानी है। किसको परेशान किया जा सकता है? ये सारी जटिलताएँ कहाँ से आईं? वितरित विचार से ही। मैंने अंत में गिटोलिट खाई क्योंकि यह मुझ पर इन प्रतिबंधों के और भी अधिक लगा रहा था।

गिट कहते हैं कि ब्रांचिंग हल्की होनी चाहिए, लेकिन कई कंपनियों के पास पहले से ही एक गंभीर दुष्ट शाखा की समस्या है, इसलिए मैंने सोचा होगा कि ब्रांचिंग सख्त पुलिसिंग के साथ एक महत्वपूर्ण निर्णय होना चाहिए। यह वह जगह है जहाँ वास्तव में चमकता है ...

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

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

मुझे लगता है कि यह सैद्धांतिक रूप से कुछ समान करने के लिए संभव होगा, लेकिन git व्यावहारिक रूप से कुछ भी संभव बनाता है बजाय एक वर्कफ़्लो के अनुमोदन से। केंद्रीकृत मॉडल वितरित मॉडल के सापेक्ष वैध सरलीकरण का एक गुच्छा है जो एक अमान्य सामान्यीकरण है। यह इतना बढ़ा हुआ है कि यह मूल रूप से इसके शीर्ष पर स्रोत नियंत्रण को लागू करने की अपेक्षा करता है, जैसा कि रेपो करता है।

दूसरी चीज प्रतिकृति है। Git में, कुछ भी संभव है इसलिए आपको इसे अपने लिए जानना होगा। पेरफोर्स में, आपको प्रभावी रूप से स्टेटलेस कैश मिलता है। केवल कॉन्फ़िगरेशन को यह जानना आवश्यक है कि मास्टर कहाँ है, और ग्राहक अपने विवेक पर मास्टर या कैश में से किसी पर भी इंगित कर सकते हैं। यह पाँच मिनट का काम है और यह गलत नहीं हो सकता।

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

सब सब में, मुझे लगता है कि यदि आप जानते हैं कि आप एक केंद्रीकृत तरीके से काम करने जा रहे हैं, जो हर कोई करता है, तो आप एक उपकरण का उपयोग कर सकते हैं जो उस के साथ डिजाइन किया गया था। लिटस की डरावनी बुद्धि के साथ-साथ भेड़ की तरह चारों ओर एक-दूसरे का पालन करने की प्रवृत्ति के कारण गिट को ओवररेटेड किया गया है, लेकिन इसका मुख्य कारावास डेट्रे वास्तव में सामान्य ज्ञान के लिए खड़ा नहीं है, और इसका पालन करते हुए, गिट अपने हाथों से संबंध रखता है। दो विशाल हठधर्मियाँ (ए) सॉफ्टवेयर और (बी) डेटा दोनों क्लाइंट और सर्वर पर समान होना चाहिए, और यह हमेशा इसे जटिल बना देगा और केंद्रीकृत नौकरी में लंगड़ा होगा।


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

2
"हम वास्तव में उस पुराने सामान के साथ क्या करना चाहते हैं, इसे एक अलमारी में रखा जाता है और यह भूल जाते हैं कि यह वहीं है, जैसे कोई सामान्य वीसीएस करता है। यह तथ्य कि यह सब हर दिन नेटवर्क पर आगे और पीछे घूमता है, बहुत खतरनाक है।" क्योंकि यह आपको चुभता है। " • क्या आपने वास्तव में गिट का इस्तेमाल किया है? Git आपको अपने रेपो को चुभाने के लिए नहीं बनाता है। इसके अलावा, Git का डेटा कम्प्रेशन बेहद कुशल है; Git repo के लिए यह असामान्य नहीं है - जटिल शाखा इतिहास के साथ-एक ही कोडबेस की SVN वर्किंग कॉपी (इतिहास के बिना) की तुलना में काफी छोटा होना।
मर्नेन लाईबो-कोसर

4
"हर सामान्य वीसीएस सभी के लिए इतिहास को फिर से लिखना असंभव बनाता है, लेकिन यह सुनिश्चित करता है कि प्रवेशकर्ताओं के पास इस पर विचार करने का कोई कारण नहीं है। मुझे गलत होने पर सही करें, लेकिन जहां तक ​​मुझे पता है, git सामान्य उपयोगकर्ताओं को अनुदान देने का कोई तरीका नहीं प्रदान करता है। एक्सेस करें लेकिन उन्हें इतिहास को फिर से लिखने से प्रतिबंधित करें। इसका मतलब है कि कोई भी डेवलपर जिसके पास ग्रज है (या जो अभी भी सीखने की अवस्था से जूझ रहा है) पूरे कोडबेस को मिटा सकता है। " • आप 100% गलत हैं। रेपो को बल-धक्का देना आसान है, जबकि यह अभी भी लिखने की अनुमति देता है। इसके अलावा, हर किसी के पास रेपो की जितनी मात्रा हो, उतने की प्रतिलिपि हो सकती है, इसलिए ट्रैशिंग काम नहीं करेगा।
मर्नेन लाईबो-कोसर

3
"गिट कहते हैं कि ब्रांचिंग हल्की होनी चाहिए, लेकिन कई कंपनियों के पास पहले से ही एक गंभीर दुष्ट शाखा की समस्या है, इसलिए मैंने सोचा होगा कि ब्रांचिंग सख्त पुलिसिंग के साथ एक महत्वपूर्ण निर्णय होना चाहिए। यही वह जगह है जहां वास्तव में चमकता है ..." • एक क्या है "दुष्ट शाखा समस्या"? आपको क्या लगता है कि ब्रांचिंग एक "महत्वपूर्ण निर्णय" होना चाहिए? व्यवहार में, प्रत्येक नई सुविधा या प्रयोग के लिए शाखाएं (निजी या सार्वजनिक) बनाने में सक्षम होना वास्तव में उपयोगी है, ताकि प्रत्येक व्यक्ति अपने स्वयं के वैकल्पिक ब्रह्मांड में रहता हो। इसके विपरीत, एसवीएन, गिट, विलय को आसान बनाता है ताकि यह बहुत अच्छी तरह से काम करे।
मर्नेन लाईबो-कोसर

3
तथ्य यह है कि इस जवाब में केवल एक ही खदान से अलग है (जाहिरा तौर पर @ मर्नेन) ने मुझे अचरज दिया कि यह उत्तर कितना गलत है।
वैकल्पिक

-8

खराब कोड लाइन प्रबंधन के विकल्प के रूप में जीआईटी का उपयोग करना आम है। पेरफोर्स के कई नुकसान खराब ब्रांचिंग रणनीतियों का एक परिणाम हैं। किसी भी अन्य केंद्रीकृत उपकरण के लिए भी यही है। अगर आपको एक टन ब्रांच बनानी है तो आप कुछ गलत कर रहे हैं। डेवलपर्स को इतनी सारी शाखाएँ बनाने की आवश्यकता क्यों है?

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


9
कुछ डेवलपर्स शाखाओं को बनाना पसंद करते हैं ताकि वे आसानी से अलग-अलग विकास और खंडों को अलग कर सकें, प्रोटोटाइप, बग फिक्स आदि अक्सर काम के प्रकार पर निर्भर करते हैं। Git और Mercurial शाखाओं की तुलना में प्रबंधित करने के लिए Perforce शाखाएं काफी भारी हैं, और इसलिए कुछ वास्तविक उत्पादकता सुधार किए जा सकते हैं।
ग्रेग व्हिटफील्ड

8
डिस्कनेक्ट करने की क्षमता हमेशा ट्रेन या विमान पर काम करने के विचार से संबंधित नहीं होती है। कुछ कंपनियों के पास विश्वसनीय नेटवर्किंग अवसंरचना नहीं हो सकती है। या आप आउटेज, सर्वर मेंटेनेंस, जनरल कॉकअप आदि प्राप्त कर सकते हैं, लेकिन डिस्कनेक्ट होने में सक्षम होने का साइड इफेक्ट यह है कि आपके सोर्स कंट्रोल ऑपरेशन सिस्टम की तुलना में तेजी से अंधाधुंध होते हैं जो कुछ भी करने के लिए नेटवर्क राउंड ट्रिप पर भरोसा करते हैं।
ग्रेग व्हिटफील्ड

6
मेरे अनुभव में, लोगों को नियंत्रित करने के लिए प्रक्रिया का उपयोग करना पहली जगह में एक खराब वर्कफ़्लो डिज़ाइन का संकेत है। लोगों को उत्पादक बनाए रखने के लिए वर्कफ़्लो मौजूद होना चाहिए। यदि इसका उपयोग नहीं किया जा रहा है, तो इसमें कुछ गड़बड़ है, क्योंकि सामान्य तौर पर, लोग बेवकूफ नहीं हैं और यदि वे इसके साथ आते हैं तो एक बेहतर उपकरण का उपयोग करेंगे।
कार्ल

6
डाउनवोटिंग के कारण "यदि आपको एक टन शाखाएं बनानी हैं तो आप कुछ गलत कर रहे हैं।" यह एक केंद्रीकृत वीसीएस में अपर्याप्त विलय के उपकरण (जैसे कि एसवीएन या सीवीएस - कभी भी इस्तेमाल किया गया पेरिफेरल) के साथ सच हो सकता है। यह Git में सच नहीं है, जहां शाखाकरण और विलय आसान और आम है। यह विकास के तहत प्रत्येक सुविधा के लिए एकीकरण तक अपने स्वयं के वैकल्पिक ब्रह्मांड में रहने की स्वतंत्रता देता है। व्यक्तिगत रूप से, मैं कभी भी ऐसे माहौल में नहीं जाऊँगा जहाँ मैं कानाफूसी नहीं कर सकता
मार्नेन लाईबो-कोसर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.