git + LaTeX वर्कफ़्लो


270

मैं LaTeX में एक बहुत लंबा दस्तावेज़ लिख रहा हूँ। मेरे पास मेरा काम कंप्यूटर और मेरा लैपटॉप है, और मैं उन दोनों पर काम करता हूं। मुझे सभी फाइलों को दो कंप्यूटरों के बीच समन्‍वयित रखने की जरूरत है, और एक संशोधन इतिहास भी रखना चाहूंगा। मैंने अपने DVCS के रूप में गिट को चुना, और मैं अपने सर्वर पर अपनी रिपॉजिटरी की मेजबानी कर रहा हूं। मैं संपादन करने के लिए Kile + Okular का भी उपयोग कर रहा हूं। Kile में एकीकृत git प्लगइन नहीं है। मैं इस पाठ पर किसी के साथ भी सहयोग नहीं कर रहा हूं। मैं कोडैसेट पर एक और निजी रिपॉजिटरी लगाने के बारे में भी सोच रहा हूं, अगर किसी कारण से मेरा सर्वर सुलभ नहीं है।

इस मामले में अनुशंसित वर्कफ़्लो अभ्यास क्या है? इस कार्य योजना में शाखा कैसे लगाई जा सकती है? क्या एक ही फ़ाइल के दो संस्करणों की तुलना करने का कोई तरीका है? स्टैश का उपयोग करने के बारे में क्या?

जवाबों:


390

आपके LaTeX वर्कफ़्लो में परिवर्तन:

Git + लेटेक्स वर्कफ़्लो को कुशलतापूर्वक प्रबंधित करने का पहला चरण आपकी LaTeX आदतों में कुछ बदलाव करना है।

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

    एक समाधान का उपयोग करना है git diff --color-words( एक समान प्रश्न के लिए मेरा जवाब देखें जहां मैं एक उदाहरण दिखाता हूं)। हालांकि, मुझे इस बात पर जोर देना चाहिए कि अलग-अलग लाइनों में विभाजित करना एक बेहतर विकल्प है (मैंने केवल उस उत्तर में इसे पारित करने का उल्लेख किया है), क्योंकि मैंने इसे बहुत कम मर्ज संघर्षों के परिणामस्वरूप पाया है।

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

    दूसरी ओर, यदि आपको अपने स्वरूपित आउटपुट के अंतर को देखने की आवश्यकता है, तो उपयोग करें latexdiffजो एक उत्कृष्ट उपयोगिता है (पर्ल में लिखा गया है) जो दो लेटेक्स फ़ाइलों को लेता है और इस तरह से पीडीएफ में एक साफ अलग आउटपुट उत्पन्न करता है ( छवि स्रोत ):

    आप को जोड़ सकते हैं gitऔर latexdiff(प्लस latexpandयदि आवश्यक हो) का उपयोग करते हुए एक भी आदेश में Git-latexdiff (जैसे git latexdiff HEAD^अपने worktree और के बीच अंतर को देखने के लिए पिछले के बाद वाला प्रतिबद्ध)।

  • यदि आप लेटेक्स में एक लंबा दस्तावेज़ लिख रहे हैं, तो मैं विभिन्न अध्यायों को अपनी फाइलों में विभाजित करने का सुझाव दूंगा और उन्हें \include{file}कमांड का उपयोग करके मुख्य फ़ाइल में कॉल करूंगा । इस तरह से आपके लिए अपने काम के स्थानीयकृत हिस्से को संपादित करना आसान है, और यह संस्करण नियंत्रण के लिए भी आसान है, क्योंकि आप जानते हैं कि प्रत्येक अध्याय में क्या बदलाव किए गए हैं, इसके बजाय एक बड़े के लॉग से पता लगाने के लिए फ़ाइल।

कुशलता का उपयोग करना:

  • शाखाओं का उपयोग करें! । शायद कोई बेहतर सलाह नहीं है जो मैं दे सकता हूं। मैंने पाठ के लिए या "अलग-अलग राज्यों" के कार्यों के लिए "विभिन्न विचारों" का ट्रैक रखने के लिए शाखाओं को बहुत उपयोगी पाया है। masterशाखा सभी शाखाओं की अगर राज्य यानी "प्रकाशन के लिए तैयार", है, अगर वहाँ एक है कि आप इस पर आपके नाम डाल करने के लिए तैयार हैं, यह मास्टर शाखा होना चाहिए इसकी सबसे वर्तमान में, काम के अपने मुख्य शरीर होना चाहिए।

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

  • मैं प्रत्येक खंड को एक अलग शाखा में विभाजित करने का सुझाव भी दूंगा और उस शाखा के अनुरूप केवल उस खंड पर ध्यान केंद्रित करूँगा जो आप कर रहे हैं। जब आप अपनी प्रारंभिक प्रतिबद्ध (अपनी पसंद, वास्तव में) बनाते हैं, तो एक नई शाखा या डमी अनुभाग बनाते समय एक शाखा को रखें। जब आप इसकी शाखा पर नहीं हों, तो किसी भिन्न अनुभाग (जैसे, 3) को संपादित करने के आग्रह का विरोध करें। यदि आपको संपादित करने की आवश्यकता है, तो यह एक करें और फिर ब्रांच करने से पहले दूसरे को चेकआउट करें। मुझे यह बहुत मददगार लगता है क्योंकि यह खंड का इतिहास अपनी शाखा में रखता है और आपको एक नज़र में (पेड़ से) यह भी बताता है कि कुछ खंड कितना पुराना है। शायद आपने धारा 3 में ऐसी सामग्री जोड़ दी है, जिसके लिए धारा 5 से जुड़ने की आवश्यकता होती है ... बेशक, ये सभी संभावनाएँ, सावधानीपूर्वक पढ़ने के दौरान देखी जाएंगी, लेकिन मुझे यह एक नज़र में देखने के लिए उपयोगी लगता है ताकि मैं कर सकूं शिफ्ट गियर अगर मैं '

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

    यहां छवि विवरण दर्ज करें

  • ऐसा करने के लिए एक और उपयोगी बात दस्तावेज़ विस्तृत परिवर्तन (जैसे बदलते रूप में बनाने के लिए किया जाएगा \alphaकरने के लिए \betaअपने दम पर करता हर जगह)। इस तरह, आप इसके साथ कुछ और रोलबैक किए बिना बदलावों को वापस कर सकते हैं (ऐसे तरीके हैं जो आप गिट का उपयोग करके ऐसा कर सकते हैं, लेकिन हे, अगर आपका इससे बच सकते हैं, तो क्यों नहीं?)। वही प्रस्ताव के लिए परिवर्धन के लिए चला जाता है।

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


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

1
मैं इसी तरह के दृष्टिकोण का उपयोग करता हूं, लेकिन आप आंकड़े या अन्य बाइनरी फ़ाइलों को कैसे संभालते हैं, उन्हें भी संभाल सकते हैं या क्या फाइलों के लिए कोई अन्य दृष्टिकोण है जिसे संस्करण ट्रैकिंग के बिना रेपो में शामिल किया जाना चाहिए?
liborw

6
ये आसान युक्तियां हैं, सिवाय एक जिसका मैं उपयोग नहीं देखता: प्रति अनुभाग एक शाखा। आप प्रति-फ़ाइल के आधार पर आसानी से परिवर्तन देख सकते हैं, इसलिए क्यों अलगाव की एक अतिरिक्त परत जोड़कर वर्कफ़्लो की जटिलता बढ़ सकती है? git [log|show|add] some_file.texसभी काम, यहाँ निरंतर शाखा को जोड़ने की आवश्यकता नहीं है। यदि आप चाहें तो आप अभी भी प्रत्येक फ़ाइल को स्वयं कर सकते हैं।
रबनेव

1
@rubenvb यदि आप प्रत्येक खंड को अलग-अलग फ़ाइलों में विभाजित कर रहे हैं, तो हाँ। मैं आमतौर पर (और अकादमिक हलकों में बहुत से लोग) प्रति लेख केवल एक टेक्स फ़ाइल के साथ काम करते हैं। अलग-अलग फाइलें पुस्तकों / थीस के लिए समझ में आती हैं, जहां प्रत्येक अध्याय में सामग्री का एक बड़ा हिस्सा होता है। बेशक, ये केवल सुझाव थे ... प्रत्येक को अपने वर्कफ़्लो के अनुरूप क्या टिप्स लेने चाहिए और अस्वीकार करना चाहिए :)
abcd

2
@yoda आह मैं देख रहा हूं। हाँ, तो यह समझ में आता है। मैं पत्रिकाओं पर कई टेक्सास फ़ाइलों को मजबूर करने के लिए वैसे भी ;-)।
रबनेव

12

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

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

मैंने आपके द्वारा ऊपर वर्णित प्रणाली बनाने के लिए ड्रॉपबॉक्स और गिट का भी उपयोग किया है। आप अपने ड्रॉपबॉक्स फ़ोल्डर में एक नंगे हड्डियों का भंडार बना सकते हैं। फिर आप सभी छोरों पर अद्यतित रहने के लिए अपने ड्रॉपबॉक्स पर कंप्यूटर से या तो धक्का / खींच सकते हैं। यह प्रणाली आमतौर पर केवल तब काम करती है जब सहयोगियों की संख्या कम होती है क्योंकि भ्रष्टाचार की संभावना होती है अगर लोग एक ही समय में ड्रॉपबॉक्स रेपो पर धकेलने की कोशिश करते हैं।

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


3
बस ध्यान दें कि एक ही समय में कई पत्रिकाओं / सम्मेलनों के लिए सहकर्मी समीक्षा के लिए एक पेपर प्रस्तुत करना आमतौर पर नैतिक नहीं माना जाता है!
सुपरस्टार

7

मैंने इसे बैश फ़ंक्शन के रूप में लागू करने का प्रयास किया, मैंने ~/.bashrcइसे हमेशा उपलब्ध बनाने के लिए इसे अपने में शामिल किया है।

function git-latexdiff {    
    if [[ $# != 2 ]];    
    then      
        printf "\tusage: git-latexdiff <file> <back-revision>  \n";    
    elif [[ $2 -lt 0 ]];     
    then     
        printf "\t<Back-revision> must be positive\n";   
    else      
        dire=$(dirname $PWD/$1);      
        based=$(git rev-parse --show-toplevel);      
        git show HEAD~$2:$(echo $dire| sed 's!'$(echo $based)'/!!')/$1 > $1_diff.tmp;      
        latexdiff $1 $1_diff.tmp > $1_diff.tex;      
        pdflatex $1_diff.tex;     
        okular $1_diff.pdf;      
        rm $1_diff*;   
    fi; 
}

ध्यान दें कि इस फ़ंक्शन latexdiffको इंस्टॉल करना होगा (और पथ पर पाया जाना चाहिए)। इसे खोजने के लिए pdflatexऔर यह भी महत्वपूर्ण है okular

सबसे पहले LaTeX को संसाधित करने का मेरा पसंदीदा तरीका है, इसलिए आप इसे latexभी अपना सकते हैं। दूसरा मेरा पीडीएफ रीडर है, मुझे लगता है कि आप evinceसूक्ति, या कुछ अन्य समाधान के तहत उपयोग करना चाहते हैं।

यह एक त्वरित संस्करण है, जिसे किसी एकल दस्तावेज़ को ध्यान में रखते हुए बनाया गया है, और ऐसा इसलिए है क्योंकि गिट के साथ, आप एक बहु फ़ाइल LaTeX दस्तावेज़ को ट्रैक करने में बहुत समय और प्रयास खो देंगे। आप इस कार्य को भी कर सकते हैं, लेकिन यदि आप चाहें, तो आप इसका उपयोग जारी रख सकते हैं\include


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

1
लेटेक्सडिफ को जिफ हेल्पर के रूप में इस्तेमाल करने का प्रस्ताव इस जवाबlatexdiff
जुलाडेन्स

"Gif helper", @juandesant से आपका क्या अभिप्राय है?
राफारेनो

1
क्षमा करें, @ राफेरिनो, मेरा मतलब था "गिट हेल्पर": एक गिट सहायक एक ऐसा उपकरण है जिसे कुछ कार्यों के लिए गिट द्वारा लागू किया जा सकता है। इस स्थिति में, यदि आप इसे ठीक से कॉन्फ़िगर latexdiffकरते हैं git diff, तो आप कमांड लाइन टूल का उपयोग कर सकते हैं ।
जूनाडेसेंट

3

एक अन्य विकल्प ऑथरिया का उपयोग करना है जो वैज्ञानिक पत्रों के लिए कुछ प्रकार का गितब है। ऑथोरिया का हर लेख Git repo है। और आपके द्वारा बनाया गया LaTeX HTML5 (और साथ ही पीडीएफ, जब आप संकलित करते हैं) तक पहुंच जाता है।


यह एक पुराना धागा है, और विचार को परिसर में सब कुछ होस्ट करना है। ऑथोरिया शांत है, लेकिन वह नहीं है जिसकी मुझे तलाश थी।
इवान

5
आपको यह स्पष्ट कर देना चाहिए कि आप
jelelb

0

संस्करण के लिए इसका उपयोग करें यदि आप खिड़कियों पर हैं, तो कोई किस्त नहीं है, बस एक साधारण batस्क्रिप्ट है यह पूरी तरह से windows10, mikon2l2 पर काम करता है:

https://github.com/redreamality/git-latexdiff

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.