프로젝트 포크

gitlab 은 github 처럼 프로젝트를 포크하여 개별적으로 진행하고 원래 프로젝트에 변경 내역을 보내서 반영하는 프로세스로 개발을 진행할 수 있다. github 와 다른 점은 변경 요청을 보내는 기능이 Pull Request 가 아니라 Merge Request 라는 점만 주의하면 된다.

이제 원래 spring-web 프로젝트를 포크하기 위해 새로 생성된 계정으로 로그인한후에 대쉬보드에서 우측의 프로젝트 목록에서 spring-web 프로젝트를 선택해서 프로젝트 화면으로 들어가 보자. 

프로젝트 화면에서 우측의 Fork Repository 를 클릭하면 현재 프로젝트를 포크할 수 있다. 포크하면 포크된 개인 프로젝트 화면으로 변경되고 Fork Repository 메뉴는  Forked from: SpringWebDevel / spring-web 와 같이 원본 저장소를 링크하게 변경이 된다. 이제 위에 있는 포크된 저장소의 URL 을 clone 하여 로컬에 git 저장소를 복제해 보자. 원본 저장소의 URL은 git@gitlab.example.com:lesstif/demo-webapp.git 이고 포크한 저장소의 URL 은 git@gitlab.example.com:dev01/demo-webapp.git 이다.

  1. 시작 메뉴에서 명령창을 열고 cmd.exe 를 구동한다.
  2. git clone 명령을 실행한다.    
    git git@gitlab.example.com:dev01/demo-webapp.git
  3. cd spring-web 명령으로 복제된 저장소로 이동한다.
  4. git remote -v 명령어로 원격 저장소의 정보를 출력한다.

    git remote -v
    origin git@gitlab.example.com:dev01/demo-webapp.git (fetch)
    origin git@gitlab.example.com:dev01/demo-webapp.git (push)

  5. 변경 작업시 원본 저장소의 변경 내역을 참고할 수 있게 원본 저장소의 정보를 remote 에 추가한다. github 에서는 원본 저장소의 이름은 upstream 으로 관례상 많이 설정하므로 gitlab 에서도 upstream 이라는 이름으로 설정해 놓는다.
    git remote add upstream git@gitlab.example.com:lesstif/demo-webapp.git
  6. git remote 명령어로 원격 저장소의 정보를 다시 확인한다.

    git remote -v

    origin git@gitlab.example.com:dev01/demo-webapp.git (fetch)
    origin git@gitlab.example.com:dev01/demo-webapp.git (push)
    upstream git@gitlab.example.com:lesstif/demo-webapp.git (fetch)
    upstream git@gitlab.example.com:lesstif/demo-webapp.git (push)

  7. 이제 git fetch 명령어로 원본 저장소의 변경 내역을 받아올 수 있다.

    git fetch upstream

    From gitlab.example.com:lesstif/demo-webapp
    * [new branch] master -> upstream/master


머지 리퀘스트 보내기

이제 dev01 계정으로 수정한 내역을 upstream 으로 머지 리퀘스트를 보내서 gitlab 의 개발 프로세스를 익혀 보자.

예제를 위해 pom.xml 의 <org.springframework-version> 항목의 3.2.6.RELEASE 부분을 3.2.8.RELEASE 로 변경하자

변경이 완료되었으면 git 의 staging 영역에 변경된 파일을 추가한다.

    git add pom.xml

이제 로컬 저장소에 커밋 하자.

    git commit -m "스프링 버전 변경"

remote 의 마스터 브랜치에 변경 내역을 전송하자.

    git push origin master

이제 gitlab 의 dev01 계정으로 로그인하면 커밋 내역이 표시될 것이다. 상단의 메뉴중에 Merge Requests 를 클릭해서 머지 리퀘스트를 만들어 보자.

  1. 우측 상단의 New Merge Request 를 클릭한다.

  2. From 에서 Fork한 프로젝트를 선택하고 master 브랜치를 선택한다. To 항목에는 요청을 보낼 원저자의 저장소와 브랜치를 선택하고 Title 에 변경 내역을 입력하고 Submit merge request 를 클릭하면 생성이 완료된다.

이제 원본 프로젝트 페이지로 들어가 보면 상단의 Merge Requests 에 요청 갯수가 숫자로 표시된다.

해당 항목을 클릭하면 머지 리퀘스트의 상세 화면을 볼수 있고 해당 요청의 처리자를 지정하거나 마일스톤을 할당하거나 혹은 머지하거나 요청을 거부할 수 있다.

프로젝트 구성원이 머지 리퀘스트를 처리하려면 Developer 이상의 권한이 있어야 가능하며 권한이 없는 구성원의 경우 처리 메뉴가 표시되지 않는다.

 

 


프로젝트 코드 보기

git push 로 프로젝트에 코드를 추가했다면 gitlab 의 프로젝트 페이지에 Files 탭이 생기며 탭을 누르면 전체 파일 목록을 볼 수 있다. 파일 목록 화면은 개별 파일의 최종 변경일과 변경자, 커밋 메시지가 같이 표시된다.

pom.xml 을 클릭하면 브라우저에서 파일의 내용을 볼 수 있으며 변경 이력도 확인할 수 있다. 기본 브랜치명은 master 이며 여러 개의 브랜치가 있다면 좌측의 목록 버튼을 클릭하여 특정 브랜치로 이동할 수 있다.

 

커밋 리뷰

커밋 탭을 누르면 현재 브랜치의 커밋 내역이 표시된다. Browse Code 를 클릭하면 해당 커밋의 상세 변경 이력을 확인할 수 있다.

 

프로젝트의 이력을 그래픽으로 보기

네트워크 탭을 클릭하면 현재 프로젝트의 커밋, 브랜치, 머지의 이력을 도표로 볼 수 있다. 점으로 표시되는 부분은 커밋이며 마우스를 점위에 올려놓으면 커밋 리비전과 변경 내역을 알려주는 팝업창이 뜨며 클릭시에 해당 커밋의 상세 정보 화면으로 이동하게 된다.

그래프 탭을 클릭시  프로젝트의 시간대 별 커밋 내역을 그래프로 확인할 수 있으며 개발자별 커밋 내역도 그래프로 확인할 수 있다.

이슈 관리

gitlab 은 자체적인 이슈 관리 시스템을 내장하고 있다. Issues 탭을 클릭하면 전체 이슈를 볼 수 있으며 New Issue 메뉴를 클릭해 새로운 이슈를  등록할 수 있으며 마일스톤 기능이 있으므로 이슈를 마일스톤과 연계하여 관리할 수 있다.

 

커밋시 자동으로 이슈 닫기

gitlab 6.1 부터 커밋과 이슈의 연동이 가능하다. 기본 이슈 클로즈 커밋 메시지 패턴은 정규식으로 '([Cc]lose[sd]|[Ff]ixe[sd]) +#\d+' 이다.

123 번이슈를 해결하는 커밋일 경우 메시지에 "close #123" 또는 "fix #123" 로 입력하면 123번 이슈의 상태가 close 로 변경된다.

커밋 메시지 패턴은 config/gitlab.yml 의 issue_closing_pattern 에 지정할 수 있다

 

외부 이슈 관리 시스템 사용

gitlab은 프로젝트별로 이슈 관리 시스템을 설정할 수 있으며 외부 이슈관리 시스템을 사용할 수도 있다. 지원하는 시스템은 redmine 과 JIRA 두 가지이다.

외부 시스템을 사용할 경우 먼저 config/gitlab.yml 의 issues_tracker: 항목에 redmine 이나 JIRA 의 URL 을 설정하면 된다.

  1. vi /home/git/gitlab/config/gitlab.yml 
  2. issues_tracker 항목에 redmine 의 URL을 설정한다.

    issues_tracker:
      title: "Redmine"
        project_url: "https://redmine.example.com/projects/:issues_tracker_id"
        issues_url: "https://redmine.example.com/:project_id/:issues_tracker_id/:id"
        new_issue_url: "https://redmine.example.com/projects/:issues_tracker_id/issues/new"

  3. 저장한 후에 gitlab 서비스를 재구동한다.

구동 완료후 gitlab의 프로젝트의 Settings 를 클릭하면 하단에 Features 탭에 Issue tracker 항목에 추가한 이슈 관리 시스템이 표시가 된다.

여기서 사용할 시스템을 지정해 주면 외부 이슈 관리 시스템을 사용할 수 있다.

외부 이슈 관리 시스템을 사용하게 설정하면 Issue 관련 기능 선택시 외부 시스템의 해당 기능에 새 창으로 연결되게 된다.