Pro git - 4.8
Updated:
Pro git - GitLab
0. GitLab
-
간단하게 쓰기엔 GitWeb이 꽤 좋다.
- 그런데 좀 더 기능이 많은 Git 서버를 쓰려면 다른 서버를 찾아 설치해야 한다.
- GitLab은 기능이 많은 만큼 설정도 복잡하고 유지보수를 위해 해야 할 것도 많다.
1. 설치
- GitLab은 DB와 따로 연동해야하는 웹 애플리케이션이라 다른 Git 서버들보다 설치하기에 복잡하다.
-
설치 방법은 여러 가지가 있다.
- 가상 머신 이미지나 원클릭 인스톨러를 내려받아 빨리 설치하고 환경에 맞게 후다닥 설정해서 사용할 수 있다.
- https://bitnami.com/stack/gitlab에서 내려받을 수 있다.
- Bitnami의 로그인 화면은 아래와 같다(alt-→ 를 눌러서 들어간다).
- 로그인 화면에 설치된 GitLab의 IP와 기본 사용자이름, 암호가 써있다.
- 더 많은 것이 알고 싶다면 GitLab 커뮤니티 에디션의 readme 파일을 읽어보면 된다.
- https://gitlab.com/gitlab-org/gitlab-ce/tree/master에서 내려받을 수 있다.
2. 관리자
- GitLab의 관리자 도구는 웹 페이지로 되어있다.
- 웹 브라우저로 GitLab이 설치된 곳의 주소에 들어가면 보인다.
- 기본 사용자이름은
admin@local.host
, 암호는5iveL!fe
이다. - 로그인하고 나서 메뉴 오른쪽 위에 있는 “Admin area” 를 클릭한다.
- GitLab의 사용자 계정은 한 사람당 하나씩 만든다.
- 사용자 계정의 내용은 복잡하지 않다.
- 로그인 데이터에 추가로 개인 정보가 들어있다.
- 각 사용자마다 네임스페이스가 있다.
- 네임스페이스는 프로젝트를 묶는 단위이다.
- jane 사용자가 project라는 프로젝트를 진행 중이라면 프로젝트의 URL은 http://server/jane/project가 될 것이다.
- 사용자를 삭제하는 방법은 두 가지다.
- 첫 번째는 일시적으로 GitLab에 로그인하지 못하게 하는 “정지(Blocking)” 가 있다.
- 정지한 사용자 데이터와 네임스페이스 안의 프로젝트 데이터는 삭제되지 않고 그대로 남는다.
-
커밋의 이메일 주소에 대한 링크도 여전히 사용자 프로파일 페이지로 연결된다.
- 두 번째는 사용자를 “삭제(Destroying)” 하면 그 사용자와 관련된 모든 데이터가 삭제된다.
- 삭제한 사용자의 모든 프로젝트와 데이터가 삭제되고 해당 사용자가 소유한 그룹도 삭제된다.
- 영구히 삭제돼 되돌릴 수 없으므로 조심해야 한다.
2.1 그룹
-
GitLab 그룹은 프로젝트와 누가 어떤 프로젝트에 어떻게 접근할지에 대한 권한 데이터의 모음이다.
- 그룹에도 사용자처럼 프로젝트 네임스페이스가 있다.
- +training+라는 그룹이 +materials+라는 프로젝트를 가지고 있으면 URL은 http://server/training/materials가 된다.
- 그룹은 많은 사용자가 모인 곳이다.
- 그룹의 사용자의 권한은 그룹의 프로젝트에 대한 권한과 그룹 자체에 대한 권한이 따로 있다.
- 권한은 “Guest”(이슈 등록과 채팅만 할 수 있다.)부터 “Owner”(그룹과 멤버, 프로젝트에 대한 모든 제어가 가능하다.)까지 지정할 수 있다.
- 그 외 권한은 GitLab의 관리 화면에서 각 권한에 대한 링크를 참고하길 바란다.
2.2 프로젝트
- GitLab의 프로젝트는 간단히 이야기하면 하나의 Git 저장소다.
- 모든 프로젝트는 한 사용자나 한 그룹에 속하게 된다.
- 사용자에 딸린 프로젝트는 사용자가 관리자로서 그 프로젝트를 완전히 제어한다.
- 그룹에 딸린 프로젝트는 해당 그룹의 사용자 권한 레벨에 따라 다르다.
- 프로젝트마다 공개 수준을 지정할 수 있어서 사람마다 프로젝트 페이지와 저장소가 보이거나 안 보이게 할 수 있다.
- 프로젝트가 Private 이면 프로젝트 소유자가 허락한 사람들만 프로젝트에 접근할 수 있다.
- Internal 은 로그인한 사용자에게만 보인다.
- 그리고 Public 프로젝트는 모든 사람이 볼 수 있다.
- 이런 공개 수준은
git fetch
같은 접근이나 웹 UI 접근에 다 적용된다.
2.3 훅
- GitLab은 훅도 지원하는데 프로젝트 훅이나 시스템 훅을 사용할 수 있다.
- 훅은 어떤 이벤트가 발생하면 해당 이벤트 정보가 담긴 JSON 데이터를 HTTP POST로 보낸다.
- Git 저장소나 GitLab과 연동해서 CI나 채팅, 개발 도구 등으로 자동화하기에 좋다.
3. 기본 사용법
- 먼저 새로운 프로젝트를 만들어보자.
- 툴바의 “+” 아이콘을 클릭한다. 프로젝트의 이름, 프로젝트 네임스페이스, 공개 수준을 입력한다.
-
프로젝트가 만들어졌으면 HTTPS나 SSH 프로토콜을 이용해 프로젝트를 Git 리모트로 등록한다.
- 저장소 URL은 프로젝트 홈페이지 위 쪽에 있다.
- 아래와 같이 명령어를 이용해 로컬 저장소에
gitlab
이라는 이름으로 리모트 저장소를 등록한다.
$ git remote add gitlab https://server/namespace/project.git
- 로컬 저장소가 없으면 그냥 아래 명령어를 실행한다.
$ git clone https://server/namespace/project.git
- 웹 UI는 꽤 유용하다. 저장소에 대한 각종 정보를 보여준다.
- 프로젝트 홈페이지에서는 최근 활동을 보여주고 제일 위의 링크를 클릭하면 프로젝트의 파일과 커밋 로그가 나온다.
4. 함께 일하기
-
함께 일할 사람에게 그냥 Git 저장소의 Push 권한을 주는 걸로 간단하게 협업을 시작할 수 있다.
- 프로젝트 설정 페이지에서 “Members” 섹션에 같이 일할 사용자를 추가한다.
- 그리고 그 사용자가 Push 할 수 있도록 설정한다(다른 접근 수준에 대해서는 그룹에서 볼 수 있다).
-
“Developer” 이상의 권한을 주면 그 사용자는 우리 저장소에 Push 하거나 브랜치를 만들 수 있다.
- Merge 요청을 하도록 해서 통제권을 유지한 채로 협업하는 방법도 있다.
- 프로젝트에 접근할 수 있는 모든 사용자가 프로젝트에 기여할 수 있다.
- 사용자는 마음껏 브랜치를 만들고 커밋, Push 하고 나서 이 브랜치를
master
나 다른 브랜치에 Merge 해달라고 요청한다. - Push 권한이 없는 사용자는 저장소를 “fork” 한 다음에 “fork” 한 자신의 저장소 에 Push 한다.
- 그리고는 원래 저장소에 내 저장소에 있는 브랜치를 Merge 해달라고 요청하면 된다.
- 소유자는 이걸로 자신의 저장소에 대한 모든 통제 권한을 가진다.
- 어떤 데이터가 들어올 수 있는지 언제 들어오는지 소유자가 결정할 수 있다.
- Merge 요청과 이슈는 대화의 기본 단위이다.
- 각 Merge 요청에서는 일반적인 토론뿐만 아니라 라인 단위로까지 대화가 이루어진다.
- GitLab의 장점은 일단 서버가 돌아가면 SSH로 서버에 접속할 일이 별로 없다는 것이다.