Java 是否可以修改InMemoryRepository中的文件并推送到远程repo?

Java 是否可以修改InMemoryRepository中的文件并推送到远程repo?,java,git,jgit,Java,Git,Jgit,我正在尝试使用JGit自动化一些流程。我能够成功克隆repo并从本地repo修改文件,但我想知道如果我们能够利用InMemoryRepository并将文件加载到内存中,更改所需文件,并将更改推到远程repo,然后在内存中删除repo,这是否可能 我能够从memoryRepository正确获取文件,但不确定如何实际更改文件并将更改后的分支提交到远程repo DfsRepositoryDescription repoDesc = new DfsRepositoryDescription();

我正在尝试使用JGit自动化一些流程。我能够成功克隆repo并从本地repo修改文件,但我想知道如果我们能够利用InMemoryRepository并将文件加载到内存中,更改所需文件,并将更改推到远程repo,然后在内存中删除repo,这是否可能

我能够从memoryRepository正确获取文件,但不确定如何实际更改文件并将更改后的分支提交到远程repo

DfsRepositoryDescription repoDesc = new DfsRepositoryDescription();
        InMemoryRepository repo = new InMemoryRepository(repoDesc);
        Git git = new Git(repo);
        git.fetch()
                .setRemote("url")
                .setRefSpecs("+refs/heads/*:refs/heads/*").setCredentialsProvider(credentialsProvider) // Set permission
                                                                                                        // validation
                .call();


        repo.getObjectDatabase();
        ObjectId lastCommitId = repo.resolve("refs/heads/master");
        RevWalk revWalk = new RevWalk(repo);
        RevCommit commit = revWalk.parseCommit(lastCommitId);
        RevTree tree = commit.getTree();
        TreeWalk treeWalk = new TreeWalk(repo);
        treeWalk.addTree(tree);
        treeWalk.setRecursive(true);
        treeWalk.setFilter(PathFilter.create("pom.xml"));
        if (!treeWalk.next()) {
            return null;
        }
        ObjectId objectId = treeWalk.getObjectId(0);
        ObjectLoader loader = repo.open(objectId);

        InputStream streamm = loader.openStream();
从inputStream中,我可以创建xml对象并对其进行适当修改,但我不确定如何创建xml文件并提交它,就像我们在本地修改它时所做的那样,在推送到远程repo之前,我们可以在本地创建本地分支并提交所有内容

DfsRepositoryDescription repoDesc = new DfsRepositoryDescription();
        InMemoryRepository repo = new InMemoryRepository(repoDesc);
        Git git = new Git(repo);
        git.fetch()
                .setRemote("url")
                .setRefSpecs("+refs/heads/*:refs/heads/*").setCredentialsProvider(credentialsProvider) // Set permission
                                                                                                        // validation
                .call();


        repo.getObjectDatabase();
        ObjectId lastCommitId = repo.resolve("refs/heads/master");
        RevWalk revWalk = new RevWalk(repo);
        RevCommit commit = revWalk.parseCommit(lastCommitId);
        RevTree tree = commit.getTree();
        TreeWalk treeWalk = new TreeWalk(repo);
        treeWalk.addTree(tree);
        treeWalk.setRecursive(true);
        treeWalk.setFilter(PathFilter.create("pom.xml"));
        if (!treeWalk.next()) {
            return null;
        }
        ObjectId objectId = treeWalk.getObjectId(0);
        ObjectLoader loader = repo.open(objectId);

        InputStream streamm = loader.openStream();

任何帮助或提示都将不胜感激,谢谢

您可以使用
ObjectInserter
treeformter
CommitBuilder
创建提交。我不久前写的这篇文章可能会帮助您开始:请注意,InMemoryRepository不是用于生产的。谢谢!如果不是出于上述原因,我能问一下InMemoryRepository最初的用途是什么吗?我想我已经读过一些文章,它是为了测试和作为可插拔对象存储SPI的示例性实现。