JGit

2012-04-12 11 views
8
के साथ एक स्ट्रिंग प्रतिबद्ध

एक JGit-शुरुआत-प्रश्न:JGit

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

मेरे छद्म कोड:

String gitUrl = "path/to/repository/.git"; 
Repository repository = new FileRepository(gitUrl); 
String filename = "test/seppl.txt"; 
blobId = getIdOf(filename); 
ObjectLoader object = repository.open(blobId, Constants.OBJ_BLOB); 
ObjectStream is = object.openStream(); 
String newContent = processStream(is); 
// How to commit the newContent in filename? 

मैं एक फ़ाइल में newContent लिखने और AddCommand और CommitCommand के साथ इस फ़ाइल के लिए प्रतिबद्ध है? या क्या मैं एक ही फ़ाइल नाम के तहत भंडार में स्ट्रिंग "ऑन-द-फ्लाई" लिख सकता हूं?

क्या वेब में कहीं भी एक उदाहरण है कि जेजीआईटी के साथ प्रतिबद्धता कैसे करें?

+0

CommitCommand के उदाहरण के लिए, मेरा सुझाव है कि आपको मेरा जवाब देखें [यहां] (http://stackoverflow.com/questions/6861881/jgit-cannot-find-a-tutorial-or-simple- उदाहरण/10311069 # 10311069)। –

+1

मैं जवाब में सुझाए गए अनुसार चीनी मिट्टी के बरतन API (यानी 'AddCommand',' CommitCommand') का उपयोग करने की भी अनुशंसा करता हूं, लेकिन यदि आप वास्तव में फ्लाय_ पर प्रतिबद्ध करना चाहते हैं तो आपको यह आलेख उपयोगी हो सकता है :: http: //www.codeaffine .com/2014/10/20/git-internals/ –

उत्तर

6

मुझे लगता है कि CommitCommand (विलय या ऐसे संचालन को छोड़कर) को छोड़कर किसी भी डेटा को करने का कोई दूसरा तरीका नहीं है।

तो, हाँ, आपको अपनी फ़ाइल में कोई बदलाव करना चाहिए और फिर इसे जोड़ना और इसे प्रतिबद्ध करना (API से AddCommand और CommitCommand का उपयोग करना)।

+0

ठीक है, मैं इसे आज़माउंगा, क्योंकि यह सबसे आसान तरीका प्रतीत होता है और शायद इसे बाद में अनुकूलित कर सकता है। – Sonson123

3

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

http://book.git-scm.com/7_raw_git.html

-w यह बताता है हैश लौटने के साथ प्रविष्टि लिखने के लिए।

git hash-object -w myfile.txt 
6ff87c4664981e4397625791c8ea3bbb5f2279a3 

अद्यतन

मैं अपने फोन पर इस प्रविष्टि के माध्यम से स्किम्ड है और इस तरह विस्तार आपके द्वारा दी गई करने के लिए कम तो चौकस था। हां आपको स्ट्रिंग को फ़ाइल में लिखना होगा, लेकिन आपको इसे सामान्य फ़ाइल की तरह नहीं जोड़ना चाहिए। मुझे संदेह होगा कि जेजीआईटी में hash-object करने की क्षमता है। ऐसा लगता है कि आपके पास बीएलओबी प्रविष्टि से निपटने के लिए पहले से ही कुछ कोड है। शायद हैश-ऑब्जेक्ट के लिए एक उच्च स्तरीय कॉल है जिसमें आप सीधे बीएलओबी से निपट नहीं पाते हैं।

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

+0

एचएम, बहुत रोचक, धन्यवाद। लेकिन मैं Add/CommitCommand के साथ रहूंगा क्योंकि यह अब सबसे आसान है। – Sonson123

3

हाँ, बेशक आप आप क्या चाहते हैं कर सकते हैं, लेकिन सिर्फ का उपयोग नहीं जोड़ें/कमिट के रूप में वे उच्च स्तरीयPorcelein API का हिस्सा है जो सिर्फ एक सुविधा एपीआई बनाया कम के शीर्ष पर हैं स्तर एपीआई। इस प्रकार वे केवल सबसे आम उपयोग मामलों को लागू करते हैं।

आप क्या करने की जरूरत AddCommand और CommitCommand के कार्यान्वयन कैसे ब्लॉब वस्तुओं और फिर पेड़ वस्तुओं को बनाने के निचले स्तर एपीआई का उपयोग करने को देखने के लिए पर और वस्तुओं के लिए प्रतिबद्ध से देखने के लिए है।

मैं दूसरी बार सिफारिश करता हूं कि आप पूरी तरह से read chapter 9 of the Pro Git book ताकि आप सही ढंग से समझ सकें कि गिट निम्न स्तर पर कैसे काम करता है।

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