使用JGit推送代码至Bitbucket遇权限及Origin未找到问题求助
解决JGit推送到Bitbucket的两类问题
1. 修复"origin not found"错误
- 先检查本地仓库是否配置了
origin远程地址:
用JGit代码验证:
如果输出为空,说明需手动添加Git git = Git.open(new File("/你的仓库路径")); String originUrl = git.getRepository().getConfig().getString("remote", "origin", "url"); System.out.println("Origin地址: " + originUrl);origin远程:git.remoteAdd() .setName("origin") .setUri(new URIish("ssh://git@bitbucket.org/你的用户名/你的仓库名.git")) .call(); - 若克隆时用的是SSH URL,默认会自动生成
origin配置,若后续修改配置导致丢失,重新添加即可。
2. 解决"not authorized"未授权错误
你能通过SSH克隆成功,说明SSH密钥对有效,问题多出自推送时的协议或凭证配置:
场景1:使用SSH协议推送(推荐)
JGit通过SSH推送需配置会话工厂,加载你的私钥:
// 配置SSH会话工厂 SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() { @Override protected void configure(OpenSshConfig.Host host, Session session) { session.setConfig("StrictHostKeyChecking", "no"); // 可选,跳过首次连接的主机密钥验证 } @Override protected JSch createDefaultJSch(FS fs) throws JSchException { JSch jsch = super.createDefaultJSch(fs); // 替换为你的私钥路径,比如~/.ssh/id_rsa jsch.addIdentity("/用户目录/.ssh/id_rsa"); return jsch; } }; SshSessionFactory.setInstance(sshSessionFactory); // 执行推送 Git git = Git.open(new File("/你的仓库路径")); git.push().call();
配置后,推送会自动用SSH密钥验证,无需额外输入用户名密码或令牌。
场景2:使用HTTPS协议推送
Bitbucket已禁用账号密码登录,必须使用应用密码:
- 先在Bitbucket账号的「App passwords」页面创建应用密码,勾选
Repository write权限; - 在JGit中配置凭证提供者:
CredentialsProvider provider = new UsernamePasswordCredentialsProvider( "你的Bitbucket用户名", "刚创建的应用密码" ); Git git = Git.open(new File("/你的仓库路径")); git.push() .setCredentialsProvider(provider) .call();
额外排查项
- 仓库权限:确认你的账号(或应用密码对应账号)拥有目标仓库的写入权限;
- 清除旧凭证:若之前配置过错误凭证,JGit可能复用系统存储的内容,手动指定
CredentialsProvider可覆盖; - 远程URL一致性:推送用的远程URL要和克隆时一致,避免SSH/HTTPS混用导致验证失败。
内容的提问来源于stack exchange,提问作者vk l
相关产品推荐
相关产品推荐

