1
일부 테스트 커밋 (모두 기본 분기)이있는 리포지토리가 있습니다. 명령을 로그 JGit 사용 , 나는이가 (exemple를 위해) 커밋 볼 수 있습니다Jgit RevWalk.parseCommit() throw MissingObjectException
RepositoryBuilder builder = new RepositoryBuilder();
Repository repository = builder.setWorkTree("/tmp/myworkingdir").readEnvironment().findGitDir().build();
Git git = new Git(repository);
for (RevCommit commit : git.log().call()) {
System.out.println("commit: " + commit.getId());
}
결과 :
commit: commit f34a848371ff334b2e85aa16fbf9b871d028b443 1371652639 ----sp
commit: commit 33603f8c1c47712d45eb0db4b1827bbd113c2428 1371652639 ----sp
commit: commit d52bd5c768263a957d99975f5482020ffc3434d5 1371652639 ----sp
하지만 문자열 SHA1에서 RevCommit를 얻으려고 할 때 마지막 줄에 실패
ObjectId revid = repository.resolve("33603f8c1c47712d45eb0db4b1827bbd113c2428");
RevWalk revWalk = new RevWalk(repository);
RevCommit commit = revWalk.parseCommit(revid);
예외 :
org.eclipse.jgit.errors.MissingObjectException: Missing unknown 33603f8c1c47712d45eb0db4b1827bbd113c2428
at org.eclipse.jgit.storage.file.WindowCursor.open(WindowCursor.java:126)
at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:229)
at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:817)
at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:730)
이 조각의
내가 뭘 잘못하고 있니? 저장소의 솔루션 초기화가 액세스 부분에 잘못
..
API 사용이 올바른 것으로 보입니다. 'repository'와'git.getRepository()'가 같은 저장소입니까? 이 코드를 어떻게 실행합니까? 이전 코드에서 생성 한 저장소입니까? (커밋 시간 때문에 커밋 ID가 다를 수 있습니다)? – robinst
나는 저장소와 git.getRepository()를 시도했지만 변화가 없었다. 리포지토리는 예전의 코드 예에 의해 생성되지만 실제 시나리오에서는 매번 git log 명령에서 커밋 ID를 가져오고 생성과 액세스 간에는 변경하지 않아야합니다. : s –
github에서 직접 복제 한 저장소이고 동일한 문제가 발생합니다. git log를 사용하고 하나의 커밋 ID를 "임의로"가져 와서 이후에 액세스하려고하면이 org.eclipse.jgit.errors.MissingObjectException이 발생합니다. .. –