2023.05.04.(목)

AI 쿼리도… 프로젝트 경험이 많은 팀원 덕분에 기획서와 명세서를 무리 없이 잘 작성하였습니다. Quoridor

이제 남은 것은 신청서 작성과 실질적인 개발인데, 개발을 하려면 팀원들 간의 역할 분담과 소통이 중요하겠죠. 그리고 팀 개발에서 빠질 수 없는… 깃 관리!!

오늘은 Branch Protection Rule, 즉 브랜치 보호 전략에 관해 알아보았습니다.

Dev.Cho(Dev World)님의 블로그 를 그대로 가져와 참고하였습니다.

Branch 를 보호하는 것이 중요한 이유

Git 의 Branch 는 협업을 위한 기본 토대이기 때문에 최소한의 규칙을 정해야 협업 시의 혼란을 방지할 수 있습니다. 실무에서 적게는 3명, 많게는 수십 수백명이 하나의 저장소를 관리하기 때문에 따라서 저장소를 관리하기 위한 Rule 이 중요하겠지요!

GitHub 의 Branch Protection Rules

GitHub 에 올라간 브랜치들만 이 Rule 의 적용을 받습니다. 로컬에서는 아무렇게 작업해도 제약이 없습니다.

  • [Setting] - [Branches] - [Add branch protection rule]

먼저 Protection Rule 이 적용될 Branch 의 패턴을 만든 후 해당 패턴의 브랜치에 대해 8가지 Protection Rule 을 설정할 수 있습니다.


Branch name pattern

특정한 브랜치나 특정한 패턴을 가진 브랜치(점두어가 feature 인 브랜치 등)에 대해 아래에서 다룰 Branch Protection Rule 이 적용될 수 있도록 한다.

브랜치 하나에 적용: [branch name] 예) main

특정 경로의 모든 브랜치에 적용 원하는 단어 후 * 를 붙이면 됨 예) feature* : feature 접두어를 가진 모든 브랜치에 적용, feature/* : feature/ 접두어를 가진 모든 브랜치에 적용

Require a pull request before merging

해당 브랜치에 커밋을 추가하기 위해 로컬에서 Direct Push 가 안되고, 별도 브랜치를 만들어 Pull Request 를 해야되는 것을 설정하는 값이다. 협업 시 브랜치를 Local 에서의 Direct Push 로부터 보호하고 코드리뷰를 강제하기 위해 사용한다.

Require status checks to pass before merging

테스트 결과 이상이 없을 시에만 merge 가능하도록 한다.

Require conversation resolution before merging

Pull Request 를 날리게 되면 코드리뷰를 통해 Conversation 이 생기게 되는데, 이 Conversation 이 모두 solved 되었을 때만 머지할 수 있도록 한다. –> 생기는 의문점. 모든 사람들이 confirm 해줘야 머지되는 거라면, 서로 ‘저 사람이 제대로 확인 했겠지’ 하면서 대충 코드를 리뷰하게 되는 상황이 생길 수도 있지 않을까요?

Require signed commits

커밋들이 sign 이 되어 있어야 한다. 보통 GitHub 에 GPG Key 를 등록하고 해당 Key 를 가진 사람이 커밋한 경우 Verified 라고 뜨게 된다.
–> 여기서 sign 이 뭘까요?

Require linear history

해당 브랜치에서 분기를 불가능하게 만든다. 히스토리 추적을 쉽게 하기 위함이며, 하나의 브랜치로 유지해야 할 필요가 있을 때 사용한다.

Include administrators

관리자에게도 위의 5가지 Require a pull request before merging, Require status checks to pass before merging, Require conversation resolution before merging, Require signed commits, Include administrators Rule 중 선택한 Rule 이 적용 되도록 한다.

Allow force pushes

Force Push(강제 푸시) 를 허용할 것인지 여부를 결정한다. Force Push 란 Git 의 커밋들은 현재 브랜치의 커밋들로 모두 대체하는 푸시로, 절대 사용하면 안된다! –> Force Push 했을 때 생겨나는 문제들에는 어떤 것들이 있을까요?

Allow deletions

push access 를 가진 유저들이 브랜치를 지울 수 있도록 한다. 푸시는 Write 를 위한 명령어인데 이 명령어에 대한 유저에게 삭제 명령을 가능하도록 만드는 옵션이다. 웬만하면 사용하지 말자.