如何使用grgit获取提交的更改路径?
在下面的代码中,我得到了一个grgit提交对象,它有关于提交的元数据,但没有修改过的文件列表。我想获得等同于git log --name-status --reverse --pretty=format:'%H'的东西
有没有什么想法可以把一个提交sha转换成一个包含路径和修改类型细节的grgit或jgit对象呢?
def commits = grgit.log {
range('sha', 'HEAD')
}
commits.each { def change ->
def description = grgit.describe { commit = change }
println description
println change
}发布于 2020-06-22 01:15:43
对于它所做的事情,grgit是很好的,它还带来了jgit +,它提供了对较低层的访问
所以,我们可以这样做
获取某个范围的RevCommit对象列表
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.treewalk.TreeWalk
import org.eclipse.jgit.diff.DiffFormatter
import org.eclipse.jgit.treewalk.CanonicalTreeParser
import org.eclipse.jgit.diff.DiffEntry
import org.eclipse.jgit.treewalk.filter.PathFilter
def getCommits(def early, def later='HEAD') {
Git git = grgit.repository.jgit
def earliest = git.repository.resolve(early)
def latest = git.repository.resolve(later)
return git.log()
.addRange(earliest, latest)
.call()
}每次提交获取差异信息
for (def commit in getCommits(earliestCommitId, latestCommitId)) {
for (DiffEntry diffEntry in diffCommitWithParent(commit, pathFilter)) {
println diffEntry // you'd want to do something more useful here
}
}
def diffCommitWithParent(def commit, def pathFilter) {
Git git = grgit.repository.jgit
def previousTree = commit.getParentCount() > 0 ? commit.getParent(0).getTree() : null
def currentTree = commit.getTree()
def reader = git.repository.newObjectReader()
def treeParserPrevious = new CanonicalTreeParser(null, reader, previousTree)
def treeParserCurrent = new CanonicalTreeParser(null, reader, currentTree)
return git.diff()
.setOldTree(treeParserPrevious)
.setNewTree(treeParserCurrent)
.setPathFilter(new PathFilter(pathFilter))
.call()
}https://stackoverflow.com/questions/62478446
复制相似问题