使用JGit向GitHub仓库提交文件失败:提交创建但文件未添加
问题分析与修复方案
核心问题1:重复初始化仓库
你先执行Git.cloneRepository()克隆仓库,紧接着又调用Git.init()重新初始化,这会覆盖克隆得到的仓库配置(包括远程仓库地址、分支关联等),导致后续提交无法推送到正确的远程仓库。
直接删除Git.init()这一行即可,克隆操作已经完成了仓库的初始化工作。
核心问题2:Add操作参数错误
git.add().setUpdate(true)的作用是只更新已被Git追踪的文件,对于新创建的文件会完全忽略。如果要添加新文件,必须去掉setUpdate(true)。
其他需要注意的点
- 克隆后确保本地分支是
main:克隆默认会检出远程默认分支(GitHub当前默认是main),若分支不匹配可显式切换。 - 确认文件路径正确:
directoryName+fileName需是相对于仓库根目录的路径,比如文件在docs/note.txt就写docs/note.txt,根目录下的文件直接写fileName。
修复后的代码片段
// 克隆仓库,无需再执行init Git.cloneRepository() .setURI("https://github.com/"+org+"/"+repo+".git") .setCredentialsProvider(credentialsProvider) .setDirectory(new File(Gitpath)) .setCloneAllBranches(true) .call(); var git = Git.open(new File(Gitpath)); // 可选:若克隆后分支不是main,显式切换 git.checkout().setName("main").call(); // 添加文件:去掉setUpdate(true),确保新文件被追踪 git.add().addFilepattern(directoryName+fileName).call(); // 提交 git.commit().setMessage("Adding files.").call(); // 推送时显式指定远程分支,避免匹配错误 git.push() .setCredentialsProvider(credentialsProvider) .setRemoteBranchName("main") .call();
额外验证步骤
- 查看本地仓库目录下的
.git/config文件,确认[remote "origin"]的url正确指向你的GitHub仓库。 - 提交后用
git log查看本地提交是否存在,再手动执行git push origin main测试推送是否成功。
内容的提问来源于stack exchange,提问作者vk l
相关产品推荐
相关产品推荐

