我在我的项目中使用 JGit,我必须维护用户上传的文件。如果该文件已经存在,那么它将创建相同的新版本并将客户与他提交/上传的文件集相关联。
它在本地工作文件,即上传的每个文件,将其提交到存储库,即服务器机器上,并将相同的记录添加到数据库中,以关联客户及其各自的文件版本控制列表,即 commitIds。
但是经过几次上传文件的迭代(每次上传可能包含大约 200 个文件),JGit 能够提交文件并正确生成 commitId,但在向用户显示提交的文件时无法检索文件的内容。
不幸的是,在检索文件时日志没有显示任何错误。
因此我迷路了......并且努力理解这里有什么问题。
我的问题是:
JGIT 有足够的可扩展性吗?即,随着它的增长,获取时间会足够快吗?
如果我正确检索文件该怎么办。
下面是我正在使用的一段代码
FileUtils.copyFile(aFile,destFile);
AddCommand add = git.add();
add.addFilepattern(".").call();
CommitCommand commit = git.commit();
commit.setAuthor(user.getFirstName(), user.getUserId());
commit.setMessage("comments" ).call();
ObjectId lastCommitId = git.getRepository().resolve(org.eclipse.jgit.lib.Constants.HEAD);
上面的 destFile 是 GIT 存储库,aFile 是文件名
使用 lastCommitId 我试图检索文件的内容,但我得到:
MissingObjectException: Missing unknown 0000000000000000000000000000000000000000
用于检索文件的代码是:
ObjectId lastCommitId = repo.resolve(lastCommitId);
RevTree tree = commit.getTree();
TreeWalk treeWalk = new TreeWalk(repo);
treeWalk.addTree(tree);
treeWalk.setRecursive(true);
treeWalk.setFilter(PathFilter.create("actial_File_Name")); //this is actual file name i used
boolean next = treeWalk.next();
if (next)
{
ObjectId objectId = treeWalk.getObjectId(0);
log.logError(" objectId :" + objectId );
try{
ObjectLoader loader = repo.open(objectId);
OutputStream out = new FileOutputStream(targetFile); ///targetFile is the actual file name i wanted to retreive the content i.e orginal name
loader.copyTo(out);
}
}