2017-09-22 5 views
1

JGit에서 해당 분기를 체크 아웃하지 않고 대상 분기의 내용을 보여주고 싶습니다. 예를 들어 현재 분기가 iss1 인 동안 README.md의 내용을 master 분기로 표시합니다. 동일한 Git 명령은 다음과 같아야합니다.Jit의 대상 분기에 Git show 파일이 있습니까?

myProj (iss1) $ git show master:README.md 
Hello world! 

JGit을 사용하여 어떻게 할 수 있습니까?

+0

https://stackoverflow.com/questions/10993634/how-do-i-do-git-show-sha1file-using-jgit – kan

답변

1

JGit에 git show과 직접적인 기능은 없지만 명령 자체를 구현하는 API를 제공합니다.

분기에 대한 참조가 모두있는 경우 먼저 머리 커밋의 트리 ID를 확인해야합니다.

ObjectId masterTreeId = repository.resolve("refs/heads/master^{tree}"); 

트리 ID를 감안할 때, 당신이 원하는 파일의 내용을 보유하고있는 BLOB ID를 얻기 위해 TreeWalk을 사용할 수 있습니다 : 다행히도, Repository::resolve 필요한 나무의 ID를 반환하는 식을 받아들입니다.

TreeWalk treeWalk = TreeWalk.forPath(git.getRepository(), "readme", masterTreeId); 
ObjectId blobId = treeWalk.getObjectId(0); 

forPath 공장 메소드는 TreeWalk를 생성하고 두 번째 인수로 주어진 경로에 그것을 배치.

차례로 blob id를 사용하면 Git의 객체 데이터베이스에서 내용을로드 할 수 있습니다.

ObjectReader objectReader = repository.newObjectReader(); 
ObjectLoader objectLoader = objectReader.open(blobId); 
byte[] bytes = objectLoader.getBytes(); 
objectReader.close(); 

완전한 소스 코드

는 여기에서 찾을 수 있습니다 : 망할 놈의 오브젝트 데이터베이스의 내부 동작에 대한 자세한 내용은 https://gist.github.com/rherrmann/0c682ea327862cb6847704acf90b1d5d

, 당신은 Explore Git Internals with the JGit API을 읽을 수 있습니다.

관련 문제