"Gitolite"는 특이하게 "personal branches"라는 것을 지원해준다.


처음에는 Pro-Git 책에서 이에 대한 언급이 있어서 여기저기 살펴보았었는데,
자료가 너무나 심플하게만 있고 원론적인(?) 이야기만 있어서 그냥 그런갑다~하고 넘어갔었다.


그러다가 회사에서 업무를 하던 중 아래와 같은 개발자의 VOC(?)를 듣게 되었다.

master 브랜치에는 마음대로 push하기가 부담스럽고,
로컬에서 별도로 브랜치를 만들어서 작업을 하면 작업 내용이 날라갈까봐 걱정이 된다.
내가 작업한 내용들에 대해서도 백업이 되면 좋겠다.


즉, 자신이 작업하는 내용에 대한 백업이 필요하다는 말이었다.



이 이야기를 듣고 처음에는 충격이었다.

Git 의 가장 큰 강점이 바로 "분산 형상 관리"이다.

즉, 작업 내용을 commit 할 때마다 서버에 접근하지 않아도 된다는 점이 Git의 강점이라는 것인데,
commit 한 내용이 로컬에 머무른다는 것이 단점이 될 수도 있다는 사실에 좀 충격이었다!!!


절대 위와 같은 Work Flow로 작업을 하라고 가이드 하는 것은 아니다.
지금 설명을 위해서 위와 같은 branch 정책을 가지고 개발을 한다고 가정을 해보는 것이다. 샘플!!!

아래 글로 적힌 내용에 대해서는 잘 읽어보는 것을 추천한다 ^^
(실제 회사에서 이루어지는 것을 반영한 부분도 있으니...^^)

왼쪽은 Server Repository이고, 오른쪽이 Local Repository이다.

Server에서는 master와 develop branch를 운영하는데,
기본적으로 두 개의 branch 모두 어느 정도 다듬어진 결과물이 올라와야 한다.

빌드를 기준으로 말하자면
Server의 master, develop branch 모두 빌드가 항상 성공되어야 한다.

반면, Local에 있는 develop branch에서 개발자가 열심히 개발을 하는데,
Server의 develop branch에는 빌드가 정상적으로 되는 결과물만 push 해줘야 한다.
즉, 이래 저래 작업한 내용을 막 push 하면 안되고, 그것은 local 안에서 commit만 이루어지도록 해야한다.

그런데, 개발자는 작업한 결과물 뿐만 아니라
작업 중인 내용물에 대해서도 서버에 백업이 되었으면 좋겠다고 하는 것이다.

그래서 개발자는 별도의 branch를 local에 만들어서 작업을 해본다.
my_br 이라는 branch를 만들어서 작업을 하고 그걸 다시 local에 위치한 develop으로 merge를 해주는 방식이다.
이제 이 my_br이라는 branch만 어디 다른 곳에 저장할 수 있으면 되는 것이다.


오른쪽에 새로 생긴 부분과 같이 Local에서 작업한 내역을 push할 수 있는 Server Repository가 있다면...?!



앞에서 우리는 Gitolite 설치와 운영에 대해서 알아보았다.
문제는 대부분의 회사에서 일반 개발자들에게 repository 생성 권한을 주지 않는다는 점이다.

물론 개인적으로 별도의 Git Server를 만들어서 그곳으로 push 하도록 한다던지 뭐 다양한 방법이 있겠지만,
우리의 Gitolite는 Personal Branch라는 기능을 제공해준다.



푸헬~ 위에 주저리 주저리 적었는데, 별 쓸모 없는 말만 주절거린 것 같다.
하지만 뭐 그래도 적은 것이 아까우니까.... ^^



1. Gitolite

     - "personal branch"를 사용하기 위해서는 Gitolite 설정을 해줘야 한다.

 

$ ssh gitolite@localhost
$ cd ./repositories


     - Gitolite의 환경파일을 변경해야하기 때문에 Gitolite 관리자 계정으로 접속하자.
     - [ gitolite-admin.git ] repository를 clone 한 곳으로 이동하자.


$ nano ./conf/gitolite.conf


     - [ gitolite.conf ] 파일을 수정하면 된다.

@whatwant = chani gitolite

repo gitolite-admin
    RW+     =   gitolite

repo testing
    RW+     =   @all

repo bare1repo
        RW+                              = @whatwant
        RW+     personal/USER/  = @whatwant


     - 위에 별도로 색으로 칠한 부분이 핵심이다.
     - [ /USER/ ]와 같이 되어있는 부분은 일종의 예약어이다. (personal 으로 되어있는 부분은 임의)

     - 위와 같이 하면 [ refs/personal/사용자계정/ ]이라는 네임스페이스를 사용할 수 있게 되는 것이다.
     - 그런데, 왜 브랜치가 아니라 네임스페이스라고 하였을까?!
     - 실제로 사용할 때에는 [ refs/personal/사용자계정/branchname ]과 같이 사용한다.

$ git commit -a -m "personal branch setting"
$ git push


     - 수정 후 종종 잊는 것이 commit과 더불어 push이다. 꼭 반영하길~




2. push

     - personal branch에 대한 자료가 너무 없어서 개인적으로 알아본 것으로만 정리를 하겠다.
        (적어도 국내 한글로 된 자료 중에서는 최초의 personal branch 관련 자료가 아닐지...)
     - 이제 어떻게 사용하는지 한 번 알아보자.


$ git push origin develop:refs/personal/chani/mywork


     - Local에 있는 특정 branch의 내용을 Server의 내 personal branch의 임의의 branch로 push해 주는 것이다.

     - personal branch는 백업의 의미로 사용하는 것이 큰 것으로 보인다.
     - 즉, 그냥 사용하는 branch와는 그 용도가 조금 다른 것이다.
     - 물론 위의 스크린샷과 같이 변경 사항을 포함하는 내용을 push 할 수도 있지만, 그냥도 push할 수 있다.

     - [ git push origin (local branch 名):refs/personal/(계정)/(임의의 branch 名) ]



3. pull

     - 그러면 personal branch 내용을 받아올 때에는 어떻게 할까?

 

$ git pull origin refs/personal/chani/mywork:wow


     - personal branch의 내용을 내려받을 때엔 임의의 branch로 내려 받는다.

     - [ git pull origin refs/personal/(계정)/(branch 名):(임의의 local branch 名) ]



4. delete

     - 만들었으면 지우는 방법도 알아보자.

 

$ git push origin :refs/personal/chani/mywork


     - 일반 branch를 삭제하는 것과 같은 방법으로 삭제할 수 있다.




5. Server

     - 이렇게 만든 personal branch는 Server에서 어떻게 확인할 수 있을까요?


     - Server에 위치한 repository를 살펴보면 personal branch의 상황에 대해서 알 수 있다.
     - 위 스크린샷은 delete를 해버려서 안보이지만, 만들어놓은 상태라면 위와 같이 따라가서 확인할 수 있다.




헥헥... 알고보면 별 것도 아닌 내용이지만,
워낙에 설명을 찾아보기 힘든 부분이라서 많은 시간을 할애해야만 했다.

그러던 중에, 여기 이 블로그를 통해서 너무 반가운 소식이 들어와서 잠시 헬렐레~했고,
부처님 덕분에 연휴를 맞이했고,
장모님의 환갑을 맞이했고,
뭐 그런 연유로 이제서야 포스팅~ ^^

앞으로 해야할 부분이 너무나 많이 남았네요~ 부지런히 달려봅시다~!!

반응형

+ Recent posts