사용자 도구

사이트 도구


git:gitblit

문서의 이전 판입니다!


Gitblit

설치시 주의점

  • Tomcat 6.0.10 이상 버전에서는 /,\가 이스케이프되어 URL이 제대로 인식 안되는 문제가 발생한다.
    • CATALINA_OPTS=-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true 설정을 하고 톰캣을 실행한다.
  • WebServer(nginx/apache) 연동시 대용량 데이터를 커밋하려면 요청 데이터 제한 용량을 풀어줘야한다.
    # nginx 설정
    client_max_body_size 1000M;

Hook

기본 API

import com.gitblit.GitBlit
import com.gitblit.Keys
import com.gitblit.models.RepositoryModel
import com.gitblit.models.TeamModel
import com.gitblit.models.UserModel
import com.gitblit.utils.JGitUtils
import java.text.SimpleDateFormat
import org.eclipse.jgit.lib.Repository
import org.eclipse.jgit.lib.Config
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.transport.ReceiveCommand
import org.eclipse.jgit.transport.ReceiveCommand.Result
import org.slf4j.Logger

커밋/수정 커밋 메시지 및 파일 정보 확보

Exporting files on post-receive hook. 대한 답변 참조

Repository r = gitblit.getRepository(repository.name)
 
for (ReceiveCommand command : commands) {
    def updateType = command.type
    def updatedRef = command.refName
 
    logger.info("## ${command.type} - ${command.refName}")
 
    def commits = JGitUtils.getRevLog(r, command.oldId.name, command.newId.name).reverse()
 
    switch (command.type) {
        case ReceiveCommand.Type.CREATE:
        case ReceiveCommand.Type.UPDATE:
        case ReceiveCommand.Type.UPDATE_NONFASTFORWARD:
            for (def commit in commits) {
                // commit : org.eclipse.jgit.revwalk.RevCommit
                logger.info("## commit.fullMessage : ${commit.fullMessage}") // 커밋 로그 메시지
 
                def files = JGitUtils.getFilesInCommit(r, commit)
 
                files.each { file ->
                    // 커밋/수정된 파일 정보 file : com.gitblit.models.PathModel
                    logger.info("## Commit File ${file.name} - ${file.path}")
                }
            }
    }
}

Commit Reject

boolean success = true
 
commands.each { ReceiveCommand command ->
    if (...) {
        command.setResult(Result.REJECTED_OTHER_REASON, "${repository.name} 리포지토리에 커밋 실패");
        success = false
        break
    }
}
 
....
 
// 스크립트 마지막에서 결과리턴
return success

Repository Mailing List 정보 확보

  • 각 리포지토리의 설정에 보면 메일링 리스트 부분이 있다.
  • 여기에 이메일 주소를 공백으로 구분하여 넣으면, Groovy Script에서 List<String>으로 읽어오는것이 가능하다.
  • 이 값은 data/git/[Repository]/config 파일의 [gitblit] 섹션에 문자열로 저장된다.
  • 리포지토리에 설정된 mailingList
    Repository r = gitblit.getRepository(repository.name)
    Config config = r.getConfig()
    def mailinglist = config.getStringList('gitblit', null, 'mailingList') // 'gitblit'은 섹션명, null 은 서브 섹션, 'mailingList'는 설정 키
     
    logger.info("## mailing list ${mailinglist}")
  • data/gitblit.propertiesmail.mailingLists에 지정한 Gitblit 전역 mailingLists 값
    import com.gitblit.Keys
     
    List globalMailingLists = gitblit.getStrings(Keys.mail.mailingLists)

메일 발송

  • 기본적으로 gitblit.sendMail('제목', '내용', [toAddr,…]) 로 메일을 보낼 수 있다.
  • gitblit.propertiesmail.* 프라퍼티에 이메일 서버 정보를 저장해 둘 수 있다.
git/gitblit.1370331971.txt.gz · 마지막으로 수정됨: 2013/06/04 16:46 저자 kwon37xi