2013-10-22 7 views
0

사용자가 업로드 한 파일을 유지 관리해야하는 프로젝트에 JGit을 사용하고 있습니다. 파일이 이미있는 경우 새 파일을 만들고 커밋/업로드 된 파일 집합과 연결합니다.JGit 확장 성 제한

각 파일이 업로드 된 파일 즉, 서버 시스템의 저장소에 커밋하고 DB에 저장된 파일을 추가하여 고객과 해당 파일 버전 목록, 즉 commitIds를 연결합니다.

그러나 업로드 파일을 거의 반복하지 않으면 (각 업로드는 약 200 개의 파일로 구성 될 수 있음) JGit은 파일을 커밋하고 commitIds를 올바르게 생성 할 수는 있지만 커미트 된 파일을 다시 보여줄 때 파일의 내용을 확인할 수는 없습니다 .

불행히도 파일을 복구하는 동안 로그에 오류가 표시되지 않습니다.

따라서 나는 길을 잃었습니다. 그리고 무엇이 잘못되었는지를 이해하기 위해 애 쓰고 있습니다.

내 질문은 :

  1. 가 JGIT 충분한 확장 성을 가지고 있습니까? 즉, 가져 오는 시간은 성장함에 따라 충분히 빠릅니까?

  2. 파일을 올바르게 검색하면 어떻게해야합니까? 다음은

내가 DestFile이 위

FileUtils.copyFile(aFile,destFile); 
AddCommand add = git.add(); 
add.addFilepattern(".").call(); 
CommitCommand commit = git.commit(); 
commit.setAuthor(user.getFirstName(), user.getUserId()); 
commit.setMessage("comments").call(); 
ObjectId lastCommitId = git.getRepository().resolve(org.eclipse.jgit.lib.Constants.HEAD); 

는 GIT 저장소입니다 사용하고 코드의 조각과 aFile 변수는 파일 이름 난의 내용을 가져 오지 애 쓰고 lastCommitId를 사용

입니다 그 파일은 내가 받고 :

MissingObjectException: Missing unknown 0000000000000000000000000000000000000000 

파일을 구하는 데 사용되는 코드는 :

답변

0

'missing unknown 0000'은 참조 중 하나가 누락되었음을 나타내며 objectId에 대해 null이 반환됩니다. 조회를 수행 할 때 objectId.equals(ObjectId.zeroId())인지 확인해야합니다.

리포지토리가 (JGit 또는 독립 실행 형 Git 클라이언트와 함께) 가비지 수집을 필요로하는지 확인하고 싶을 수도 있습니다. 기본적으로 JGit은 자동 가비지 수집을 수행하지 않습니다.

call() 메서드를 호출하고 커밋을 다시받을 때까지 커밋이 데이터베이스에 삽입되지 않습니다. 아마도 코드에서 찾을 수없는 이유일까요?

+0

AlBlue, 고맙습니다.하지만 저에게 commitId가있는 객체가있을 때 왜 저에게 zeroId가 생기는 이유는 무엇입니까? "MissingObjectException : Missing unknown 0000000000000000000000000000000000000000"이되는 것을 피하는 방법? – user2907154

+0

코드에서 생성과 동일한 프로세스에서 커밋을 시도하고 있습니까? 실제로 데이터베이스에 지속되는'call()'을 수행하지 않는 것으로 보입니다. 그래서 그 커밋을 열려고 시도하면'call()'으로 커밋되기 전에 커밋의 id가'0000 ... '이기 때문에 누락 된 객체 예외가 발생합니다. – AlBlue