Excel फ़ाइलों और SQL स्कीमा फ़ाइलों पर बेहतर दस्तावेज़ संस्करण नियंत्रण कैसे करें


99

मैं कई एक्सेल फ़ाइलों और SQL स्कीमा फ़ाइलों का प्रभारी हूं। मुझे इन फ़ाइलों पर बेहतर दस्तावेज़ संस्करण नियंत्रण कैसे करना चाहिए?

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

क्या बेहतर दस्तावेज़ संस्करण नियंत्रण करने के लिए कोई तरीका या अच्छा अभ्यास है?

वैसे, संपादक मुझे ईमेल के जरिए फाइलें भेजते हैं।


5
मैं इन एक्सेल फ़ाइलों को CSV फ़ाइलों में परिवर्तित कर सकता हूं, और फिर उन्हें git का उपयोग करके ट्रैक कर सकता हूं ताकि मैं संशोधन देखने के लिए अलग-अलग उपयोग कर सकूं। क्या कोई और अच्छा अभ्यास है?
मार्कस थॉर्नटन

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

जवाबों:


45

चूंकि आपने अपना प्रश्न टैग कर दिया है मुझे लगता है कि आप इसके लिए Git उपयोग के बारे में पूछ रहे हैं।

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

.xlsxयदि आप उन्हें विघटित करते हैं तो यह सच है। .xlsxफ़ाइलों को XML फ़ाइलों की निर्देशिकाओं को ज़िपित किया जाता है (देखें कि अपने आंतरिक उप-घटकों से वैध xlsx फ़ाइल को ठीक से कैसे इकट्ठा किया जाए? )। Git उन्हें बाइनरी के रूप में देखेगा जब तक कि विघटित न हो। .xlsxसंग्रह के अंदर व्यक्तिगत XML फ़ाइलों में परिवर्तनों को अनज़िप करना और ट्रैक करना संभव है ।

आप .xlsफ़ाइलों के साथ भी ऐसा कर सकते हैं , लेकिन यहाँ समस्या यह है कि .xlsप्रारूप द्विआधारी है, इसलिए आप इससे भिन्न अर्थ प्राप्त नहीं कर सकते। लेकिन आप अभी भी संशोधन इतिहास और विशिष्ट संस्करणों की जांच कर पाएंगे।


4
हाँ, मुझे पता है। मुझे लगता है कि SQL स्कीमों को ट्रैक करते समय git अच्छी है। एक्सेल फ़ाइलों (.xlsx और .xls) के लिए, क्योंकि वे बाइनरी फाइलें हैं, उन्हें git का उपयोग करके ट्रैक करना मुझे यह नहीं दिखा सकता है कि मानव परिप्रेक्ष्य में क्या संशोधित किया गया है। यह मैं भ्रमित कर रहा हूँ।
मार्कस थॉर्नटन

2
@MarcusThornton .xlsxXML है, इसलिए ठीक काम करना चाहिए। सामान्य तौर पर, दो .xlsफ़ाइलों की आसानी से तुलना करने का कोई तरीका नहीं है । आप शायद एक पूर्व-प्रतिबद्ध हुक जोड़ सकते हैं .csvजो इसके पास स्थित होगा और आप उन को अलग करने में सक्षम होंगे।
कीर्लगिन

86

मैंने यहां जो उत्तर लिखा है, उसे इस मामले में लागू किया जा सकता है। Xls2txt नामक टूल .xls फ़ाइलों से मानव-पठनीय आउटपुट प्रदान कर सकता है। तो संक्षेप में, आपको इसे अपनी .gitattributes फ़ाइल में रखना चाहिए:

*.xls diff=xls

और .git / config में:

[diff "xls"]
    binary = true
    textconv = /path/to/xls2txt

बेशक, मुझे यकीन है कि आप अन्य फ़ाइल प्रकारों के लिए भी इसी तरह के उपकरण पा सकते हैं, git diffकार्यालय के दस्तावेजों के लिए एक बहुत ही उपयोगी उपकरण बना सकते हैं । वर्तमान में मेरे वैश्विक .gitconfig में यही है:

[diff "xls"]
    binary = true
    textconv = /usr/bin/py_xls2txt
[diff "pdf"]
    binary = true
    textconv = /usr/bin/pdf2txt
[diff "doc"]
    binary = true
    textconv = /usr/bin/catdoc
[diff "docx"]
    binary = true
    textconv = /usr/bin/docx2txt

प्रो गिट पुस्तक में विषय पर एक अच्छा अध्याय है: 8.2 कस्टमाइज़िंग गिट - गिट एट्रीब्यूट्स


2
यह मेरे लिए windows7 पर काम नहीं करता है। मैंने यहां से विंडोज के लिए कैटडॉक वर्जन डाउनलोड किया है: blog.brush.co.nz/2009/09/catdoc-windows gitconfig और विशेषताओं को संपादित करने की तुलना में जैसा कि ऊपर वर्णित है। लेकिन मुझे अभी भी मिलता है: अंतर - a / src / रिपोर्ट / src / main / etc / टेम्पलेट्स / nbcu.xls b / src / रिपोर्ट / src / main / etc / टेम्पलेट्स / nbcu.xls सूचकांक 2432419..1daec86 100644 बाइनरी आदि फ़ाइलें a / src /.../ test.xls और b / src /.../ test.xls अलग-अलग GIT संस्करण: 1.7.6.msysgit.1
katrin

क्या यह अभी भी डॉक को डॉक फाइल या टेक्स्ट फाइल के रूप में स्टोर कर रहा है? यदि यह एक पाठ फ़ाइल है, तो आप डॉक्टर को कैसे पुनर्प्राप्त करते हैं?
CMCDragonkai

@CMCDragonkai फ़ाइल को कैसे संग्रहीत किया जाता है, इस पर कोई प्रभाव नहीं पड़ता है, केवल अलग कमांड का आउटपुट प्रभावित होता है।
1615903

1
तो यह अभी भी पूरी फाइल को स्टोर कर रहा है, न कि डिफरेंस?
CMCDragonkai

3
पुन: xls2txt: एक पोलिश वेबसाइट से एक बंद स्रोत उपकरण स्थापित करने के लिए बेहद अनिच्छुक। यह एक ही बात हो सकती है? github.com/hroptatyr/xls2txt कोई README हालांकि ...
jcollum

22

मैं पिछले कुछ दिनों से इस सटीक समस्या से जूझ रहा हूं और एक्सेल फाइलों को इस तरह से निकालने और सामान्य करने के लिए एक छोटी सी .NET उपयोगिता लिखी है ताकि वे सोर्स कंट्रोल में स्टोर करना ज्यादा आसान हो। मैंने यहाँ निष्पादन योग्य प्रकाशित किया है:

https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe

.. और यहाँ स्रोत:

https://bitbucket.org/htilabs/ooxmlunpack

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

  • किसी भी .xlsx और .xlsm फ़ाइलों के लिए फ़ोल्डर और उसके सबफ़ोल्डर्स को स्कैन करें
  • फ़ाइल की एक प्रति * .orig के रूप में लें।
  • प्रत्येक फ़ाइल को अनज़िप करें और बिना किसी संपीड़न के इसे फिर से ज़िप करें।
  • संग्रह में किसी भी फाइल को सुंदर-प्रिंट करें जो वैध एक्सएमएल हैं।
  • संग्रह से calcchain.xml फ़ाइल हटाएं (क्योंकि यह बहुत बदल जाता है और फ़ाइल की सामग्री को प्रभावित नहीं करता है)।
  • किसी भी विकृत पाठ मानों को इनलाइन करें (अन्यथा इन्हें लुकअप टेबल में रखा जाता है जो आंतरिक एक्सएमएल में बड़े बदलाव का कारण बनता है अगर एक भी सेल संशोधित हो)।
  • मानों को किसी भी सेल से हटाएं, जिसमें सूत्र शामिल हैं (क्योंकि वे केवल गणना की जा सकती हैं जब शीट अगली बार खोली जाती है)।
  • एक सबफ़ोल्डर बनाएं।।

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

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

परीक्षणों में, 21 एमबी के लिए एक 2 एमबी स्प्रेडशीट 'अनपैक', लेकिन फिर मैं 1.9 एमबी मर्क्यूरियल डेटा फ़ाइल में प्रत्येक के बीच छोटे बदलावों के साथ इसके पांच संस्करणों को संग्रहीत करने में सक्षम था, और परे संस्करणों के बीच के मतभेदों को प्रभावी ढंग से परे का उपयोग करके तुलना करें । पाठ मोड।

एनबी: हालांकि मैं मर्क्यूरियल का उपयोग कर रहा हूं, मैंने अपने समाधान पर शोध करते हुए यह प्रश्न पढ़ा और समाधान के बारे में कुछ भी विशिष्ट नहीं है, Git या किसी अन्य VCS के लिए ठीक काम करना चाहिए।


मैंने वास्तव में कोशिश नहीं की है, लेकिन मुझे लगता है कि - यदि आप ऐसा करते हैं तो यह जानना बहुत अच्छा होगा
जॉन जी

@JonG मैं लिब्रे ऑफिस के साथ काम नहीं कर सकता और बिटकॉइन रिपॉजिटरी में कोई इश्यू टैब नहीं है। अगर हमें कोई मुद्दा मिल सकता है तो मैं योगदान देना पसंद करूँगा!
क्रिस्चियन ड्राउलर

हाय @ क्रिश्चियन-ड्राउलर्स, मैंने रेपो पर समस्या को सक्षम किया है, वहां कुछ जोड़ने के लिए स्वतंत्र महसूस हो रहा है!
जॉन जी

@JonG यह बहुत अच्छा लग रहा है, एक अलग-सक्षम संस्करण इतिहास होने से दस्तावेज़ संबंधी परिदृश्यों में बहुत उपयोगी हो सकता है! लेकिन यह क्यों महत्वपूर्ण है कि फ़ाइल एक्सेल में खुलती है? क्या आप केवल .orig फ़ाइल का उपयोग नहीं कर सकते? और क्या आपको लगता है कि सामान्यीकरण विन्यास / गतिशील हो सकते हैं ताकि कोड को डॉकएक्स / पीपीटीएक्स के लिए भी इस्तेमाल किया जा सके?
जोर्जेन टेड्ट्ट r

10

Tante ने Git में जिप-आधारित फ़ाइल स्वरूपों को प्रबंधित करने में एक बहुत ही सरल दृष्टिकोण की सिफारिश की :

अपनी ~ / .gitconfig फ़ाइल खोलें (यदि पहले से मौजूद नहीं है तो बनाएं) और निम्नलिखित श्लोक जोड़ें:

[diff "zip"]
textconv = unzip -c -a

3
उसके बाद, पेंग जू ने केवल विस्तार में परिवर्तन के अलावा, ज़िप-आधारित फ़ाइलों को फ़िल्टर करने की अनुमति देते हुए समाधान को बढ़ाया: tante.cc/2010/06/23/managing-zip-based-file-formats-in-git/ …
रॉबर्टो कैबेलॉन

4

खुले दस्तावेज़ एक्सटेंशन का उपयोग करें .fods। यह एक सादा, असम्पीडित XML मार्कअप प्रारूप है जिसे एक्सेल और लिब्रे ऑफिस दोनों खोल सकते हैं, और अंतर अच्छे दिखेंगे।


2

हमने एक्सेल वर्कबुक के लिए एक ओपन-सोर्स गिट कमांड लाइन एक्सटेंशन बनाया है: https://www.xltrail.com/git-xltrail

संक्षेप में, मुख्य विशेषता यह है कि यह git diffकिसी भी कार्यपुस्तिका फ़ाइल स्वरूपों पर काम करता है ताकि यह कार्यपुस्तिका की VBA सामग्री पर अंतर दिखाता है (कुछ बिंदु पर, हम इस कार्य को कार्यपत्रक सामग्री के लिए भी बनाएंगे)।

अभी भी शुरुआती दिन हैं लेकिन इसमें मदद मिल सकती है।


और दो साल बाद यह अभी भी केवल VBA को संभालता है, जबकि कई अन्य समाधान पूरे स्प्रेडशीट को संभालते हैं। मैंने वास्तव में एक दशक में (या अधिक सही रूप से, एक स्प्रेडशीट की VBA सामग्री के बारे में परवाह नहीं की है, मैंने सक्रिय रूप से किसी भी ... से बचने की कोशिश की है)।
शुभ अंक

1

जैसा कि एक अन्य उत्तर की टिप्पणी में उल्लेख किया गया है, .xlsx फाइलें सिर्फ एक्सएमएल हैं।

XML निर्देशिका (जो कि git-able है) पर जाने के लिए, आपको .xlsx फ़ाइल को एक निर्देशिका में "अनज़िप" करना होगा। Windows पर यह देखने का एक त्वरित तरीका फ़ाइल का नाम बदलना है <फ़ाइल का नाम> .xlsx से <फ़ाइल का नाम>। ज़िप, और आप आंतरिक सामग्री देखेंगे। मैं इसे बाइनरी के साथ संग्रहीत करता हूं ताकि जब आप चेकआउट करें, तो आपको एक्सेल में दस्तावेज़ खोलने के लिए अन्य चरणों को करने की आवश्यकता नहीं है।


1
कम से कम जिप टूल जो मैं उपयोग करता हूं (7-ज़िप) सभी फाइलों को खोलने / निकालने की अनुमति देता है - आपको उनका नाम बदलने की आवश्यकता नहीं है।
ऑनूर

1

यह एक्सेल उपयोगिता मेरे लिए बहुत अच्छा काम करती है:

एक्सेल के लिए संस्करण नियंत्रण

यह वर्कबुक और वीबीए मैक्रोज़ के लिए काफी सरल संस्करण है। एक बार जब आप एक संस्करण बनाते हैं, तो यह आपके पीसी पर Git रिपॉजिटरी में सहेजा जाता है। मैंने इसे फिर कभी आजमाया नहीं। एसक्यूएल स्कीमा फाइलें, लेकिन मुझे यकीन है कि चारों ओर एक रास्ता है।


यह एकमात्र उपकरण है जो मैंने पाया है कि .xlsm फ़ाइलों में एम्बेडेड मॉड्यूल के साथ काम करता है। एकमात्र विकल्प जो मुझे पता है कि प्रत्येक मॉड्यूल को अपनी फ़ाइल में निर्यात करने के लिए एक मैक्रो चला रहा है, उन्हें कमिट कर रहा है, और फिर मैक्रो को चलाने और मर्ज करने के बाद उन सभी को फिर से आयात करने के लिए चला रहा है। xltrailउससे बहुत आसान है।
माइकल हॉफमन

0

एक्सेल फाइलों के साथ मेरा दृष्टिकोण जॉन के समान है, लेकिन कच्चे एक्सेल टेक्स्ट डेटा के साथ काम करने के बजाय मैं अधिक अनुकूल प्रारूपों में निर्यात करता हूं।

यहाँ वह टूल है जो मैं उपयोग करता हूँ: https://github.com/stenci/ExcelToGit/tree/master

आपको बस .xlsm फ़ाइल को डाउनलोड करना है ( इस पृष्ठ पर View Raw लिंक पर क्लिक करें ।) रीडमी में वर्णित एक्सेल सेटिंग की जाँच करना न भूलें। आप SQL डेटा को टेक्स्ट फ़ाइलों में निर्यात करने के लिए कोड भी जोड़ सकते हैं।

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

मेरे कार्य संस्करण को दर्जनों एक्सेल वर्कबुक से कॉन्फ़िगर किया गया है। मैं गैर-एक्सेल प्रोजेक्ट्स के लिए Git-gui खोलने के लिए भी फाइल का उपयोग करता हूं, बस हाथ से गिट फोल्डर जोड़ रहा हूं।

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