[github] Branch Protection Rule 적용하기

2024. 11. 21. 00:42·Infra & DevOps/Git
반응형

 

GitHub의 Branch Protection 기능은 팀 프로젝트에서 주요 브랜치(main, master 등)에 대한 접근과 수정 권한을 제한하여 코드의 안정성, 품질, 협업을 보장하는 중요한 도구입니다. 이 기능을 사용하면 특정 브랜치에 대한 다양한 규칙을 설정하여 협업 환경에서의 실수나 문제가 발생하지 않도록 할 수 있습니다.

 

주요 목적 및 장점
  1. 안정성 유지
    주요 브랜치 보호: main이나 master 브랜치는 제품 릴리스나 배포에 사용됩니다. 이 브랜치를 보호하면 검증된 안정적인 코드만 병합되므로 제품 품질을 보장할 수 있습니다.
  2.  실수 방지
    푸시 제한: 강제 푸시를 막고, 코드 검토 및 상태 체크를 요구하여 실수로 인한 코드 손상을 예방합니다. 실수로 중요한 브랜치에 잘못된 코드가 푸시되는 것을 방지할 수 있습니다.
  3. 코드 리뷰 강화
    풀 리퀘스트 요구 사항: 특정 리뷰어의 승인을 요구하거나, 빌드 상태를 확인하도록 설정함으로써 코드 리뷰 과정이 강화됩니다. 이를 통해 버그와 보안 취약점을 사전에 발견할 수 있습니다.
  4. 협업 개선
    팀 협업 촉진: 변경 사항을 팀원들과 함께 검토하고 논의할 수 있어 협업이 활성화됩니다. 동료들의 의견을 반영하여 코드 품질을 높이고, 변경사항에 대한 합의를 이룬 후에만 병합이 가능하게 됩니다.

 

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
'Infra & DevOps/Git' 카테고리의 다른 글
  • [GIT] 이전 커밋 삭제 - reset, revert 사용 (커밋 롤백)
  • [GITHUB] GIT Repository private에서 public으로, 혹은 public에서 private로 권한 변경하는 방법
  • [GIT/SpringBoot] SpringBoot 민감정보 gitgnore 숨기기
  • [GIT] 병합(Merge) - Fast forward, 3-way
Dev Chu
Dev Chu
  • Dev Chu
    Log_Double 7
    Dev Chu
  • 전체
    오늘
    어제
    • LOG LIST (199)
      • log Double 7 (2)
        • notice (1)
        • 회고록 (1)
      • Study (111)
        • 과제 (2)
        • 코딩 테스트 (105)
        • 대규모 시스템 설계 기초 (4)
      • CS (10)
        • 자료구조 & 알고리즘 (4)
        • Design Pattern (2)
        • TIL (4)
      • FrontEnd (26)
        • HTML & CSS (16)
        • JavaScript & jQuery (9)
        • React (1)
      • BackEnd (24)
        • Java (4)
        • Python (6)
        • Database (0)
        • Spring (6)
      • Infra & DevOps (3)
        • AWS (3)
        • Git (8)
      • Project (3)
        • repo_bis (2)
        • WhiteMonday (1)
      • ETC (20)
        • TIP (13)
        • Error (5)
        • SQLD (2)
  • 블로그 메뉴

    • 코딩 테스트
  • 링크

    • GitHub
  • 공지사항

    • Log Double 7
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Dev Chu
[github] Branch Protection Rule 적용하기
상단으로

티스토리툴바