有谁知道如何使用JGit API获取文件列表?我尝试在本地存储库(例如
)上使用git show
命令来查找类似的功能
git ls-tree -r --name-only 7feff221f86e040f0cd2e4227e9e1496fe16f376
我有一些类似的代码
File gitDir = new File("/Users/xiansongzeng/NIOServer");
Git git = Git.open(gitDir);
Repository repo = git.getRepository();
ObjectId lastCommitId = repo.resolve("7feff221f86e040f0cd2e4227e9e1496fe16f376");
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("src/main/java/nds/socket/server/Reader.java"));
if(!treeWalk.next()){
System.out.println("Not found.");
return;
}
ObjectId objectId = treeWalk.getObjectId(0);
此代码以本地存储库为目标,使用RevWalk
遍历上次提交的修订树。我发现这个例子使用PathFilter
来获取文件的引用,但不知道如何获取所有Java文件的列表。欢迎提出任何建议。
答案 0 :(得分:1)
建议使用PathSuffixFilter.create(".java")
之类的树过滤器,而不是测试从getPathString
返回的路径。
原因是getPathString
必须解码路径(内部为byte[]
),而PathSuffixFilter
直接在byte[]
上工作。
答案 1 :(得分:0)
ls-tree 在JGit中实现:org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/LsTree.java
用法是
jgit ls-tree [-r|--recursive] <tree-ish> [-- paths...]
cat-file很简单(credit goes to Shawn Pearce at git-dev@eclipse.org mailing list)
int type;
if (argv[0].equals("blob"))
type = Constants.OBJ_BLOB;
...
ObjectId id = ObjectId.fromString(argv[1]);
ObjectLoader ldr = db.open(id, type);
byte[] tmp = new byte[1024];
InputStream in = ldr.openInputStream();
int n;
while ((n = in.read(tmp)) > 0)
System.out.write(tmp, 0, n);
in.close();