jgit

2013-04-05 9 views
5

में ज्ञात_होस्ट को कॉन्फ़िगर करना स्रोत नियंत्रण के लिए गिटोलाइट के साथ jgit का उपयोग करना, मेरे पास एक ऐसा एप्लिकेशन है जो कमांड पर कुछ कोड उत्पन्न करता है और जिसे हम स्रोत नियंत्रण के लिए प्रतिबद्ध होना चाहते हैं। लक्ष्य एक तेज आगे खींचने के लिए है, नया कोड प्रतिबद्ध है, और फिर इसे धक्का।jgit

मैं निम्न विधि है:

private void commitToGitRepository(String updateComment, Config config) 
     throws IOException, NoFilepatternException, GitAPIException 
{ 
    if(git == null) 
    { 
     git = Git.open(new File(config.getDpuCheckoutDir())); 
    } 
    PullCommand pull = git.pull(); 
    pull.call(); 
} 

इस विधि निम्न अपवादों के साथ, pull.call() विधि कॉल पर विफल रहता है:

com.jcraft.jsch.JSchException: UnknownHostKey: www.somehost.com. RSA key fingerprint is 9d:92:a9:c5:5d:cb:5f:dc:57:ff:38:7e:34:31:fe:75 
at com.jcraft.jsch.Session.checkHost(Session.java:748) 
at com.jcraft.jsch.Session.connect(Session.java:319) 
at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:116) 
at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:121) 
at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:248) 
at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:147) 
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136) 
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122) 
at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1104) 
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:128) 
at org.eclipse.jgit.api.PullCommand.call(PullCommand.java:245) 
at net.intellidata.dpu.controller.schema.EntityMappingController.commitToGitRepository(EntityMappingController.java:149) 
... (truncated where it meets my code) 

तरह से मैं इस पढ़ें, यह है कि यह नहीं मिल रहा है लगता है user_home/.git में मेरी ज्ञात_होस्ट फ़ाइल। हालांकि, मैं एक घंटे की खोज कर रहा हूं और मुझे जेएसआईटी को कॉन्फ़िगर करने का कोई तरीका नहीं मिल रहा है ताकि जेएसएच को ज्ञात_होस्ट फ़ाइल की तलाश करनी पड़े।

सुझाव? मैं जानता हूँ कि उत्पत्ति के लिए प्रविष्टि मौजूद है में मेरी known_hosts फ़ाइल

उत्तर

7

This answer का उल्लेख है:

jsch.setKnownHosts("C:\\Users\\aUsername\\known_hosts"); 

लेकिन आप jgit उपयोग कर रहे हैं, और नहींjsch (the Java secure shell) सीधे, तो आइए देखते हैं:

C:\Users\VonC\prog\git>git clone https://github.com/eclipse/jgit 
Cloning into 'jgit'... 
remote: Counting objects: 37854, done. 
remote: Compressing objects: 100% (7743/7743), done. 
remote: Total 37854 (delta 22009), reused 34367 (delta 18831) 
Receiving objects: 100% (37854/37854), 6.73 MiB | 1.37 MiB/s, done. 
Resolving deltas: 100% (22009/22009), done. 

C:\Users\VonC\prog\git>cd jgit 

C:\Users\VonC\prog\git\jgit>grep -nrHI "setKnownHosts" * 
org.eclipse.jgit/src/org/eclipse/jgit/transport/JschConfigSessionFactory.java:262:        sch.setKnownHosts(in); 

इसे मिला!

यह JschConfigSessionFactory.java#knownHosts() से आता है, और की तरह दिखता है:

new File(new File(home, ".ssh"), "known_hosts"); 
# with: 
home = fs.userHome(); 

userHomeSystem.getProperty("user.home") पर आधारित है।

तो सुनिश्चित करें कि आपके जावा सत्र में user.home defined है, और आपके पास %USERPROFILE%/.ssh/known_hosts फ़ाइल है।

(user.home जावा के लिए जावा द्वारा %USERPROFILE% पर सेट किया जाना चाहिए, यानी, यदि आप विंडोज़ पर हैं: कुछ मामलों में, this won't always work)।


अब अगर आप कर एक %USERPROFILE%/.ssh/known_hosts, तो, mentioned here

बस ग्राहक के लिए SSH के रूप में (का उपयोग कर कमांड लाइन ssh उपकरण), इस प्रविष्टि के अपने ~/.ssh/known_hosts file में जोड़ देगा है।


इस मामले में, StormeHawkethe comments में उल्लेख है:

के बाद से मैं एक खिड़कियों सेवा रूप बिलाव में यह चल रहा हूँ, Jsch (और विस्तार के द्वारा JGit) नहीं देख रहा था .ssh फ़ोल्डर के लिए मेरे उपयोगकर्ता फ़ोल्डर में लेकिन SYSTEM खाते के घर फ़ोल्डर में।
इस मामले में मैं आगे बढ़ गया और .ssh फ़ोल्डर को SYSTEM घर फ़ोल्डर में कॉपी किया क्योंकि टॉमकैट केवल विकास और परीक्षण उद्देश्यों के लिए मेरी मशीन पर चलता है (शायद सबसे अच्छी सुरक्षा नीति नहीं है लेकिन जोखिम इस मामले में न्यूनतम है)।

this question, this one से, LocalSystem Account के लिए उस निर्देशिका होना चाहिए:

C:\Documents and Settings\Default User 
# or Wind7/2008 
C:\Windows\System32\Config\systemprofile 

ओपी का उल्लेख है:

इस कॉल के अनुसार:

System.out.println(System.getProperty("user.home")); 

डिफ़ॉल्ट SYSTEM Hom विंडोज 7 के लिए ई निर्देशिका (और संभवतः किसी भी अन्य एनटी-आधारित विंडोज सिस्टम) C:\ है।
(इसलिए आदर्श नहीं है, लेकिन एक त्वरित फिक्स के लिए, यह काम करता है)।

+0

आप, महोदय, एक प्रतिभाशाली हैं। मैं दीवार के खिलाफ अपना सिर मार रहा था, यह पता लगाने की कोशिश कर रहा था कि यह ज्ञात_होस्ट्स प्रविष्टि को क्यों पहचान नहीं रहा था जब मुझे अचानक एहसास हुआ कि, क्योंकि मैं इसे विंडोज़ सेवा के रूप में टोमकैट में चला रहा हूं, जेएसएच (और विस्तार से जेजीआईटी) था _my_ उपयोगकर्ता फ़ोल्डर में नहीं दिख रहा है, लेकिन .ssh फ़ोल्डर के लिए _SYSTEM_ खाते के होम फ़ोल्डर में। इस मामले में मैं आगे बढ़ गया और बस एसएसएच फ़ोल्डर को सिस्टम होम फोल्डर में कॉपी किया क्योंकि टॉमकैट केवल मेरी मशीन पर विकास और परीक्षण उद्देश्यों के लिए चलाता है (शायद सबसे अच्छी सुरक्षा नीति नहीं है लेकिन जोखिम इस मामले में न्यूनतम है)। धन्यवाद! – StormeHawke

+0

@StormeHawke उत्कृष्ट! मैंने अधिक दृश्यता के उत्तर में आपकी टिप्पणी शामिल की है। आपके सिस्टम खाते के लिए निर्देशिका क्या थी? मैंने कुछ सुझाव दिए हैं, लेकिन मुझे सही स्थान की जानकारी नहीं है। – VonC

+0

इस कॉल के अनुसार: 'System.out.println (System.getProperty (" user.home ")); विंडोज 7 के लिए डिफ़ॉल्ट सिस्टम होम निर्देशिका (और संभवतः किसी भी अन्य एनटी-आधारित विंडोज सिस्टम) बस' सी है : \\ ' – StormeHawke

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