सहयोग के लिए संस्करण नियंत्रण (शब्द-स्तर के अंतर के साथ)?


20

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

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

यदि नहीं, तो मैं अन्य सुझावों का स्वागत करूँगा जो अनुभव पर आधारित हैं (कृपया अटकलों से बचें, कृपया)।

मैं Git, Subversion, Mercurial, darcs, या Bazaar के बारे में सोच रहा था, जिसे wdiff के साथ शब्द-स्तर के अंतर को संभालने के लिए सेट किया गया था, साथ में सार्वजनिक कुंजी (उदाहरण के लिए ssh) द्वारा सुरक्षित एक्सेस सेट करने का एक सरल तरीका भी था। हालाँकि, संस्करण नियंत्रण प्रदाताओं में से कोई भी जो मैंने देखा था वह ऐसा कुछ भी प्रदान करता है। वैज्ञानिक सहयोग के लिए इनमें से कई कंपनियों द्वारा जोर दिए गए "उद्यम" विशेषताएं बहुत महत्वपूर्ण नहीं हैं (शाखाओं के बहुत सारे, टीआरसी के साथ एकीकरण, तृतीय पक्षों द्वारा ऑडिटिंग, पदानुक्रमित परियोजना दल)। लेकिन शब्द-स्तर भिन्न अभी भी असमर्थित प्रतीत होते हैं। मेरे अनुभव में, टेक्स्ट फ़ाइलों के लिए लाइन-स्तर भिन्न होता है, हर किसी को उन पैराग्राफ और संपादकों को सुधारने से बचना पड़ता है जो टैब को रिक्त स्थान में बदलते हैं या इसके विपरीत समस्याएँ पैदा करते हैं; वहाँ भी कई गंभीर संपादन संघर्ष प्रतीत होते हैं।

सहयोग के लिए उपकरणों के बारे में MO पर संबंधित प्रश्न और TeX.SE पर संबंधित प्रश्न देखें, संस्करण नियंत्रण के लिए LaTeX दस्तावेजों और LaTeX संकुल के लिए संस्करण नियंत्रण के बारे में । होस्टिंग प्रदाताओं की एक बड़ी सूची के लिए एसवीएन होस्टिंग तुलना समीक्षा चार्ट भी देखें , मुख्य संस्करण नियंत्रण प्रणालियों में से केवल एक के लिए।


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


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

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

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

2
@ और मेरा कहना यह था कि वीसी सिस्टम को केवल क्लाइंट पर दो संशोधनों को फिर से बनाने में सक्षम होना चाहिए, और आश्चर्यजनक रूप से सभी वीसी सिस्टम ऐसा नहीं कर सकते। तब आपको जो चाहिए वह एक शब्द-स्तरीय तीन-तरफा मर्ज की उपयोगिता है, लेकिन मुझे इसका कोई पता नहीं है। (उदाहरण के लिए, TortoiseMerge और kdiff3 दोनों लाइन-आधारित हैं।) एक बार जब आपके पास इस तरह की उपयोगिता होती है, तो कोई वीसी सिस्टम जो आपको बाहरी विलय की उपयोगिता निर्दिष्ट करने की अनुमति देगा, पर्याप्त होगा। (जिसमें svn, bzr, git, hg ...) शामिल हैं
मेवरिक वू

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

जवाबों:


11

मैंने लेटेक्स में लिखे कुछ दस्तावेजों पर सहयोग करने के लिए git का उपयोग किया है। आपको कुछ नियमों का पालन करना होगा:

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

आप तब शब्द अंतरों का उपयोग कर सकते हैं git diff --color-wordsऔर gitk --color-wordsदेख सकते हैं (यह आलेख भी देखें कि शब्द-दर-शब्द शब्द Git पर अलग-अलग होता है, git को हमेशा कॉन्फ़िगर करने के लिए git diff / git log प्रदर्शित करने के लिए शब्द-अलग एल्गोरिथ्म का उपयोग कैसे करें)।

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


मैं अपने स्वयं के दस्तावेजों के लिए ऐसा करने पर विचार करूंगा, यह मेरे अधिकांश लक्ष्यों को प्राप्त करने का एक आसान तरीका है। लेकिन हर कोई इस तरह से काम करने का इच्छुक नहीं है ...
एन्द्रिस सलामोन

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

कुल मिलाकर, मैं मानता हूँ कि git एक अच्छा विकल्प है। लेकिन (उप) वर्गों के लिए अलग-अलग फाइलें मैन्युअल मर्ज की संख्या को कम क्यों कर सकती हैं? मुझे यह भी आश्चर्य है कि एक नई पंक्ति पर प्रत्येक वाक्य को शुरू करने से कैसे मदद मिलती है (कभी-कभी वाक्य संपादन की प्रक्रिया में मिश्रित होते हैं)।
dd1

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

4

2
दुर्भाग्यवश इन दस्तावेजों में "सर्वोत्तम प्रथाओं" ठीक प्रकार की चीजें हैं जो एक सहयोगी पर मजबूर नहीं कर सकती हैं।
आंद्र सलामन

4

मैं वास्तव में दूसरों को प्रतिध्वनित करना चाहता हूं और सुझाव देना चाहता हूं कि आप एक अच्छी एसवीएन रणनीति तैयार करें। मैं अपनी संपूर्ण "शोध" संरचना की मेजबानी के लिए SVN का उपयोग करता हूं:

  • JabRef संदर्भ प्रबंधन
  • पीडीएफ डाउनलोड किया
  • सामग्री

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

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

फिर, एक सहयोगी के साथ काम करते समय, उन्हें स्पष्ट रूप से एसवीएन का उपयोग करना चाहिए। लेकिन, फिर से, सीखने में निवेश बेकार नहीं है। और कुछ विचार के माध्यम से, आपके पास यह भी हो सकता है ताकि आपके पास उनके jabref फ़ाइल (शायद svn में 'बाहरी' सुविधा के माध्यम से) का उपयोग हो।

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

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

- संपादित करें: वास्तव में, मैंने इस तरह के प्रस्ताव को यहां लिखा है: LaTeX और SVN के साथ वैज्ञानिक सहयोग के लिए रणनीति । यह एक समान सेटअप वाले लोगों के बीच आसान सहयोग की अनुमति देने के लिए svn बाह्य उपकरणों की सुविधा का उपयोग करने का प्रस्ताव करता है । मुझे पता है कि यह बदलने की जरूरत है या बस उचित नहीं है।


4

अपने महान पद को पढ़ते हुए और स्वयं एक समाधान की तलाश करते हुए, मैं gitk में शब्द स्तर पर परिवर्तनों को चित्रित करने के विकल्प में ठोकर खाई । Gitk पैरामीटर लगता है कि एक नया और / या अनिर्दिष्ट फीचर है क्योंकि ऑटो-पूर्ति इसे प्रदान नहीं करता है और gitk मैन पेज इसे सूचीबद्ध नहीं करता है।
यहाँ विकल्प हैं जो मुझे मिले:

gitk --word-diff=plain
gitk --word-diff=porcelain
gitk --word-diff=color

आप "diff --color-words" gitk को खोजते हुए उस विषय पर कई चर्चाएँ पा सकते हैं ।

संपादित करें:
यह वही है जो दिखता है ...

गीटैक का उपयोग करते हुए शब्द-स्तर पर भिन्नता


1

मैं समस्या को बहुत अच्छी तरह से समझता हूं। मैंने git के साथ diffs के लिए Kaleidoscope का उपयोग शुरू कर दिया है । यह केवल मैक है, लेकिन इसकी तुलना wdiff से बेहतर है, और इसमें एक इंटरफ़ेस और लाइव अपडेट भी है।


2
मेरे लिए ऐसा लगता है कि कैलीडोस्कोप सिर्फ एक लाइन-आधारित अंतर उपकरण है, जो इसके अलावा, प्रत्येक लाइन के अंदर परिवर्तन को उजागर करता है। यह wdiff और दोस्तों के लिए एक प्रतिस्थापन नहीं है। यदि आप, उदाहरण के लिए, कैलीडोस्कोप अपठनीय भिन्नता उत्पन्न करते हैं, तो बस पाठ का एक पैराग्राफ लें और कुछ पंक्ति विराम बदलें। Wdiff- आधारित टूल केवल लाइन ब्रेक में परिवर्तन को अनदेखा करते हैं।
जुका सुओमेला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.