Java 如何使用JGit中的内存数据库进行git拉取?
我想创建一个Java程序Java 如何使用JGit中的内存数据库进行git拉取?,java,git,jgit,Java,Git,Jgit,我想创建一个Java程序 连接到某个Git存储库 将文本追加到文件中 提交和 将更改推送到该存储库 理想情况下,所有这些都应该发生在内存中 我使用JGit与Git交互: InMemoryRepository repo = new InMemoryRepository(new DfsRepositoryDescription()); Git git = new Git(repo); git.init().call(); PullCommand pull = git.pull(); StoredC
InMemoryRepository repo = new InMemoryRepository(new DfsRepositoryDescription());
Git git = new Git(repo);
git.init().call();
PullCommand pull = git.pull();
StoredConfig config = git.getRepository().getConfig();
config.setString("remote", "origin", "url", "https://XXX");
config.save();
PullResult result = pull.call();
pull.call()
导致以下异常:
org.eclipse.jgit.api.errors.NoHeadException:当前不支持无HEAD的拉入存储库
位于org.eclipse.jgit.api.PullCommand.call(PullCommand.java:191)
如何将存储库的内容检索到内存中的JGit存储库中?要附加文件,您需要一个非裸存储库(具有工作目录的存储库)。声明 在某些情况下,特别是涉及到工作树时,Ce瓷命令以文件为基础。如果您自己执行工作,则可以执行内存存储库中的插入,但Ce瓷命令不能以这种方式工作
虽然你可以,但我也推荐(如上面的@Wayne评论)要克隆到临时存储库中,请附加到文件中,推送然后删除存储库。您必须发出
获取
可能我在这方面不是专业人士,但我从未听说有人试图在内存中访问git-不过我有一个建议..尝试将存储库加载到临时目录中(通过File.mkdirs创建目录时使用File.deleteOnExit函数),然后将所有这些文件加载到内存中,保存所做的任何修改,然后将git与临时目录重新同步。no HEAD
可能意味着您需要先签出某个分支(checkout master
或任何其他分支)@LeGEC你能画出git命令的序列吗?现在,我正在做:1)git init
2)git remote add origin…
3)git pull origin
。当我从命令行使用git时,它通常是这样工作的。@DmitriPisarenko:试着了解在new git(repo)
命令和git.init().call()命令之后的活动分支是什么。查看JGit的文档,了解其工作原理的更多详细信息。