이번에는 collaborator로 협업하기 포스팅을 해보겠다. 협업하기 포스팅 fork에서는 각자의 깃허브 계정에 레포지토리를 fork로 복제해와서 pull request를 날리는 방식으로 협업을 했지만, collaborator는 한 레포지토리를 가지고 여러 팀원이 협업하는 방식이다.
때문에 fork보다 더욱더 직관적이고 이해하기는 더 쉬울듯? 암튼 할말 없어서 바로 시작해봄
이전 fork로 협업하기 포스팅처럼 이렇게 환경구성을 헀다.
모두 각자의 컴퓨터에서 협업을 하는 그림이기 때문에 무찌와 도리 모두 컴퓨터가 존재하다는 상황을 만들기위해 우분투 이미지로 VM을 팠고 각자의 github의 계정으로 로컬상에 로그인을 해둔 상태임
collaborator로 협업하기는 어떤 구조야?
보통은 팀장이 레포지토리를 하나 만든다.
그리고 각 멤버들은 해당 코드를 가지고 코딩을 한 후, push를 할 수 있다.
public레포지토리라도 본인 계정이 아니면 push권한은 없기때문에 push를 못하지만, collaborator로 멤버들을 초대하면, 멤버들은 해당 권한을 얻게된다.
이전 fork로 협업하기에서 private레포지토리를 fork해가기위해 강아지 개발자들을 collaborator로 초대한것도 같은맥락임..
해보자
나 팀장이다
프로젝트를 할 레포지토리를 colla-puppy-project라는 이름으로 만들었다.
이제 강아지 개발자들을 협력자로 초대하자.
setting탭을 누르고 collaborators라는 탭을 누른다. 그후 add people클릭
muzziworker를 검색해서 초대하자
무찌에게 초대장을 보냈다. 현제 초대가 pending상태라고 떠있음.
이제 무찌의 시점이다.
깃허브에 가니까 메세지가 와있다. 그럼 초대장이 와있는걸 확인가능하다.
팀장님이 초대를 줬다. 수락하자.
# 테스트를 해볼까?
무찌 컴퓨터에서 팀장님 레포지토리를 clone했다.
잘 받아온걸 확인함.
근데 clone은 퍼블릭 레포지토리면 누구나 가능하기때문에 이건 중요한게 아니다.
무찌는 직접 app.js파일을 수정했다. bowwow라는 코드를 추가하고 remote에 추가된 팀장님 레포지토리주소에 commit후 push했다.
push가 무사히 이뤄진걸 확인함.
실제로 팀장님의 레포지토리에 main브랜치로 직접적으로 push가 되었고 무찌가 커밋한 내용이 그대로 업데이트가 되었음.
원래 collaborator로 무찌가 초대가 안되었다면 상상도 못할일이다.
이렇게 한 레포지토리에 각 개발자가 접근권한이 생기고 코드를 업데이트할 수 있는게 바로 collaborator협업방식이다.
현재 코드 최신상태 업데이트하기
다시 팀장 nurd worker의 시점이다.
무찌가 이미 push를 한 상태이지만 팀장의 컴퓨터에서 해당 프로젝트 디렉토리는 무찌가 commit한 코드가 업데이트가 안된상태.
이럴때 업데이트를 하기 위해선 pull을 하면 된다
git pull <레포지토리주소> <브랜치>
이렇게 pull을 해오면 해당 레포지토리의 해당 브랜치상태가 업데이트 된다.
브랜치 자체가 전체적으로 공유되니까 사실 설명할게 별로 없는거같음.
무찌가 왜 main브랜치로 push하는데!
무찌는 아주 건방지기 때문에 팀장만이 다뤄야하는 main브랜치에 계속 push를 하고 있다. 이렇때 어떻게 제제를 할까?
레포지토리 admin을 제외한 나머지 collaborators들은 push를 할 수 없는 branch룰을 만들면 된다.
팀장은 해당 레포지토리의 setting을 들어가서 branches에서 add branch ruleset버튼을 클릭한다.
위 상황에서 현재 muzzi-dev라는 브랜치에서 무찌가 코드를 업데이트 후, push를 해놨다.
브랜치룰을 또만들어보자~
팀장이 새로운 룰셋을 만들자. 이름은 걍 한글로 풀리퀘스트룰이라고 만들음
참고로 muzzi stop룰은 삭제해줬음.
타겟도 아까 룰이랑 똑같이하샘
룰은 저 require a pull request before merging을 체크하고
승인자수는 1, 코드 오너의 리뷰가 필요하다고 설정하자.
그리고 저장~
++ 추가해서 위에 무찌가 main브랜치로 push를 하는걸 금지하는 restrict update룰은 체크안하고 현재 pull request룰만 살려줘도 무찌는 main 브랜치에 push할 수 없다. 그냥 main브랜치가 변하려면 pull request가 있어야한다는 조건이라고 생각하면 댐