【问题标题】:Get Commit of a particular SHA-1 in jGit在 jGit 中获取特定 SHA-1 的提交
【发布时间】:2017-02-01 14:26:58
【问题描述】:

我有一个新克隆的存储库的 SHA-1。我想要这个 SHA-1 的作者缩进。

所以我需要使用 RevWalk 并迭代整个存储库?或者是否有 findXX 方法或其他代码可用于获取 RevCommit 或其他具有 PersonIdent 的对象?

我尝试了什么:

public void authorInfoOf(Repository repo, AnyObjectId head) {
    try {
        try (RevWalk walk = new RevWalk(repo)) {
            ObjectDatabase db = repo.getObjectDatabase();
            ObjectLoader k = repo.newObjectReader().open(head);
            ObjectReader s;
            // repo.newObjectReader().open(head);
            ObjectStream st = k.openStream();
            // RevWalk rw2 = new RevWalk(k);
            RevCommit commit = null;// walk.parseCommit(ref.getObjectId());

            PersonIdent authorIndent = commit.getAuthorIdent();
            System.out.println("\nCommit-Message: " + commit.getFullMessage() + " " + authorIndent.getEmailAddress());
        }
    } catch (Exception e) {
        System.out.println("Authir info of Anybject id Err " + e);
        e.printStackTrace();
    }
}

【问题讨论】:

标签: jgit


【解决方案1】:

RevCommit 代表 Git 存储库中的特定提交。使用 RevWalk::parseCommit() 获取特定对象 id/SHA-1 的 RevCommit。

例如:

try( RevWalk walk = new RevWalk( repository ) ) {
  RevCommit commit = walk.parseCommit( ref.getObjectId() );
}

parseCommit 返回给定ObjectId 的匹配提交对象。

要将 SHA-1(字符串)转换为 ObjectId,请使用 ObjectId::fromString():

ObjectId commitId = ObjectId.fromString( "ab434..." );

另请参阅:How to obtain the RevCommit or ObjectId from a SHA1 ID string with JGit?

在上面的示例中,Ref 用于引用对象 ID。 Refs 表示对对象 ID(如分支、标签或特殊引用(如 HEAD))的命名引用。 Repository::exactRef() 可用于将字符串解析为Ref 对象。

例如:

Ref headRef = repository.exactRef( "HEAD" );

【讨论】:

  • 是的,知道如何获取头部,但我可以使用它来获取 Sha-1 提交的 Ref r1 = repo.exactRef("0375381d0f467d55c832b50aca54ad16858baa8b"); - 给了我一个大胖子。如何使用 SHA 获取 ref?
【解决方案2】:

这对我有用:

public RevCommit getCommit(String idString, Repository repository, Git git){
    try{

        ObjectId o1 = repository.resolve(idString);
        if(o1 != null){
            try( RevWalk walk = new RevWalk( repository ) ) {
                  RevCommit commit = walk.parseCommit( o1 );
                  PersonIdent ai = commit.getAuthorIdent();
                  System.out.println("bbb >>" + ai.getEmailAddress() + "|" + ai.getTimeZone()  + "|" + ai.getWhen() + ", ref :" + idString);
                  return commit;
                }
        }else{
            System.err.println("Could not get commit with SHA :" + idString);
        }
    }catch (Exception e) {
        System.out.println("err :" + e);
        e.printStackTrace();
    }
    return null;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2012-11-18
    • 1970-01-01
    • 2012-09-11
    • 2019-03-03
    相关资源
    最近更新 更多