Skip to main content

Enterprise Server 3.15 은(는) 현재 릴리스 후보로 제공됩니다.

리포지토리에 대한 규칙 세트 만들기

리포지토리에 규칙 세트를 추가하여 사용자가 특정 분기 및 태그와 상호 작용하는 방법을 제어할 수 있습니다.

누가 이 기능을 사용할 수 있나요?

리포지토리에 대한 읽기 권한이 있는 사용자는 해당 리포지토리의 규칙 세트를 볼 수 있습니다. 리포지토리에 대한 관리자 권한이 있는 사용자 또는 “리포지토리 규칙 편집” 권한이 있는 사용자 지정 역할은(는) 리포지토리에 대한 규칙 세트를 만들고 편집하고 삭제할 수 있습니다 또한 규칙 세트 인사이트를 볼 수 있습니다. 자세한 내용은 "사용자 지정 리포지토리 역할 정보"을 참조하세요.

규칙 세트는 조직의 GitHub Free 및 GitHub Free가 있는 퍼블릭 리포지토리와 GitHub Pro, GitHub Team, GitHub Enterprise Cloud의 퍼블릭 리포지토리 및 프라이빗 리포지토리에서 사용할 수 있습니다.

푸시 규칙 집합은 내부 및 프라이빗 리포지토리, 푸시 규칙 집합이 사용 설정된 리포지토리의 포크 및 기업 내 조직에서 GitHub Enterprise Cloud 플랜에 사용할 수 있습니다.

소개

규칙 세트를 만들어 사용자가 리포지토리에서 선택한 분기 및 태그와 상호 작용하는 방법을 제어할 수 있습니다. 특정 분기에 커밋을 푸시할 수 있는 사용자, 커밋의 형식을 지정하는 방법, 태그를 삭제하거나 이름을 바꿀 수 있는 사용자와 같은 항목을 제어할 수 있습니다. 리포지토리의 이름을 바꾸는 것을 방지할 수도 있습니다.

프라이빗 또는 내부 리포지토리와 리포지토리의 전체 포크 네트워크에 대한 푸시를 차단하는 푸시 규칙 집합을 만들 수도 있습니다. 푸시 규칙 집합을 사용하면 파일 확장명, 파일 경로 길이, 파일 및 폴더 경로 및 파일 크기에 따라 푸시를 차단할 수 있습니다.

규칙 세트를 만들 때 특정 사용자가 규칙 세트의 규칙을 무시하도록 허용할 수 있습니다.

규칙 세트에 대한 자세한 내용은 "규칙 세트 정보"을(를) 참조하세요.

조직의 모든 리포지토리에 대한 규칙 집합을 만들 수도 있습니다. 자세한 내용은 "조직에서 리포지토리에 대한 규칙 집합 만들기"을(를) 참조하세요.

fnmatch 구문 사용

fnmatch 구문을 사용하여 규칙 집합을 만들 때 대상으로 지정할 패턴을 정의할 수 있습니다.

* 와일드카드를 사용하여 어떤 문자열이든 매칭할 수 있습니다. GitHub에서 File::FNM_PATHNAME 플래그를 File.fnmatch 구문에 사용하므로 *와일드카드는 디렉터리 구분 기호(/)와 일치하지 않습니다. 예를 들어 qa/*qa/로 시작하고 단일 슬래시를 포함하는 모든 분기와 일치하지만 qa/foo/bar과 일치하지 않습니다.. 다음과 같이 qa과 일치하는 qa/**/*는 슬래시를 원하는 대로, 예를 들어 qa/foo/bar/foobar/hello-world 포함할 수 있습니다. qa 문자열을 qa**/**/*와 확장하여 규칙을 더 포괄적으로 만들 수도 있습니다.

구문 옵션에 대한 자세한 내용은 fnmatch 문서를 참조하세요.

커밋 메타데이터에 정규식 사용

분기 또는 태그를 대상으로 하는 규칙 집합에 대한 메타데이터 제한을 추가할 때 정규식 구문을 사용하여 커밋 메시지, 분기 또는 태그 이름과 같은 관련 메타데이터가 일치해야 하거나 일치하지 않아야 하는 패턴을 정의할 수 있습니다.

메타데이터 제한은 기본적으로 regex 패턴을 수락하지 않습니다. 이를 사용하도록 설정하려면 규칙 집합에 대한 메타데이터 제한을 만들 때 지정된 regex 패턴과 일치해야 함 제한을 선택합니다.

규칙 세트는 RE2 구문을 지원합니다. 자세한 내용은 Google의 구문 가이드를 참조하세요. 식을 확인하려면 regex101.com의 왼쪽 사이드바에서 "Golang" 버전을 선택하여 유효성 검사기를 사용할 수 있습니다.

기본적으로 메타데이터 제한의 정규식에서는 여러 줄의 텍스트를 고려하지 않습니다. 예를 들어 여러 줄의 커밋 메시지가 있는 경우 메시지의 첫 번째 줄이 ABC로 시작되면 ^ABC 패턴이 일치하게 됩니다. 메시지의 여러 줄을 매칭하려면 식을 (?m)로 시작합니다.

?!로 표시된 음성 lookahead 어설션은 지원되지 않습니다. 하지만 뒤에 다른 지정된 문자열이 없는 지정된 문자열을 찾아야 하는 경우 "지정된 정규식 패턴과 일치하지 않아야 함" 요구 사항과 결합된 ?로 표시된 양성 lookahead 어설션을 사용할 수 있습니다.

참고: 기여자 커밋에서 로그오프하도록 요구해야 하는 경우 이는 정규식 패턴을 방해할 수 있습니다. 누군가가 로그오프하면 GitHub이(가) Signed-off-by: #AUTHOR-NAME <#AUTHOR-EMAIL> 같은 문자열을 커밋 메시지에 추가합니다. 자세한 내용은 "조직에 대한 커밋 승인 정책 관리"을(를) 참조하세요.

유용한 정규식 패턴

다음 예에서는 커밋 메타데이터에 유용한 패턴을 제공합니다. 이러한 패턴을 사용하려면 요구 사항을 "지정된 정규식 패턴과 일치해야 함"으로 설정합니다.

분기 이름이 Windows와 호환되는지 확인

다음 패턴을 사용하여 분기 이름에 숫자, 소문자, 글자 및 -_ 문자만 포함되도록 할 수 있습니다. 이렇게 하면 분기 이름이 기본적으로 대/소문자를 구분하는 파일 시스템을 사용하지 않는 운영 체제와 호환됩니다.

Text
\A[0-9a-z-_]$

일치: my-branch

일치하지 않음: myBranch

태그 이름에 의미 체계 버전 관리가 사용되는지 확인

다음 패턴을 사용하여 태그 이름이 의미 체계 버전 관리를 준수하도록 할 수 있습니다. 자세한 내용은 semver.org에 대한 설명서를 참조하세요.

Text
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$

일치: 1.2.3, 10.20.30, 1.1.2-prerelease+meta

일치하지 않음: 1.2, 1.2-SNAPSHOT

커밋 메시지의 줄 길이 제한

Pro Git 설명서에서는 커밋 메시지의 첫 번째 줄을 약 50자로 제한하도록 권장합니다.

다음 패턴을 사용하여 커밋 메시지의 첫 번째 줄에 50자 이하만 포함되도록 할 수 있습니다.

Text
\A.{1,50}$
커밋 메시지가 해결 방법 및 문제 번호로 시작하는지 확인

다음 패턴을 사용하여 커밋 메시지에 Resolves: 또는 Fixes:라는 단어와 뒤에 #1234 같은 문자열이 포함되도록 할 수 있습니다.

Text
^(Resolves|Fixes): \#[0-9]+$

일치: Fixes: #1234

일치하지 않음: Add conditional logic to foo.bar

일반 커밋 적용

다음 패턴을 사용하여 커밋 메시지가 일반 커밋 사양을 준수하도록 할 수 있습니다. 자세한 내용은 conventionalcommits.org를 참조하세요.

Text
^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test){1}(\([\w\-\.]+\))?(!)?: ([\w ])+([\s\S]*)

일치: feat: allow provided config object to extend other configs

일치하지 않음: Add conditional logic to foo.bar

규칙 집합 적용 상태 사용

규칙 세트를 만들거나 편집하는 동안 적용 상태를 사용하여 규칙 세트를을 적용하는 방법을 구성할 수 있습니다.

규칙 세트에 대해 다음 적용 상태 중에서 선택할 수 있습니다.

  • 활성: 규칙 세트가 생성 시에 적용됩니다.
  • 평가: 규칙 세트가 적용되지 않지만 "규칙 인사이트" 페이지에서 규칙을 위반하거나 위반하지 않는 작업을 모니터링할 수 있습니다.
  • 사용 안 함: 규칙 세트가 적용 또는 평가되지 않습니다.

"평가" 모드를 사용하는 것은 규칙 세트를 적용하지 않고 테스트하는 데 유용한 옵션입니다. "규칙 인사이트" 페이지를 사용하여 기여가 규칙을 위반했는지 확인할 수 있습니다. 자세한 정보는 "리포지토리에 대한 규칙 세트 관리"을(를) 참조하세요.

분기 또는 태그 규칙 세트 만들기

  1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.

  2. 리포지토리 이름 아래에서 Settings(설정)를 클릭합니다. "설정" 탭이 표시되지 않으면 드롭다운 메뉴를 선택한 다음 설정을 클릭합니다.

    탭을 보여 주는 리포지토리 헤더의 스크린샷. "설정" 탭이 진한 주황색 윤곽선으로 강조 표시됩니다.

  3. 왼쪽 사이드바의 "코드 및 자동화"에서 규칙을 클릭한 다음 규칙 세트를 클릭합니다.

    리포지토리에 대한 "설정" 페이지의 사이드바 스크린샷. "규칙" 하위 메뉴가 확장되고 "규칙 세트" 옵션이 주황색 윤곽선으로 표시되어 있습니다.

  4. 새 규칙 세트를 클릭합니다.

  5. 분기를 대상으로 하는 규칙 세트를 만들려면 새 분기 규칙 세트를 클릭합니다.

  6. 또는 태그를 대상으로 하는 규칙 집합을 만들려면 새 태그 규칙 집합을 클릭합니다.

  7. "규칙 집합 이름" 아래에 규칙 집합의 이름을 입력합니다.

  8. 필요에 따라 기본 적용 상태를 변경하려면 사용 안 함 을 클릭하고 적용 상태를 선택합니다. 적용 상태에 대한 자세한 내용은 "규칙 세트 정보"을 참조하세요.

분기 또는 태그 규칙 집합에 대한 바이패스 권한 부여

특정 역할, 팀 또는 앱 바이패스 권한 을(를) 승인하는 기능을 부여할 수 있습니다. 다음 사람에게는 바이패스 액세스 권한이 부여됩니다.

  • 리포지토리 관리자, 조직 소유자 및 엔터프라이즈 소유자.
  • 유지 관리 또는 작성 역할 또는 쓰기 역할에 따른 사용자 지정 리포지토리 역할
  • Teams
  • 배포 키
  • GitHub Apps
  • Dependabot. Dependabot에 대한 자세한 내용은 "Dependabot 빠른 시작 가이드" 항목을 참조하세요.
  1. 규칙 세트에 대한 바이패스 권한을 부여하려면 "바이패스 목록" 섹션에서 바이패스 추가를 클릭합니다.

  2. 표시되는 "바이패스 추가" 모달 대화 상자에서 바이패스 권한을 부여할 역할, 팀 또는 앱을 검색한 다음 "제안" 섹션에서 역할, 팀 또는 앱을 선택하고 선택한 항목 추가를 클릭합니다.

  3. 필요에 따라 리포지토리에 직접 푸시하지는 못하도록 하면서 행위자에게 바이패스 권한을 부여하려면 '항상 허용' 오른쪽에서 클릭 후 pull request에 대해서만을 클릭합니다.

    이제 선택한 행위자가 pull request를 열어서 리포지토리를 변경하여 pull request 및 감사 로그에서 변경 내용을 명확하게 추적해야 합니다. 그러면 행위자가 분기 보호를 바이패스하고 끌어오기 요청을 병합하도록 선택할 수 있습니다.

대상으로 지정할 분기 또는 태그 선택

분기 또는 태그를 대상으로 지정하려면 "대상 분기" 또는 "대상 태그" 섹션에서 대상 추가를 선택한 다음 분기 또는 태그를 포함하거나 제외할 방법을 선택합니다. fnmatch 구문을 사용하여 패턴에 따라 분기 또는 태그를 포함하거나 제외할 수 있습니다. 자세한 내용은 "fnmatch 구문 사용"을 참조하세요.

동일한 규칙 세트에 여러 대상 지정 조건을 추가할 수 있습니다. 예를 들어 기본 분기를 포함하고 *feature* 패턴과 일치하는 분기를 포함한 다음, not-a-feature 패턴과 일치하는 분기를 명시적으로 제외할 수 있습니다.

분기 또는 태그 보호 선택

"분기 보호" 또는 "태그 보호" 섹션에서 규칙 세트에 포함할 규칙을 선택합니다. 규칙을 선택하면 규칙에 대한 추가 설정을 입력할 수 있습니다. 규칙에 대한 자세한 내용은 "규칙 세트에 사용 가능한 규칙"을(를) 참조하세요.

참고: 병합 전 상태 검사 필요를 선택하는 경우 "추가 설정" 섹션에서 다음을 수행합니다.

  • 필요한 각 상태 검사 이름을 입력할 수 있습니다. 상태 검사를 요구 사항으로 추가하는 작업을 완료하려면 를 클릭해야 합니다.
  • 병합 전 분기 업데이트 필요를 선택하는 경우 보호를 적용할 검사를 정의해야 합니다.

메타데이터 제한 추가

Note

분기를 Squash 병합하는 경우 해당 분기의 모든 커밋이 기본 분기에 대한 메타데이터 요구 사항을 충족해야 합니다.

  1. 필요에 따라 커밋 메타데이터 또는 분기 이름을 제어하는 규칙을 추가하려면 "제한" 섹션에서 커밋 메타데이터 제한 또는 분기 이름 제한을 클릭합니다.

  2. 제한 설정을 구성한 다음 추가를 클릭합니다. 동일한 규칙 세트에 여러 제한을 추가할 수 있습니다.

  3. 지정된 regex 패턴과 일치하려면 "요구 사항" 드롭다운에서 지정된 regex 패턴과 일치해야 함을 선택합니다.

    "일치하는 패턴으로 시작해야 함"과 같은 대부분의 요구 사항에서 입력하는 패턴은 문자 그대로 해석되며 와일드카드는 지원되지 않습니다. 예를 들어 * 문자는 리터럴 * 문자만 나타냅니다.

    더 복잡한 패턴의 경우 "지정된 regex 패턴과 일치해야 함" 또는 "지정된 정규식 패턴과 일치하지 않아야 함"을 선택한 다음 정규식 구문을 사용하여 일치하는 패턴을 정의할 수 있습니다. 자세한 내용은 GitHub Enterprise Cloud 설명서의 '커밋 메타데이터에 대한 정규식 정보'를 참조하세요.

    리포지토리에 대한 규칙 세트를 보는 모든 사용자는 여러분이 제공한 설명을 볼 수 있습니다.

분기 또는 태그 규칙 집합 완료 및 다음 단계

규칙 세트 만들기를 마치려면 만들기를 클릭합니다. 규칙 세트의 적용 상태가 "활성"으로 설정된 경우 규칙 세트가 즉시 적용됩니다.

규칙 세트에 대한 인사이트를 보고 규칙이 기여자에게 미치는 영향을 확인할 수 있습니다. 적용 상태가 "평가"로 설정된 경우 규칙 세트가 활성 상태이면 어떤 작업이 통과했거나 실패했는지 확인할 수 있습니다. 규칙 세트의 인사이트에 대한 자세한 내용은 "리포지토리에 대한 규칙 세트 관리"을(를) 참조하세요.

푸시 규칙 집합 만들기

Note

이 규칙 집합은 이 리포지토리의 전체 포크 네트워크에 대한 제한을 적용합니다.

프라이빗 또는 내부 리포지토리에 대한 푸시 규칙 집합을 만들 수 있습니다.

  1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.

  2. 리포지토리 이름 아래에서 Settings(설정)를 클릭합니다. "설정" 탭이 표시되지 않으면 드롭다운 메뉴를 선택한 다음 설정을 클릭합니다.

    탭을 보여 주는 리포지토리 헤더의 스크린샷. "설정" 탭이 진한 주황색 윤곽선으로 강조 표시됩니다.

  3. 왼쪽 사이드바의 "코드 및 자동화"에서 규칙을 클릭한 다음 규칙 세트를 클릭합니다.

    리포지토리에 대한 "설정" 페이지의 사이드바 스크린샷. "규칙" 하위 메뉴가 확장되고 "규칙 세트" 옵션이 주황색 윤곽선으로 표시되어 있습니다.

  4. 새 규칙 세트를 클릭합니다.

  5. 분기를 대상으로 하는 규칙 집합을 만들려면 새 푸시 규칙 집합을 클릭합니다.

  6. "규칙 집합 이름" 아래에 규칙 집합의 이름을 입력합니다.

  7. 필요에 따라 기본 적용 상태를 변경하려면 사용 안 함 을 클릭하고 적용 상태를 선택합니다. 적용 상태에 대한 자세한 내용은 "규칙 세트 정보"을 참조하세요.

푸시 규칙 집합에 대한 바이패스 권한 부여

Note

이 리포지토리의 푸시 규칙 집합에 대한 바이패스 권한은 이 리포지토리의 전체 포크 네트워크에 상속됩니다. 이는 이 리포지토리의 전체 포크 네트워크에 있는 모든 리포지토리에 대해 이 규칙 집합을 바이패스할 수 있는 유일한 사용자는 루트 리포지토리에서 이 규칙 집합을 바이패스할 수 있는 사용자뿐임을 의미합니다.

특정 역할, 팀 또는 앱 바이패스 권한 을(를) 승인하는 기능을 부여할 수 있습니다. 다음 사람에게는 바이패스 액세스 권한이 부여됩니다.

  • 리포지토리 관리자, 조직 소유자 및 엔터프라이즈 소유자.
  • 유지 관리 또는 작성 역할 또는 쓰기 역할에 따른 사용자 지정 리포지토리 역할
  • Teams
  • 배포 키
  • GitHub Apps
  • Dependabot. Dependabot에 대한 자세한 내용은 "Dependabot 빠른 시작 가이드" 항목을 참조하세요.
  1. 규칙 세트에 대한 바이패스 권한을 부여하려면 "바이패스 목록" 섹션에서 바이패스 추가를 클릭합니다.
  2. 표시되는 "바이패스 추가" 모달 대화 상자에서 바이패스 권한을 부여할 역할, 팀 또는 앱을 검색한 다음 "제안" 섹션에서 역할, 팀 또는 앱을 선택하고 선택한 항목 추가를 클릭합니다.

푸시 보호 선택

파일 확장명, 파일 경로 길이, 파일 및 폴더 경로, 파일 크기에 따라 이 리포지토리와 이 리포지토리의 전체 포크 네트워크에 대한 푸시를 차단할 수 있습니다.

구성하는 모든 푸시 방지는 이 리포지토리와 이 리포지토리의 전체 포크 네트워크에서 푸시를 차단합니다.

  1. "보호 방지" 아래에서 적용하려는 제한을 클릭합니다. 그런 다음 선택한 제한 사항에 대한 세부 정보를 입력합니다.

    파일 경로 제한에 부분 또는 전체 경로를 사용할 수 있습니다. 이 테스트에 fnmatch 구문을 사용할 수 있습니다. 예를 들어 test/demo/**/*를 대상으로 하는 제한은 test/demo/ 디렉터리의 파일이나 폴더에 대한 푸시를 방지합니다. test/docs/pushrules.md를 대상으로 하는 제한 사항은 test/docs/ 디렉터리의 pushrules.md 파일에 대한 푸시를 방지합니다. 자세한 내용은 "리포지토리에 대한 규칙 세트 만들기"을(를) 참조하세요.

푸시 규칙 집합 완료 및 다음 단계

규칙 세트 만들기를 마치려면 만들기를 클릭합니다. 규칙 세트의 적용 상태가 "활성"으로 설정된 경우 규칙 세트가 즉시 적용됩니다.

규칙 세트에 대한 인사이트를 보고 규칙이 기여자에게 미치는 영향을 확인할 수 있습니다. 적용 상태가 "평가"로 설정된 경우 규칙 세트가 활성 상태이면 어떤 작업이 통과했거나 실패했는지 확인할 수 있습니다. 규칙 세트의 인사이트에 대한 자세한 내용은 "리포지토리에 대한 규칙 세트 관리"을(를) 참조하세요.