मैं निम्नलिखित कोड (क्या हो रहा है के लिए टिप्पणियों देखें):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)
मैं पुष्टि कर सकता हूं कि विंडोज़ पर https यूआरएल बरकरार रहेगा। यदि यह लिनक्स के साथ मामला नहीं है तो यह एक बग जैसा लगता है और मैं [एक बगजिला फाइल करता हूं] (https://eclipse.org/jgit/support/)। –
हां, हालांकि कोड पर एक त्वरित रूप से इस के लिए एक स्पष्ट कारण नहीं दिखाया गया है, कॉन्फ़िगरेशन यूआरएल से बनाया गया है जिसे आपने योजना के समायोजन के बिना सेट किया है।हो सकता है कि आप अपने कोड में एपीआई के कुछ गलत उपयोग को रद्द करने के लिए अपनी मशीन पर जेजीआईटी में त्वरित डिबगिंग कर सकें ... – centic
यदि मैं आप थे, तो मैं केवल एसएसबी कुंजी – AdamSkywalker