2010-09-04 10 views
5

से एक फ़ाइल प्राप्त करें क्या जावा में रिमोट गिट रिपॉजिटरी से प्रोग्रामेटिक रूप से एक फ़ाइल डाउनलोड करने का कोई तरीका है?रिमोट गिट रिपॉजिटरी

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

मैं SVNKit का उपयोग कर सबवर्सन के साथ इसी तरह कुछ करने के लिए कर रहा था और मैंने देखा है Git का एक शुद्ध जावा कार्यान्वयन (eclipse's JGit) जो कुछ इसी तरह करने के लिए सक्षम हो सकता है वहाँ है, इसलिए मुझे आशा है कि एक सकारात्मक जवाब नहीं है ; यद्यपि मैं समझता हूं कि गिट कैसे काम करता है - केवल स्थानीय भंडारों से अपडेट की इजाजत देता है - यह समस्याग्रस्त साबित हो सकता है।

+0

जो मैं समझता हूं उससे, jgit अभी भी गिट की सभी सुविधाओं को उपलब्ध कराने पर काम कर रहा है - यह संभावना नहीं है कि यह फीचर गिट प्रदान करता है। – Cascabel

+0

मुझे नहीं लगता कि यह सामान्य मामले में संभव होगा, यानी, जहां आप केवल गिट प्रोटोकॉल के माध्यम से पहुंच सकते हैं। मुझे विश्वास नहीं है कि सामान्य परिवहन तंत्र एकल फ़ाइलों तक पहुंचने का कोई तरीका प्रदान करते हैं। मुझे काफी यकीन है कि आपको रिमोट पर कुछ इंस्टॉल करना होगा (उदा। Gitweb) या फाइल सिस्टम को रेपो (या तो रिमोट या स्थानीय, संभवतः उथला, क्लोन) तक पहुंच प्राप्त करना होगा। – Cascabel

उत्तर

8

गिट वास्तव में एकल फ़ाइल एक्सेस के लिए डिज़ाइन नहीं किया गया है रिमोट रिपोजिटरी लेकिन आप इसके लिए git archive का दुरुपयोग कर सकते हैं। नकारात्मकता यह है कि आपको केवल उस ब्लॉब की बजाय "पेड़" डाउनलोड करना होगा।

उदा।

git archive --remote=url://to.git.repo branch path/to/dir | tar -x file 

एक विकल्प के रूप में, आप gitweb दूरस्थ भंडार आप अपने "कच्चे" प्रारूप में किसी भी फाइल डाउनलोड करने के लिए एक सरल कर्ल या wget आदेश का उपयोग कर सकते हैं पर स्थापित किया है।

+0

यह एक अद्भुत कड़वाहट है। – Cascabel

+2

ध्यान दें कि आपके पास 'गिट: //' प्रोटोकॉल के लिए, जो मुझे याद है, दूरस्थ रूप से दूरस्थ 'गिट संग्रह' पहुंच की अनुमति देने के लिए उचित सेवा सक्षम करने के लिए है। –

+0

'पथ/से/डीआईआर' क्या है? –

0

Quoth git-clone(1):

--depth गहराई

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

तो ग्रैन्युलरिटी एक निर्देशिका है लेकिन आप संशोधन इतिहास को सीमित कर सकते हैं।

+1

आप संपूर्ण कार्य निर्देशिका बनाने से बचने के लिए '--no-checkout' का भी उपयोग कर सकते हैं। कोई बैंडविड्थ प्रभाव नहीं है, लेकिन बहुत सारी फाइल निर्माण बचाता है। – Cascabel

3

रिमोट रिपोजिटरी के पास आपके पास किस प्रकार की पहुंच है? क्या यह एसएसएच के माध्यम से है, क्या आप कमांड को कॉल कर सकते हैं? यदि ऐसा है, तो आप केवल git show HEAD:$path_to_file का आह्वान कर सकते हैं।

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

+0

यदि आप रिमोट पर गिटवेब चला सकते हैं, तो आप इसे भी कर सकते हैं। – Cascabel

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