在 jGit 中获取特定 SHA-1 的提交
Get Commit of a particular SHA-1 in jGit
我有一个新克隆的存储库的 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();
}
}
RevCommit
表示 Git 存储库中的特定提交。使用 RevWalk::parseCommit()
获取特定对象 id/SHA-1.
的 RevCommit
例如:
try( RevWalk walk = new RevWalk( repository ) ) {
RevCommit commit = walk.parseCommit( ref.getObjectId() );
}
parseCommit
returns 给定 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。 Ref
s 表示对对象 ID 的命名引用,如分支、标签或特殊引用,如 HEAD。 Repository::exactRef() 可用于将字符串解析为 Ref
对象。
例如:
Ref headRef = repository.exactRef( "HEAD" );
这对我有用:
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;
}
我有一个新克隆的存储库的 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();
}
}
RevCommit
表示 Git 存储库中的特定提交。使用 RevWalk::parseCommit()
获取特定对象 id/SHA-1.
RevCommit
例如:
try( RevWalk walk = new RevWalk( repository ) ) {
RevCommit commit = walk.parseCommit( ref.getObjectId() );
}
parseCommit
returns 给定 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。 Ref
s 表示对对象 ID 的命名引用,如分支、标签或特殊引用,如 HEAD。 Repository::exactRef() 可用于将字符串解析为 Ref
对象。
例如:
Ref headRef = repository.exactRef( "HEAD" );
这对我有用:
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;
}