2016-12-09 2 views
1

자바 애플리케이션을 통해 커밋 내역을 얻으려면 Git 원격 저장소에 액세스해야합니다. JGit, 나는 옵션이있다. 그 문서에서 저장소에 액세스하기 위해 복제본을 만들어야한다는 것을 알게되었습니다.복제하지 않고 원격 저장소에 액세스하는 Git API

JGit 또는 다른 API를 사용하여 원격으로 (즉, 복제하지 않고) 저장소에 액세스 할 수 있습니까?

커밋 기록 만 얻는 데 관심이 있으니 저장소를 복제하고 최신 커밋 기록을 볼 때마다 업데이트를 가져 오는 것이 중요하지 않습니다.

모든 의견을 환영합니다.

+0

아마 https://developer.github.com/v3/ – nullpointer

+0

상기 뭔가를 찾고 커밋 히스토리 *는 저장소입니다.'git log'의 출력처럼 커밋 로그 메시지, 날짜 및 시간을 의미합니까? 저장소를 복제하는 것이 더 나을 것입니다. 웹 API를 통해 가져 오는 것보다 빠르며 업데이트를 관리 할 필요가 없습니다. – Schwern

+0

git ls-remote는 복제 할 필요가없는 몇 가지 명령 중 하나라고 생각합니다. 그러나 커밋을 가져 오지는 않습니다. – pedrorijo91

답변

1

Github API을 사용하면이 작업을 수행 할 수 있지만 리포지토리를 복제하는 것이 훨씬 빠르고 쉽습니다.

특히 get all references이고 지점 용 필터 (refs/heads/...)입니다. 그런 다음 get the latest commit on each branch을 가져온 다음 저장소의 루트에 도달 할 때까지 부모와 부모를 가져옵니다.

커밋은 여러 부모를 가질 수 있으므로 커밋을 선형으로 저장할 수는 없으므로 그래프를 작성해야합니다.

각 커밋을 가져 오는 작업은 별도의 웹 요청입니다.

그리고 너는 rate limited to 5000 requests per hour입니다.

업데이트를 받으려면 이전에 보았던 커밋을 얻을 때까지이 과정을 반복하십시오. 이것은 적어도 커밋 정보를 어딘가에 저장해야한다는 것을 의미합니다. 리베이스가 브랜치 헤드를 변경할 수 있기 때문에 브랜치 헤드의 ID 만 저장하는 것으로는 충분하지 않습니다.


또는 디스크 공간의 좋은 덩어리를 저장 (그러나 네트워크되지 않음)하는 체크 아웃하지 않고 저장소를 얻을 수있는 베어 복제, git clone --bare을 할 수 있습니다. 그런 다음 일반적인 Git 절차를 사용하여 기록을 검사하십시오.

Git 저장소 형식은 매우 효율적이며 종종 전체 기록이 현재 체크 아웃 크기보다 크지 않습니다. 네트워크 프로토콜 또한 매우 효율적입니다. 그리고 그것은 단지 git fetch origin으로 자신을 업데이트하는 방법을 알고 있습니다. 그냥 눈으로 얼핏을 원하는 경우


는 또는 프로젝트의 Github에서 페이지의 Commits 탭을 사용합니다. For example.

+0

게시 해 주셔서 감사합니다. Github API의 Java 구현은이를 수행하는 쉬운 방법 인 것 같습니다. – Sahana

0

Schwern이 지적한대로 커밋 내역 저장소입니다.

git 저장소의 히스토리를 걷는 현명한 방법은 먼저 복제하는 것입니다. 기록에만 관심이 있다면 체크 아웃을 생략하거나 베어 클론을 만들 수 있습니다.

Git git = Git.cloneRepository() 
    .setURI("https://example.org/repo.git") 
    .setDirectory("/path/to/local/copy") 
    .setNoCheckout(true) // or .setBare(true) 
    .call(); 

이 JGit의 CloneCommand에 대한 자세한 내용은이 문서를 참조하십시오 : JGit,이 같은 CloneCommand를 사용 http://www.codeaffine.com/2015/11/30/jgit-clone-repository/

관련 문제