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