프로젝트 관리
프로젝트 포크
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 이다.
- 시작 메뉴에서 명령창을 열고 cmd.exe 를 구동한다.
- git clone 명령을 실행한다.
git git@gitlab.example.com:dev01/demo-webapp.git - cd spring-web 명령으로 복제된 저장소로 이동한다.
- 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) - 변경 작업시 원본 저장소의 변경 내역을 참고할 수 있게 원본 저장소의 정보를 remote 에 추가한다. github 에서는 원본 저장소의 이름은 upstream 으로 관례상 많이 설정하므로 gitlab 에서도 upstream 이라는 이름으로 설정해 놓는다.
git remote add upstream git@gitlab.example.com:lesstif/demo-webapp.git - git remote 명령어로 원격 저장소의 정보를 다시 확인한다.
git remote -vorigin 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) - 이제 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 를 클릭해서 머지 리퀘스트를 만들어 보자.
우측 상단의 New Merge Request 를 클릭한다.
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 을 설정하면 된다.
- vi /home/git/gitlab/config/gitlab.yml
- 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" - 저장한 후에 gitlab 서비스를 재구동한다.
구동 완료후 gitlab의 프로젝트의 Settings 를 클릭하면 하단에 Features 탭에 Issue tracker 항목에 추가한 이슈 관리 시스템이 표시가 된다.
여기서 사용할 시스템을 지정해 주면 외부 이슈 관리 시스템을 사용할 수 있다.
외부 이슈 관리 시스템을 사용하게 설정하면 Issue 관련 기능 선택시 외부 시스템의 해당 기능에 새 창으로 연결되게 된다.