반응형
GitHub의 Branch Protection 기능은 팀 프로젝트에서 주요 브랜치(main, master 등)에 대한 접근과 수정 권한을 제한하여 코드의 안정성, 품질, 협업을 보장하는 중요한 도구입니다. 이 기능을 사용하면 특정 브랜치에 대한 다양한 규칙을 설정하여 협업 환경에서의 실수나 문제가 발생하지 않도록 할 수 있습니다.
주요 목적 및 장점
- 안정성 유지
주요 브랜치 보호: main이나 master 브랜치는 제품 릴리스나 배포에 사용됩니다. 이 브랜치를 보호하면 검증된 안정적인 코드만 병합되므로 제품 품질을 보장할 수 있습니다. - 실수 방지
푸시 제한: 강제 푸시를 막고, 코드 검토 및 상태 체크를 요구하여 실수로 인한 코드 손상을 예방합니다. 실수로 중요한 브랜치에 잘못된 코드가 푸시되는 것을 방지할 수 있습니다. - 코드 리뷰 강화
풀 리퀘스트 요구 사항: 특정 리뷰어의 승인을 요구하거나, 빌드 상태를 확인하도록 설정함으로써 코드 리뷰 과정이 강화됩니다. 이를 통해 버그와 보안 취약점을 사전에 발견할 수 있습니다. - 협업 개선
팀 협업 촉진: 변경 사항을 팀원들과 함께 검토하고 논의할 수 있어 협업이 활성화됩니다. 동료들의 의견을 반영하여 코드 품질을 높이고, 변경사항에 대한 합의를 이룬 후에만 병합이 가능하게 됩니다.
Branch Protection의 설정 가능 항목
- 푸시 제한: 강제로 main 브랜치에 푸시할 수 없도록 설정
- 빌드 상태 체크: 특정 빌드나 테스트가 통과해야만 병합 가능
- 코드 리뷰: 지정된 인원이나 팀의 승인을 요구
- 병합 조건: 커밋 메시지 규칙, 머지 방식(머지 커밋, 스쿼시 머지 등) 설정
설정할 레포지토리에서 Settings > Branchs를 클릭합니다.
새로 Rule를 추가하기 위해서 Add classic branch protection rule을 클릭합니다.
들어가면 다음과 같은 rule이 있습니다.
- Branch Name Pattern
- 설정한 rule 규칙들에 영향을 받을 브랜치를 설정합니다.
- main과 같이 특정 브랜치를 입력하면 해당 브랜치에만 적용이 되고, 와일드카드( * )를 이용하면 모든 브랜치에 적용되게 됩니다.
- Require a Pull Request Before Merging
- 옵션을 활성화하면 해당 브랜치에 대한 수정 사항을 머지하기 위해서는 반드시 풀 리퀘스트를 열고 해당 풀 리퀘스트를 검토 및 승인 받아야 합니다.
- 직접적으로 브랜치에 코드를 푸시하여 수정하는 것이 아니라, 풀 리퀘스트를 통해 변경 사항을 제출하고 검토를 거친 후에만 머지할 수 있습니다.
- Require Status Checks to Pass Before Merging
- 개발자가 풀 리퀘스트를 생성하거나 브랜치를 머지하려고 할 때, 지정된 상태 체크
- Github Actions 또는 다른 CI/CD 도구를 사용하여 테스트 코드나 다양한 검증 작업을 실행할 수 있습니다.
- 만약 상태 체크가 성공적으로 완료되면 해당 변경 사항은 머지될 수 있습니다.
- 하나라도 상태 체크가 실패하면 해당 변경 사항은 머지되지 않습니다.
- 이렇게 함으로써 개발자들은 변경 사항을 머지하기 전, 코드 품질과 안정성을 검증하는 과정을 거치게 됩니다.
- 상태 체크를 통해 자동화된 테스트나 검증 작업이 수행되므로, 코드의 문제나 버그를 사전에 확인하고 수정할 수 있습니다.
- Require Conversation Resolution Before Merging
- 풀 리퀘스트의 모든 코멘트가 해결되거나 답변을 달아주어야 해당 풀 리퀘스트가 머지 가능.
- Require Signed Commits
- 서명된 커밋만 푸시 가능, 커밋의 무결성과 출처 보장.
- Require Linear History
- 선형적인 히스토리 유지하기 위해 일반적인 머지를 막습니다.
- 스쿼시나 리베이스와 같은 방식을 사용한 머지만 허용하는 규칙을 설정하는 옵션입니다.
- 브랜치 히스토리가 단순하고 선형적인 구조를 유지하게 되어, 문제 발생 시 히스토리 추적과 이전 상태로 복원하기가 더 쉬워집니다.
- 특히 큰 팀이나 복잡한 프로젝트에서 이 옵션을 활성화하여 코드 히스토리를 관리하면 혼란을 줄이고 유지 보수를 용이하게 할 수 있습니다.
- Require Merge Queue
- 특정 브랜치에 대한 머지 작업은 머지 큐를 통해서만 허용.
- Require Deployments to Succeed Before Merging
- 머지되기 전에 특정 환경으로의 배포가 성공해야 머지 가능.
- Lock Branch
- 특정 브랜치를 읽기 전용으로 만듭니다. 더 이상 푸시를 할 수 없도록 제한합니다.
- 다른 개발자들이 해당 브랜치에 새로운 코드나 변경 사항을 푸시하는 것을 방지할 수 있습니다.
- Do Not Allow Bypassing the Above Settings
- 관리자와 branch protections 우회 권한이 있는 사용자에게도 위 설정을 적용합니다.
- Restrict Who Can Push to Matching Branches
- 지정된 사용자, 팀 또는 앱만 해당 브랜치에 푸시할 수 있도록 제한합니다.
- 필요 상태 체크가 실패하면 머지가 불가능합니다.
- Rules Applied to Everyone Including Administrators
- 관리자도 보호 규칙을 무시하고 변경 사항을 머지하거나 수정할 수 없도록 막습니다.
- 이를 통해 보안과 프로젝트의 일관된 규칙 준수를 유지
- Allow Force Pushes
- push 권한이 있는 모든 사용자에게 강제 푸시 허용.
- Allow Deletions
- 푸시 권한을 가진 사용자가 해당 브랜치 삭제 허용.
반응형
'Infra & DevOps > Git' 카테고리의 다른 글
[GIT] 이전 커밋 삭제 - reset, revert 사용 (커밋 롤백) (0) | 2024.12.05 |
---|---|
[GITHUB] GIT Repository private에서 public으로, 혹은 public에서 private로 권한 변경하는 방법 (0) | 2024.11.21 |
[GIT/SpringBoot] SpringBoot 민감정보 gitgnore 숨기기 (0) | 2024.11.05 |
[GIT] 병합(Merge) - Fast forward, 3-way (0) | 2024.01.09 |
[GIT] 브랜치(Branch) (0) | 2024.01.09 |