मैं सामने कहूँगा कि इस सवाल का this के स्वरूप के समान है। मैं कच्चे Git प्रोटोकॉल का उपयोग करना चाहते हैं (here और here यदि आप बुनियादी पैक नेटवर्क प्रोटोकॉल से परिचित नहीं हैं): वहाँ एक महत्वपूर्ण अंतर यह है कि इस अद्वितीय बनाता है।Git दूरस्थ रिपोजिटरी से एकल फाइल लाने प्रोग्राम के
मुझे लगता है कि एक गुमनाम Git भंडार से कनेक्ट करेगा स्काला और JGit का उपयोग कर एक आवेदन लिख रहा हूँ। मैं एक ब्लॉब का अनुरोध करना चाहता हूं (सोचें "/path/to/file.txt" @ "refs/head/branch1")। आखिरकार मेरा लक्ष्य प्रोग्रामिक रूप से रिमोट रिपोजिटरी से एक फ़ाइल को पुनर्प्राप्त करना है। ऐसा करने में सक्षम होने के लिए एक बहुत उपयोगी चीज की तरह लगता है।
Anywho, मैं इस प्रोटोकॉल के आंतरिक भागों में जाने पर किया गया है। ऐसा प्रतीत होता है कि इसका मूल संस्करण "मैं इन ऑब्जेक्ट्स को चाहता हूं, मेरे पास इन ऑब्जेक्ट्स हैं" - और बम, आपके पास जो कुछ भी नहीं है उसके साथ एक पैकफाइल है। मेरे प्रश्न का मूल यह है: मैं गैर-रिकर्सिव तरीके से एक ही ऑब्जेक्ट के लिए गिट-अपलोड-पैकफाइल कैसे पूछूं? मैं एक सिंगल प्रतिबद्ध ऑब्जेक्ट डाउनलोड करने के बाद ठीक हूं, फिर पेड़ के लिए पूछ रहा हूं, फिर एक सबट्री, फिर एक और सबट्री, और फिर आखिरकार ब्लॉब। गति यहां बहुत महत्वपूर्ण नहीं है, मुख्य रूप से मैं बैंडविड्थ पर सहेजने की कोशिश कर रहा हूं। लेकिन ऐसा लगता है कि गिट-अपलोड-पैकफाइल बताने का कोई तरीका नहीं है, "कृपया मुझे केवल एक ऑब्जेक्ट दें जिसे मैंने पूछा"।
हां, "है" सूची है, जो मूल रूप से वस्तुओं को नीचे आने से बाहर कर देगी, हालांकि इसके लिए एक भंडार की सामग्री का प्राथमिक ज्ञान आवश्यक है (मेरे पास स्थानीय रिपो नहीं है, याद रखें)। मैं सभी संभावित sha1s की एक सूची उत्पन्न कर सकता हूं और उन सभी को छोड़कर उन्हें भेज सकता हूं, लेकिन यह हास्यास्पद (समय लेने वाली, बैंडविड्थ उपभोग करने और हर जगह प्रोग्रामर के खिलाफ अपराध) से परे है
एक और संभावित समाधान मैं रहा हूं इसके बजाय रिमोट साइड पर गिट-अपलोड-आर्काइव का उपयोग कर रहा है, हालांकि मैं मानता हूं कि मैंने अभी तक इसमें अधिक समय नहीं लगाया है।
मैं JGit पुनर्लेखन करने के लिए तैयार की तुलना में अधिक कर रहा हूँ अगर यह है कि करने के लिए आता है, तो के रूप में इस पढ़ नहीं करते कृपया "मैं कैसे कर सकता हूँ JGit करना ..."। मैं सिर्फ यह जानना चाहता हूं कि प्रोटोकॉल स्वयं भी इसमें सक्षम है या नहीं। मुझे लगता है कि प्रोटोकॉल का दुरुपयोग करने के लिए कुछ अद्भुत चालाक तरीका है जो मैं चाहता हूं। कोई विचार?
मुझे लगता है कि इसका कोई जवाब "गिट' के साथ शुरू करना है, इस तरह से काम नहीं करता है" ... – twalberg
@twalberg एक स्थानीय रिपो सुनिश्चित करता है। अगर मैं तार पर यह कर सकता हूं तो बस उत्सुक हूं। –
हां, आप स्थानीय रिपो से एक ऑब्जेक्ट निकाल सकते हैं। वायर प्रोटोकॉल को ऐसा करने के लिए डिज़ाइन नहीं किया गया था। आप अपने अंतिम लक्ष्य को पूरा कर सकते हैं, मुझे लगता है कि क्लोनिंग/फ़ेचिंग (पूरे रेपो से बचने के लिए एक उथले क्लोन का उपयोग करके भी, लेकिन आप अभी भी + पेड़ + ब्लब्स) प्राप्त करने जा रहे हैं, स्थानीय रिपो में और अपनी ऑब्जेक्ट निकालने के लिए, लेकिन मैं ऐसा नहीं लगता कि आप इसे तार पर कर सकते हैं (हालांकि यदि आपके पास रिमोट तक एसएसएच पहुंच है, तो आप इसे नकली सॉर्ट कर सकते हैं)। – twalberg