我的代码只删除解析文件中Jenkins名称的文件。我想在最后一次提交中删除基于作者(Jenkins)的文件。什么是最好的解决方案?
def changelogPath = "C:\\test"
def PackID = "test"
def delete(String changelogPath, String PackID) {
String folderPath = "$changelogPath"+ "\\" + "$PackID"
new File(folderPath).eachFile(FileType.FILES) { file ->
if (file.name.contains('Jenkins')) file.delete()
}
delete(changelogPath, PackID)
答案 0 :(得分:0)
为了查找已使用某个提交更改的所有文件,您需要与其前一个提交的差异。
你可以让JGit计算一个DiffEntries列表,如下所示:
ObjectReader reader = git.getRepository().newObjectReader();
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
ObjectId oldTree = git.getRepository().resolve( "HEAD^{tree}" );
oldTreeIter.reset( reader, oldTree );
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
ObjectId newTree = git.getRepository().resolve( "HEAD~1^{tree}" );
newTreeIter.reset( reader, newTree );
DiffFormatter df = new DiffFormatter( new ByteArrayOutputStream() );
df.setRepository( git.getRepository() );
List<DiffEntry> entries = df.scan( oldTreeIter, newTreeIter );
每个DiffEntry
都有一个路径,表示添加,更改或删除的文件。该路径相对于存储库的工作目录的根目录。实际上,有一个oldPath和newPath,请参阅JavaDoc使用哪一个。
另请参阅此处,了解JGit diff API的一般概述:http://www.codeaffine.com/2016/06/16/jgit-diff/