2009-12-15 19 views
12

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

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

+1

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

+2

गिट बाइनरी फाइलों का सामना करेगा, और सिस्टम जो * स्टोरेज * डेल्टा के लिए उपयोग करता है वह द्विआधारी सामग्री पर आधारित होता है (पैच में दिखाई देने वाले पाठ भिन्नता को फ्लाई पर गणना की जाती है, जो संग्रहीत की गई प्रस्तुति नहीं है)। ऐसा कहकर, संपीड़ित छवियों के लिए xdelta अंतरिक्ष आवश्यकता को कम करने की संभावना नहीं है। आप अपनी सभी छवियों को XPM या BMP के रूप में सहेज सकते हैं: p – araqnid

उत्तर

7

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

एक संभावित समाधान अभी भी अलग भंडार का उपयोग कर रहा है और इसे खींचते समय --depth विकल्प का उपयोग कर रहा है। शालो रिपॉजिटरीज़ में कुछ सीमाएं होती हैं, लेकिन मुझे याद नहीं है कि वास्तव में, क्योंकि मैंने कभी इसका इस्तेमाल नहीं किया था। दस्तावेज़ों की जांच करें। कीवर्ड "उथला" है।

संपादित: git-clone(1) से:

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

+1

यदि आप ऊपर दिए गए दस्तावेज़ उद्धरण को ध्यान में रखते हैं तो दिलचस्प है कि यह लगभग लगता है कि एक गैर वितरित वीसीएस बाइनरी डेटा के लिए बेहतर हो सकता है, क्योंकि आप गिट का उपयोग करने के सलाहकारों में से बहुत कुछ खो रहे हैं वैसे भी बाइनरी डेटा से निपटने। – Jamie

+1

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

2

दुर्भाग्यवश गिट वास्तव में बाइनरी डेटा संग्रहीत करने के लिए नहीं बनाया गया है। क्योंकि इसे वितरित किया जाता है, जब भी आप इसे क्लोन करते हैं तो आप सभी फ़ाइलों के सभी संस्करणों को खींचेंगे। यह आपके कोड भंडार से उन बड़ी बाइनरी फ़ाइलों को छीनने के लिए हास्यास्पद रूप से मुश्किल हो जाता है। इसके बारे में अधिक जानकारी: (http://www.somethingorothersoft.com/2009/09/08/the-definitive-step-by-step-guide-on-how-to-delete-a-directory-permanently-from-git-on-widnows-for-dumbasses-like-myself/)।

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

2

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

1

यहाँ GIT के साथ बड़े फ़ाइल भंडारण की चर्चा है: http://blog.deveo.com/storing-large-binary-files-in-git-repositories/

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

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