반응형
개발하다 보면 귀찮아서 main 에 그대로 push 하다가 코드를 날려먹어 하루까지 날려보신 경험이 있으실텐데요..(제 경험담 입니다ㅎㅎㅎ)
이걸 방지하기 위해 이제 시작하는 프로젝트에서는 Git에서 main으로 push 하는 것을 막고 PR에서 merge 하는 것만 막아보려고 합니다!!
(New branch ruleset : 룰 적용할 대상이 branch (dev, main 등등)
New tag ruleset : 룰 적용할 대상이 tage (v1.0.0, release-*등등))
일단 git repo에서 settings -> Rules -> Rulsets로 들어가 저희는 main 브렌치에 룰을 적용할 것이기 때문에 New branch ruleset을 들어가줍니다.
이제 이런 것들이 뜰텐데 위에서 부터 하나씩 설명하자면
- Ruleset Name : rule 이름
- Enforcement status : (Active : 기능을 켜겠다./ Disable : 기능을 끄겠다.) 저희는 main으로 push를 막을 기능을 킬것이기 때문에 Active를 넣어주시면 됩니다.
- Bypass : 이 ruleset을 통과시킬 예외 리스트 (repo 주인 or 배포를 위한 vercel 등등)
이 기능을 설정할 Target 브렌치들
저희는 main에서 기능을 막을 것이기 때문에 Default를 설정해주면 됩니다!
위에서부터 하나씩 설명하자면
- Restrict creations (생성 제한) : 저희는 Default에서만 적용하기 때문에 ❌
→ 해당 브랜치 패턴에 맞는 브랜치를 아무나 만들지 못하게 막음. 우회 권한 있는 사람만 생성 가능. - Restrict updates (업데이트 제한) : 위에와 마찬가지로 ❌
→ 브랜치에 직접 푸시하거나 수정하는 것을 막고, 우회 권한 있는 사람만 가능하게 설정. - Restrict deletions (삭제 제한) : Main을 삭제하면 안되니깐 ✅
→ 해당 브랜치를 삭제할 수 있는 사람을 "우회 권한(bypass permission)"이 있는 사용자로 제한함. - Require linear history (선형 히스토리 요구) : 아직 git 전략을 세우지 않았으므로 ❌ 나중에 바뀔 가능성도 있음
→ 병합 커밋 없이, 리베이스 기반의 깔끔한 커밋 히스토리만 허용함. - Require deployments to succeed (배포 성공 요구) : 배포를 지금은 아직 하지 않았으니 ❌
→ 특정 환경에 배포가 성공하기 전까지는 브랜치에 푸시를 금지함. - Require signed commits (서명된 커밋 요구) : 이것도 사용안 할 것이므로 ❌
→ GPG로 서명된 커밋만 허용해서 커밋의 작성자가 신뢰 가능한 사람임을 검증함. - Require a pull request before merging (풀 리퀘스트 필수) : 이걸 위해 진행하는 것이므로 ✅
→ 직접 푸시 금지. 모든 변경은 PR을 통해만 병합되도록 제한. - Require status checks to pass (상태 검사 통과 요구) : CI 생성을 하지 않았으므로 ❌
→ CI 등에서 설정된 상태 검사들이 모두 통과되어야만 브랜치에 변경 가능. - Block force pushes (강제 푸시 차단) : git push --force 금지 하는 것이 좋으므로 ✅
→ git push --force를 사용한 강제 푸시를 차단하여 실수로 기존 히스토리를 덮어쓰는 것을 방지함. - Require code scanning results (코드 스캔 결과 요구) : 혹시 모르는 보안 이슈로 ✅
→ 코드 변경 전, 설정된 도구로 코드 스캔이 수행되어야 함. 보안 이슈를 사전에 차단하는 데 유용함.
- Required Approvals : 일단 한 명으로 설정 ✅
PR을 병합하기 전에 승인해야 할 리뷰 수 설정 (기본은 0명, 필요시 1명 이상 지정 가능) - Dismiss stale pull request approvals when new commits are pushed ❌
PR에 새로운 커밋이 추가되면, 기존 리뷰 승인을 무효화 - Require review from Code Owners ❌
PR에서 Code Owner로 지정된 사람의 승인을 반드시 받아야 병합 가능.
- Require approval of the most recent reviewable push ❌
최신 커밋에 대해서는 커밋 작성자 이외의 승인이 있어야 함 -
Require conversation resolution before merging ❌코드에 단 댓글(Conversation)이 달렸다면, 해당 대화를 전부 해결해야 병합 가능.
- Request pull request review from Copilot ❌
GitHub Copilot이 PR 리뷰를 자동으로 요청함 - Allowed merge methods
PR 병합 시 사용할 수 있는 방식 선택: Merge, Squash, Rebase
이제 만약 그냥 Push 하려고 하면
이런 오류가 뜨게 된다~!
반응형