JGit에서 해당 분기를 체크 아웃하지 않고 대상 분기의 내용을 보여주고 싶습니다. 예를 들어 현재 분기가 iss1
인 동안 README.md
의 내용을 master
분기로 표시합니다. 동일한 Git 명령은 다음과 같아야합니다.Jit의 대상 분기에 Git show 파일이 있습니까?
myProj (iss1) $ git show master:README.md
Hello world!
JGit을 사용하여 어떻게 할 수 있습니까?
JGit에서 해당 분기를 체크 아웃하지 않고 대상 분기의 내용을 보여주고 싶습니다. 예를 들어 현재 분기가 iss1
인 동안 README.md
의 내용을 master
분기로 표시합니다. 동일한 Git 명령은 다음과 같아야합니다.Jit의 대상 분기에 Git show 파일이 있습니까?
myProj (iss1) $ git show master:README.md
Hello world!
JGit을 사용하여 어떻게 할 수 있습니까?
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을 읽을 수 있습니다.
https://stackoverflow.com/questions/10993634/how-do-i-do-git-show-sha1file-using-jgit – kan