2010-05-12 17 views
63

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

जिसका अर्थ है कि सीमित संस्करण नियंत्रण संभव है - काम करता है और रोलबैक ठीक काम करता है। विलय, हालांकि, आपदा है। मैथमैटिका इसमें विलय मार्कर के साथ एक फ़ाइल नहीं खुलती है, और एक टेक्स्ट एडिटर एक .nb फ़ाइल के माध्यम से जाने का कोई तरीका नहीं है।

क्या किसी के पास संस्करण नियंत्रण के तहत नोटबुक डालने की कोई किस्मत है? कैसे?

+0

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

+0

यहां गणित से परिचित नहीं हैं - क्या .nb फ़ाइलें स्वचालित रूप से जेनरेट की जाती हैं? यदि हां, तो उन्हें संस्करण नियंत्रण में न रखें। – hasen

+0

@ हसन जे: .nb फ़ाइलें पूरी तरह से स्वत: उत्पन्न नहीं हैं लेकिन उनमें ऑटो-जनरेटेड मेटा-डेटा है। मुझे लगता है कि माइकल पिलट का जवाब अब इस पर भ्रम को दूर करता है। – dreeves

उत्तर

43

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

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

ध्यान दें कि यह खोलने वाली नोटबुक को थोड़ा धीमा कर सकता है, लेकिन जब तक नोटबुक बड़ा नहीं होता है, तो संभवतः आप अंतर को ध्यान में नहीं रखेंगे।

+0

धन्यवाद! मेरी पूरी समस्या को हल नहीं करता है, लेकिन यह मुझे वहां से अधिकतर तरीके से प्राप्त करता है - मैं केवल वास्तविक सेल सामग्री को मर्ज करने से बचने की कोशिश करता हूं, और यदि आवश्यक हो तो टेक्स्ट एडिटर में इसके माध्यम से स्लॉग करता हूं। :) – Etaoin

+6

एक और विकल्प जिसे आप अक्षम करना चाहते हैं TrackCellChangeTimes – krawyoti

+5

भी उपयोगी है 'सेल -> सभी आउटपुट हटाएं' और 'नोटबुक इतिहास' मेनू विकल्प। पैकेज 'AuthorTools' में 'NotebookDiff' है जिसे VCS के diff कमांड में लगाया जा सकता है। अंत में, टिम विचमान द्वारा – Simon

0

यदि आपको स्रोत नियंत्रण प्रणाली एकाधिक उपयोगकर्ताओं द्वारा एकल पंक्ति में परिवर्तन का पता लगाती है तो आपको केवल मार्गे मार्कर मिलना चाहिए।

स्रोत नियंत्रण प्रणाली मार्करों को जोड़ती है ताकि यह सुनिश्चित किया जा सके कि संघर्ष कहां हैं, और उन्हें मैन्युअल रूप से हटाने के लिए मजबूर करने के लिए (जैसे आप प्रत्येक संघर्ष को हल करते हैं)। स्रोत नियंत्रण प्रणाली के लिए यह जानने का कोई तरीका नहीं है कि यह आपके लिए स्वचालित रूप से कैसे करें।

यदि फ़ाइल टेक्स्ट है, लेकिन केवल एक प्रोग्राम द्वारा पढ़ने के लिए डिज़ाइन किया गया है, तो इसमें लाइन वर्णों का कोई अंत नहीं हो सकता है (या बहुत लंबी लाइनें)। इसलिए यदि कई लोग ऐसी फाइल पर काम कर रहे हैं तो आपको कई मर्ज विवाद मिलेगा।

मैं एनबी फ़ाइल प्रारूप से परिचित नहीं हूं, लेकिन आम तौर पर इस समस्या का समाधान यह सुनिश्चित करना है कि एक समय में केवल एक व्यक्ति फ़ाइल पर काम कर रहा हो (यानी एनबी फाइलों के लिए एक विशेष चेक-आउट मोड का उपयोग करें) ।

+3

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

6

आपकी विलय की समस्या का बिल्कुल समाधान नहीं है, लेकिन इस तरह हम अपनी टीम में नोटबुक और स्रोत नियंत्रण को संभालने का तरीका बनाते हैं। असल में, हम गणित नोटबुक का इलाज करते हैं जिस तरह से हम बाइनरी फाइलों का इलाज करेंगे। वे चेक-इन किया है, लेकिन:

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

हम ज्यादातर छोटे सबूत, खोजों और sidetracks के लिए मेथेमेटिका उपयोग करती हैं इसलिए उपरोक्त प्रक्रिया हमारे लिए ठीक काम करता है (हमारे मुख्य प्रलेखन LaTeX, जिसके लिए गैर गणितज्ञों दोस्ताना प्रलेखन पैदा करता है/नान प्रोग्रामर्स)

3

साइमन और केना कह रहे थे कि जब मैथमैटिका .nb संस्करण नियंत्रण में है, तो मैं अक्सर इनपुट कोड का सादा-पाठ संस्करण बना देता हूं और इसे उसी नाम से बचाता हूं लेकिन एक .txt एक्सटेंशन। हालांकि यह विलय की समस्या को सीधे हल नहीं करता है, यह उचित तरीके से काम करता है और मैन्युअल रूप से .nb के बाद संपादित करने के लिए वापस जाने पर मैन्युअल रूप से विलय कर देता है। इस प्रारूप में अभी भी कुछ idiosyncrasies हैं, लेकिन कच्चे .nb प्रारूप से पढ़ने के लिए यह बहुत आसान है।

टेक्स्ट फ़ाइल जेनरेट करने के लिए, मैं सिर्फ नोटबुक को एक नई खाली नोटबुक (शॉर्टकट्स, Ctrl-A, C, N, V ​​के साथ) में कॉपी करता हूं, मेनू सेल-> सभी आउटपुट हटाएं, परिणाम कॉपी करें (Ctrl -ए, सी), और परिणाम को सहेजने के लिए एक सादे पाठ संपादक में पेस्ट करें। एक बार जब आप इसे लटका लेंगे तो आश्चर्यजनक रूप से थोड़ा समय लगता है।

1

ठीक है, मेरा समाधान ट्रैकिंग के लिए नोटबुक का उपयोग नहीं कर रहा है, लेकिन सादा पाठ फ़ाइलों का उपयोग नहीं कर रहा है ("नोटबुक" सादा पाठ नहीं)।

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

संदर्भ: http://www.topbug.net/blog/2013/05/02/track-mathematica-source-files-with-version-control-systems/

10

वहाँ कैसे Git का उपयोग करने के Mathematica Stack Exchange पर मेथेमेटिका साथ संस्करण नियंत्रण करने के लिए सिफारिशों का एक अच्छा सेट है। संक्षेप में, दर्शन .nb नोटबुक के उपयोग को कम करने के लिए है, और .m संकुल के साथ अधिकांश संस्करण नियंत्रण करने का प्रयास करें (जैसा कि xuhdev और एमएमए उपयोगकर्ता ऊपर बताते हैं)। नोटबुक प्रबंधित किए जाने के तरीके के कारण यह काफी समझदार लगता है।

1

mathematica-notebook-filter का उपयोग करने की एक नई संभावना है जो गणित नोटबुक पार्स करती है और सभी आउटपुट सेल और मेटाडेटा को स्ट्रिप्स करती है ताकि ये संस्करण नियंत्रण प्रणाली में प्रतिबद्ध न हों।

गिट के विशिष्ट मामले में, mathematica-notebook-filter को एकीकृत करना काफी आसान है ताकि gitattribute filters के उपयोग के माध्यम से भिन्नता की गणना करते समय गिट स्वचालित रूप से आउटपुट और मेटाडेटा को साफ़ कर सके।

*.nb filter=dropoutput_nb 

इसमें सभी फ़ाइलें पार्स करने के लिए Git का निर्देश: आप (या बाइनरी में बात करने के लिए नीचे दिए गए विन्यास अनुकूलन) और अपने ~/.gitattributes फ़ाइल में निम्न पंक्ति जोड़ने mathematica-notebook-filter फिल्टर स्थापित करने और अपने पथ वैरिएबल को जोड़ा गया है की आवश्यकता होगी dropoutput_nb फिल्टर जिसमें परिभाषित किया गया है के साथ *.nb मिलान अपने ~/.gitconfig के रूप में:

[filter "dropoutput_nb"] 
    clean = mathematica-notebook-filter 
    smudge = cat 

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

notebook_file.nb !filter 

अस्वीकरण: मैं इस उपकरण के लेखक हूँ। यह खुला स्रोत और प्रतिक्रिया (दोनों अच्छे और बुरे) की सराहना की जाती है। योगदान Github पर आपका स्वागत है।

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