2015-11-20 17 views
15
पर दूरस्थ के लिए

मैं निम्नलिखित कोड (क्या हो रहा है के लिए टिप्पणियों देखें):JGit सेट Git: यूआरआई https के बजाय: CircleCI

// Clone repository from GitHub into a local directory. 
Git git = Git.cloneRepository() 
      .setBranch("gh-pages") 
      .setURI("https://github.com/RAnders00/KayonDoc.git") 
      .setDirectory(new File("/home/ubuntu/KayonDoc")) 
      .call(); 

// Print out remotes in config from JGit 
Config config = git.getRepository().getConfig(); 
config.getSubsections("remote").forEach(it -> { 
    System.out.println(config.getString("remote", it, "url")); 
}); 
// Prints https://github.com/RAnders00/KayonDoc.git 
// Everything seems OK 

// You could perform some changes to the repository here... 

// Push changes to origin 
git.push() 
    .setCredentialsManager(new UsernamePasswordCredentialsProvider("RAnders00", "hunter2")) 
    .call(); 
// Throws exception (look below) 
Caught: org.eclipse.jgit.api.errors.TransportException: [email protected]:RAnders00/KayonDoc.git: push not permitted 
org.eclipse.jgit.api.errors.TransportException: [email protected]:RAnders00/KayonDoc.git: push not permitted 
     at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:164) 
     at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:80) 
     at <your class> (YourClass.java:?) 
Caused by: org.eclipse.jgit.errors.TransportException: [email protected]:RAnders00/KayonDoc.git: push not permitted 
     at org.eclipse.jgit.transport.BasePackPushConnection.noRepository(BasePackPushConnection.java:176) 
     at org.eclipse.jgit.transport.BasePackConnection.readAdvertisedRefsImpl(BasePackConnection.java:200) 
     at org.eclipse.jgit.transport.BasePackConnection.readAdvertisedRefs(BasePackConnection.java:178) 
     at org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init>(TransportGitSsh.java:341) 
     at org.eclipse.jgit.transport.TransportGitSsh.openPush(TransportGitSsh.java:166) 
     at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:154) 
     at org.eclipse.jgit.transport.Transport.push(Transport.java:1200) 
     at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:157) 
     ... 3 more 

JGit .git/FETCH_HEAD में git: यूआरएल की बचत है फ़ाइल, जिसे तब धक्का देने के लिए उपयोग किया जा रहा है। चूंकि git: प्रोटोकॉल प्रमाणीकरण का समर्थन नहीं करता है, इसलिए मैं दूरस्थ को धक्का देने में असमर्थ हूं और प्रक्रिया विफल हो जाती है।

.git/config फ़ाइल में रिमोट के लिए सही https: यूआरआई शामिल है (यही कारण है कि कोड https: यूआरआई प्रिंट कर रहा है)।

मेरा प्रश्न है:

क्या मैं JGit https: यूआरआई सही ढंग से
(जो तब मुझे फिर से धक्का करने की अनुमति होगी) सेट बनाने के लिए कर सकते हैं?


यह समस्या केवल एक बहुत ही खास वातावरण में पैदा होती है (CircleCI, एक Ubuntu 12.04.2 LTS आभासी बॉक्स पर) - यह 14.04 LTS और 12.04.2 LTS ताजा ubuntu वितरण 15.10 पर reproducable नहीं कर रहा है और पर reproducable नहीं विंडोज।

समस्या को पुन: उत्पन्न करने का सबसे आसान तरीका create एक डमी गिटहब भंडार है, फिर start building सर्कलसीआई पर आपकी डमी परियोजना, और फिर एसएसएच के साथ अपना पहला निर्माण फिर से शुरू करने के लिए। आपके पास बॉक्स में किसी भी groovy/java फ़ाइलों को अपलोड करने के लिए 30 मिनट का एसएसएच समय है। 30 मिनट के बाद बॉक्स को मजबूती से बंद कर दिया जाएगा।


अगर मैं निर्देशिका इस में क्लोन किया गया था में git remote -v उपयोग करते हैं, मैं:

origin [email protected]:RAnders00/KayonDoc.git (fetch) 
origin [email protected]com:RAnders00/KayonDoc.git (push) 
+0

मैं पुष्टि कर सकता हूं कि विंडोज़ पर https यूआरएल बरकरार रहेगा। यदि यह लिनक्स के साथ मामला नहीं है तो यह एक बग जैसा लगता है और मैं [एक बगजिला फाइल करता हूं] (https://eclipse.org/jgit/support/)। –

+0

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

+0

यदि मैं आप थे, तो मैं केवल एसएसबी कुंजी – AdamSkywalker

उत्तर

2

ऐसा लगता है कि

परिभाषित किया है (जो मुझे तथ्य यह है कि git: यूआरआई वास्तव में उपयोग किया जाता है के लिए अंक)

URL पुनर्लेखन

Git निम्नलिखित config साथ URL पुनः लिखने के लिए एक रास्ता प्रदान करता है:

आप इसे अपने भंडार के विन्यास की जाँच सेट किया है
git config --global url."git://".insteadOf https:// 

सत्यापित करने के लिए:

git config --list 

आप उत्पादन में निम्न पंक्ति देखेंगे:

url.git://.insteadof=https:// 

तुम भी जाँच कर सकते हैं अपने .gitconfig फाइलें यह सत्यापित करने के लिए कि आपके पास अपनी कॉन्फ़िगरेशन फ़ाइलों में यह प्रविष्टि नहीं है

[url "git://"] 
    insteadOf = https:// 
+1

हे मेरे भगवान, यह शानदार जवाब समाधान है। 'ubuntu @ box304: ~ $ git config --list' उपज '[email protected]: .insteadof = https: // github.com /' - इस कॉन्फ़िगरेशन को हटाने के लिए,'> ~/.gitconfig' चलाएं (कॉन्फ़िगरेशन को ओवरराइड करने के लिए) CircleCI पर आपके 'circle.yml' फ़ाइल के' मशीन 'अनुभाग में। – RAnders00

+0

सहायता करने में खुशी हुई :-) – CodeWizard

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