git - गिट के साथ बड़ी बाइनरी फाइलों का प्रबंधन




version-control large-files (8)

मैं बड़ी बाइनरी फाइलों को संभालने के तरीकों की तलाश में हूं जिन पर मेरा स्रोत कोड (वेब ​​एप्लिकेशन) निर्भर है। वर्तमान में हम कई विकल्पों पर चर्चा कर रहे हैं:

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

इसके बारे में आपके अनुभव / विचार क्या हैं?

इसके अलावा: क्या किसी को कई गिट भंडारों के साथ अनुभव है और उन्हें एक परियोजना में प्रबंधित करना है?

फाइलें ऐसे प्रोग्राम के लिए छवियां हैं जो पीडीएफ को उन फाइलों के साथ उत्पन्न करती हैं। फाइलें अक्सर नहीं बदलेगी (जैसे सालों में), लेकिन वे एक कार्यक्रम के लिए बहुत प्रासंगिक हैं। कार्यक्रम फाइलों के बिना काम नहीं करेगा।


मैं बड़ी बाइनरी फाइलों को संभालने के तरीकों की तलाश में हूं जिन पर मेरा स्रोत कोड (वेब ​​एप्लिकेशन) निर्भर है। इसके बारे में आपके अनुभव / विचार क्या हैं?

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

क्या किसी के पास कई गिट भंडारों का अनुभव है और उन्हें एक परियोजना में प्रबंधित करना है?

हाँ। ह्यूगो विषयों को मुख्य रूप से इस तरह से प्रबंधित किया जाता है। यह एक छोटी सी छोटी है, लेकिन यह काम पूरा हो जाता है।

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

विचार करने के लिए अतिरिक्त विकल्प में Minio और s3cmd


आप git-fat का भी उपयोग कर सकते हैं। मुझे पसंद है कि यह केवल स्टॉक पायथन और rsync पर निर्भर करता है। यह सामान्य गिट वर्कफ़्लो का भी समर्थन करता है, निम्नलिखित आत्म व्याख्यात्मक आदेशों के साथ:

git fat init
git fat push
git fat pull

इसके अतिरिक्त, आपको अपने संग्रह में एक .gitfat फ़ाइल में जांचना होगा और फ़ाइल एक्सटेंशन निर्दिष्ट करने के लिए अपने .gitattributes को संशोधित करना होगा, जिसे आप प्रबंधित करने के लिए git fat चाहते हैं।

आप सामान्य git add का उपयोग करके एक बाइनरी git add , जो बदले में आपके gitattributes नियमों के आधार पर git fat आह्वान करता है।

अंत में, इसका लाभ यह है कि जिस स्थान पर आपकी बाइनरी वास्तव में संग्रहीत की जाती हैं, उन्हें भंडारों और उपयोगकर्ताओं के बीच साझा किया जा सकता है और rsync कुछ भी करता है।

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


एसवीएन गिट की तुलना में बाइनरी डेल्टा को अधिक कुशलता से संभालने लगता है।

मुझे दस्तावेज़ीकरण के लिए एक संस्करण प्रणाली पर निर्णय लेना पड़ा (जेपीईजी फाइलें, पीडीएफ फाइलें, और .odt फाइलें)। मैंने बस एक जेपीईजी फ़ाइल जोड़ने और 90 डिग्री चार बार घूर्णन (बाइनरी डेल्टा की प्रभावशीलता की जांच करने के लिए) का परीक्षण किया। गिट का भंडार 400% बढ़ गया। एसवीएन का भंडार केवल 11% बढ़ गया।

तो ऐसा लगता है कि एसवीएन बाइनरी फाइलों के साथ अधिक कुशल है।

इसलिए मेरी पसंद स्रोत कोड के लिए गिट है और दस्तावेज जैसे बाइनरी फाइलों के लिए एसवीएन है।


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

टीएल; डीआर 12-01-2017 यदि आप जीथ्यूब के एलएफएस या किसी अन्य तीसरे पक्ष का उपयोग कर सकते हैं, तो आपको हर तरह से करना चाहिए। यदि आप नहीं कर सकते हैं, तो पढ़ें। चेतावनी दीजिये, यह समाधान एक हैक है और इसे इस तरह माना जाना चाहिए।

ओटीएबीएस की वांछनीय गुण

  • यह एक शुद्ध गिट और गिट केवल समाधान है - यह किसी भी तृतीय पक्ष सॉफ़्टवेयर (जैसे गिट-एनेक्स) या तृतीय पक्ष आधारभूत संरचना (जैसे जिथब के एलएफएस) के बिना किया जाता है।
  • यह बाइनरी फ़ाइलों को कुशलता से स्टोर करता है, यानी यह आपके भंडार के इतिहास को फहराता नहीं है।
  • git pull और git fetch , git fetch सहित - अभी भी बैंडविड्थ कुशल हैं , यानी डिफ़ॉल्ट रूप से रिमोट से सभी बड़ी बाइनरी खींची नहीं जाती हैं।
  • यह विंडोज पर काम करता है।
  • यह सब कुछ एक गिट भंडार में स्टोर करता है
  • यह पुरानी बाइनरी (बूप के विपरीत) को हटाने की अनुमति देता है।

ओटीएबीएस के अवांछनीय गुण

  • यह git clone संभावित रूप से अक्षम है (लेकिन जरूरी नहीं, आपके उपयोग के आधार पर)। यदि आप इस समाधान को तैनात करते हैं तो आपको git clone -b master --single-branch <url> बजाय git clone git clone -b master --single-branch <url> का उपयोग करने के लिए अपने सहयोगियों से सलाह git clone -b master --single-branch <url> । ऐसा इसलिए है क्योंकि डिफ़ॉल्ट रूप से गिट क्लोन शब्दशः पूरी तरह से क्लोन करता है, जिसमें उन चीजों को शामिल किया जाता है जिन्हें आप सामान्य रूप से अपने बैंडविड्थ को अपरिवर्तित कामों की तरह बर्बाद नहीं करना चाहते हैं। एसओ 4811434 से लिया गया।
  • यह git fetch <remote> --tags बैंडविड्थ अक्षम, लेकिन आवश्यक रूप से भंडारण अक्षम नहीं है। आप हमेशा अपने सहयोगियों को सलाह दे सकते हैं कि इसका इस्तेमाल न करें।
  • आपको समय-समय पर किसी भी फाइल से अपने भंडार को साफ करने के लिए एक git gc चाल का उपयोग करना होगा, जिसे आप और नहीं चाहते हैं।
  • यह git-bigfiles या git-bigfiles रूप में उतना कुशल नहीं है। लेकिन यह आप जो करने की कोशिश कर रहे हैं और अधिक ऑफ-द-शेल्फ के लिए क्रमशः अधिक उपयुक्त है। आप सैकड़ों हजार छोटी फाइलों या गीगाबाइट्स की श्रृंखला में फाइलों के साथ परेशानी में पड़ने की संभावना है, लेकिन कामकाज के लिए पढ़ते हैं।

बाइनरी फाइलें जोड़ना

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

  1. एक नई अनाथ शाखा बनाएं। git checkout --orphan binaryStuff चाल करेगा। यह ऐसी शाखा उत्पन्न करता है जो पूरी तरह से किसी अन्य शाखा से डिस्कनेक्ट हो जाता है, और इस शाखा में आपके द्वारा किए गए पहले प्रतिबद्धता में कोई अभिभावक नहीं होगा, जो इसे मूल प्रतिबद्ध बना देगा।
  2. git rm --cached * .gitignore का उपयोग कर अपनी अनुक्रमणिका को साफ करें।
  3. एक गहरी सांस लें और rm -fr * .gitignore का उपयोग कर पूरे काम कर रहे पेड़ को हटा rm -fr * .gitignore । आंतरिक .git निर्देशिका .git रहेंगे, क्योंकि * वाइल्डकार्ड इससे मेल नहीं खाता है।
  4. अपने VeryBigBinary.exe, या अपनी VeryHeavyDirectory / में कॉपी करें।
  5. इसे जोड़ें और इसे प्रतिबद्ध करें।
  6. अब यह मुश्किल हो जाता है - अगर आप इसे रिमोट में शाखा के रूप में धक्का देते हैं तो आपके डेवलपर्स अगली बार डाउनलोड करेंगे जब वे git fetch अपने कनेक्शन को क्लोजिंग करते हैं। आप शाखा के बजाय टैग दबाकर इससे बच सकते हैं। यह अभी भी आपके सहयोगी की बैंडविड्थ और फाइल सिस्टम स्टोरेज को प्रभावित कर सकता है अगर उनके पास git fetch <remote> --tags टाइप करने की आदत है, लेकिन वर्कअराउंड के लिए पढ़ा जाए। आगे बढ़ें और git tag 1.0.0bin जाओ
  7. अपने अनाथ टैग git push <remote> 1.0.0bin पुश करें।
  8. बस आप अपनी द्विआधारी शाखा को दुर्घटना से कभी नहीं git branch -D binaryStuff , आप इसे git branch -D binaryStuff हटा सकते हैं। आपकी प्रतिबद्धता कचरा संग्रह के लिए चिह्नित नहीं की जाएगी, क्योंकि एक अनाथ टैग उस पर इंगित करता है 1.0.0bin इसे जीवित रखने के लिए पर्याप्त है।

बाइनरी फ़ाइल की जांच कर रहा है

  1. मैं (या मेरे सहयोगियों) को वर्तमान काम करने वाले पेड़ में VeryBigBinary.exe चेक आउट कैसे प्राप्त करूं? यदि आपकी वर्तमान कार्यशील शाखा उदाहरण के लिए मास्टर है तो आप git checkout 1.0.0bin -- VeryBigBinary.exe को आसानी से git checkout 1.0.0bin -- VeryBigBinary.exe कर सकते हैं।
  2. अगर आपके पास अनाथ टैग 1.0.0bin डाउनलोड नहीं है, तो यह असफल हो जाएगा, इस मामले में आपको पहले से git fetch <remote> 1.0.0bin लिए git fetch <remote> 1.0.0bin करना होगा।
  3. आप अपने मास्टर के VeryBigBinary.exe में VeryBigBinary.exe जोड़ सकते हैं, ताकि आपकी टीम में कोई भी दुर्घटना से बाइनरी के साथ प्रोजेक्ट के मुख्य इतिहास को प्रदूषित नहीं करेगा।

पूरी तरह से बाइनरी फ़ाइल को हटा रहा है

यदि आप अपने स्थानीय भंडार से VeryBigBinary.exe को पूरी तरह से शुद्ध करने का निर्णय लेते हैं, तो आपके रिमोट रिपोजिटरी और आपके सहयोगी के भंडार जो आप कर सकते हैं:

  1. रिमोट git push <remote> :refs/tags/1.0.0bin पर अनाथ टैग हटाएं
  2. अनाथ टैग को स्थानीय रूप से हटाएं (अन्य सभी असुरक्षित टैग हटाएं) git tag -l | xargs git tag -d && git fetch --tags git tag -l | xargs git tag -d && git fetch --tags । मामूली संशोधन के साथ SO 1841341 से लिया गया।
  3. स्थानीय रूप से अब अपनी अप्रतिबंधित प्रतिबद्धता को हटाने के लिए एक गिट जीसी चाल का उपयोग करें। git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 -c gc.rerereunresolved=0 -c gc.pruneExpire=now gc "[email protected]" । यह अन्य सभी अव्यवस्थित कामों को भी हटा देगा। एसओ 1904860 से लिया गया
  4. यदि संभव हो, तो रिमोट पर गिट जीसी चाल दोहराएं। यह संभव है यदि आप अपने भंडार को स्वयं-होस्ट कर रहे हैं और कुछ गिट प्रदाताओं, जैसे कि जिथब या कुछ कॉर्पोरेट वातावरण में संभव नहीं हो सकता है। यदि आप एक प्रदाता के साथ होस्टिंग कर रहे हैं जो आपको रिमोट तक एसएसएच पहुंच नहीं देता है तो बस इसे होने दें। यह संभव है कि आपके प्रदाता का आधारभूत संरचना आपके अव्यवस्थित प्रतिबद्धता को अपने स्वयं के मीठे समय में साफ कर दे। यदि आप कॉर्पोरेट माहौल में हैं तो आप प्रति सप्ताह एक बार अपने रिमोट को इकट्ठा करने वाले क्रॉन जॉब कचरे को चलाने के लिए अपने आईटी की सलाह दे सकते हैं। बैंडविड्थ और स्टोरेज के मामले में वे आपकी टीम पर कोई प्रभाव नहीं डालते हैं या नहीं, जब तक कि आप अपने सहयोगियों को हमेशा git clone -b master --single-branch <url> बजाय git clone git clone -b master --single-branch <url> को git clone करने के लिए सलाह देते हैं।
  5. आपके सभी सहयोगी जो पुराने अनाथ टैग से छुटकारा पाने के लिए चाहते हैं केवल 2-3 कदम लागू करने की आवश्यकता है।
  6. फिर आप एक नया अनाथ टैग 2.0.0bin बनाने के लिए बाइनरी फ़ाइलों को जोड़ने के चरण 1-8 को दोहरा सकते हैं। यदि आप अपने सहयोगियों के बारे में चिंतित हैं तो git fetch <remote> --tags आप वास्तव में इसे फिर से 1.0.0bin कर सकते हैं 1.0.0bin । यह सुनिश्चित करेगा कि अगली बार जब वे सभी टैग 1.0.0bin तो पुराने 1.0.0bin को 1.0.0bin जाएगा और बाद में कचरा संग्रह (चरण 3 का उपयोग करके) के लिए चिह्नित किया जाएगा। जब आप रिमोट पर एक टैग को ओवरराइट करने का प्रयास करते हैं तो आपको इसका उपयोग करना होगा: git push -f <remote> <tagname>

अंतभाषण

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

  • गिट-बैश के साथ विंडोज पर काम करने की पुष्टि की।

  • बाइनरी फ़ाइलों का भंडारण अधिक कुशल बनाने के लिए मानक ट्रिक्स का एक सेट लागू करना एक अच्छा विचार है। git gc लगातार चलने (बिना किसी अतिरिक्त तर्क के) गिट को बाइनरी डेल्टा का उपयोग कर अपनी फाइलों के अंतर्निहित भंडारण को अनुकूलित करता है। हालांकि, अगर आपकी फाइलें प्रतिबद्ध होने के समान प्रतिबद्ध रहने की संभावना नहीं हैं तो आप बाइनरी डेल्टा को पूरी तरह से बंद कर सकते हैं। इसके अतिरिक्त, क्योंकि यह पहले से संपीड़ित या एन्क्रिप्टेड फ़ाइलों को संपीड़ित करने का कोई मतलब नहीं है, जैसे .zip, .jpg या .crypt, git आपको अंतर्निहित संग्रहण के संपीड़न को बंद करने की अनुमति देता है। दुर्भाग्यवश यह आपके स्रोत कोड को प्रभावित करने वाली सभी या कुछ भी सेटिंग नहीं है।

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

  • केंद्रीय भंडार ब्लोट की कीमत पर रिमोट पर सभी द्विआधारी परिवर्तनों का पूरा इतिहास रखने के लिए आप पूरी तरह से बाइनरी फ़ाइलों को हटाने के चरण 4 को छोड़ना चाहेंगे। स्थानीय भंडार समय के साथ दुबला रहेंगे।

  • जावा दुनिया में इस समाधान को maven --offline साथ गठबंधन करना संभव है ताकि आपके संस्करण नियंत्रण में पूरी तरह से संग्रहीत एक पुन: उत्पन्न ऑफ़लाइन निर्माण बनाया जा सके (यह maven --offline साथ maven --offline साथ आसान है)। गोलांग दुनिया में go get बजाय अपने GOPATH को प्रबंधित करने के लिए इस समाधान पर निर्माण करना संभव है। पायथन दुनिया में वर्चुअलनेव के साथ इसे गठबंधन से प्रत्येक निर्माण के लिए पीईपीआई सर्वर पर भरोसा किए बिना स्वयं निहित विकास वातावरण का उत्पादन करना संभव है।

  • यदि आपकी बाइनरी फाइलें अक्सर बदलती हैं, जैसे कि कलाकृतियों का निर्माण करना, एक समाधान को स्क्रिप्ट करना एक अच्छा विचार हो सकता है जो अनाथ टैग monday_bin , tuesday_bin , ..., friday_bin , और एक अनाथ टैग में कलाकृतियों के 5 सबसे हाल के संस्करणों को friday_bin प्रत्येक रिलीज के लिए 1.7.8bin 2.0.0bin , आदि। आप weekday_bin घुमा सकते हैं और प्रतिदिन पुरानी बाइनरी हटा सकते हैं। इस तरह आप दो दुनिया के सर्वश्रेष्ठ प्राप्त करते हैं: आप अपने स्रोत कोड का पूरा इतिहास रखते हैं लेकिन केवल अपनी बाइनरी निर्भरताओं का प्रासंगिक इतिहास रखते हैं। पूरे स्रोत कोड के बिना पूरे स्रोत कोड के बिना किसी दिए गए टैग के लिए बाइनरी फाइलें प्राप्त करना भी बहुत आसान है: git init && git remote add <name> <url> && git fetch <name> <tag> यह आपके लिए करना चाहिए ।


मैं submodules (पैट नोटज़ के रूप में) या दो अलग भंडारों का उपयोग करेंगे। यदि आप अपनी बाइनरी फ़ाइलों को अक्सर संशोधित करते हैं, तो मैं इतिहास की सफाई करने वाले विशाल भंडार के प्रभाव को कम करने का प्रयास करूंगा:

मुझे कई महीने पहले एक ही समस्या थी: ~ 21 जीबी एमपी 3 फाइलें, अवर्गीकृत (खराब नाम, खराब आईडी 3, मुझे नहीं पता कि मुझे एमपी 3 फ़ाइल पसंद है या नहीं ...), और तीन कंप्यूटरों पर दोहराया गया।

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

अंत में, मेरे पास केवल ~ 6 जीबी एमपी 3 फ़ाइलें और ~ जीबी निर्देशिका में ~ 83 जीबी थी। मैंने git-write-tree और git-commit-tree का इस्तेमाल किया, बिना किसी पूर्व प्रतिबद्धता के, एक नया प्रतिबद्धता बनाने के लिए, और उस प्रतिबद्धता को इंगित करने वाली एक नई शाखा शुरू की। उस शाखा के लिए "गिट लॉग" केवल एक प्रतिबद्धता दिखाता है।

फिर, मैंने पुरानी शाखा को हटा दिया, केवल नई शाखा को रखा, रेफ-लॉग हटा दिया, और "गिट प्रून" चलाया: उसके बाद, मेरे .git फ़ोल्डरों ने केवल ~ 6 जीबी भारित किया ...

आप समय-समय पर विशाल भंडार को "शुद्ध" कर सकते हैं: आपका "गिट क्लोन" तेज़ होगा।


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

$ git annex add mybigfile
$ git commit -m'add mybigfile'
$ git push myremote
$ git annex copy --to myremote mybigfile ## This command copies the actual content to myremote
$ git annex drop mybigfile ## Remove content from local repo
...
$ git annex get mybigfile ## Retrieve the content
## or to specify the remote from which to get:
$ git annex copy --from myremote mybigfile

कई आदेश उपलब्ध हैं, और वेबसाइट पर एक महान दस्तावेज है। Debian पर एक पैकेज उपलब्ध है।


camlistore पर एक नज़र camlistore । यह वास्तव में गिट-आधारित नहीं है, लेकिन मुझे यह करना उचित लगता है कि आपको क्या करना है।


गिट बप पर एक नज़र डालें जो गिट भंडार में बड़ी बाइनरी को स्मार्ट रूप से स्टोर करने के लिए एक गिट एक्सटेंशन है।

आप इसे एक सबमिशन के रूप में रखना चाहते हैं, लेकिन आपको रिपोजिटरी को संभालने में कठिनाई के बारे में चिंता करने की आवश्यकता नहीं होगी। उनके नमूना उपयोग मामलों में से एक गिट में वीएम छवियों को संग्रहीत कर रहा है।

मैंने वास्तव में बेहतर संपीड़न दर नहीं देखी है, लेकिन मेरे भंडारों में वास्तव में बड़ी बाइनरी नहीं है।

आपकी माइलेज भिन्न हो सकती है।







binaryfiles