首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取与git日志等效的grgit日志--名称-状态--反向--pretty=格式:‘%H’

获取与git日志等效的grgit日志--名称-状态--反向--pretty=格式:‘%H’
EN

Stack Overflow用户
提问于 2020-06-20 04:57:53
回答 1查看 143关注 0票数 0

如何使用grgit获取提交的更改路径?

在下面的代码中,我得到了一个grgit提交对象,它有关于提交的元数据,但没有修改过的文件列表。我想获得等同于git log --name-status --reverse --pretty=format:'%H'的东西

有没有什么想法可以把一个提交sha转换成一个包含路径和修改类型细节的grgit或jgit对象呢?

代码语言:javascript
复制
    def commits =  grgit.log {
        range('sha', 'HEAD')
    }
    commits.each { def change ->
        def description = grgit.describe { commit = change }
        println description
        println change
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-22 01:15:43

对于它所做的事情,grgit是很好的,它还带来了jgit +,它提供了对较低层的访问

所以,我们可以这样做

获取某个范围的RevCommit对象列表

代码语言:javascript
复制
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()
}

每次提交获取差异信息

代码语言:javascript
复制
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()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62478446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档