보호된 브랜치

Tier: Free, Premium, Ultimate Offering: GitLab.com, 자체 관리, GitLab Dedicated

GitLab에서 권한은 기본적으로 리포지토리 및 브랜치에 대한 읽기 또는 쓰기 권한을 갖는 것을 중심으로 정의됩니다. 특정 브랜치에 추가 제한을 가하려면 해당 브랜치를 보호할 수 있습니다.

보호된 브랜치는 다음을 통제합니다:

  • 어떤 사용자가 브랜치로 병합할 수 있는지.
  • 어떤 사용자가 브랜치로 푸시할 수 있는지.
  • 사용자가 브랜치로 강제 푸시할 수 있는지.
  • 코드 소유자 파일에 있는 파일의 변경 사항을 브랜치로 직접 푸시할 수 있는지.
  • 어떤 사용자가 브랜치를 보호해제할 수 있는지.
  • 사용자가 커밋 API를 통해 브랜치를 수정할 수 있는지.

리포지토리의 기본 브랜치는 기본적으로 보호됩니다.

보호된 브랜치를 수정할 수 있는 사용자

  • GitLab 16.0에서 브랜치 푸시 권한이 허용된 권한 또한 GitLab 관리자가 필요하도록 변경되었습니다.

브랜치가 보호되면 기본 동작에서는 해당 브랜치에 제한이 강제됩니다.

동작 수행 가능한 사용자
브랜치 보호 적어도 Maintainer 역할을 가진 사용자.
브랜치로 푸시 허용된 권한을 가진 모든 사용자. (1)
브랜치로 강제 푸시 아무도 불가능합니다. (3)
브랜치 삭제 아무도 불가능합니다. (2)
  1. 개발자 역할을 가진 사용자는 그룹 내에서 프로젝트를 생성할 수 있지만, 처음에 기본 브랜치로 푸시할 수 있는 권한이 없을 수 있습니다.
  2. 누구도 Git 명령을 사용하여 보호된 브랜치를 삭제할 수 없지만, 적어도 Maintainer 역할을 가진 사용자는 UI 또는 API에서 보호된 브랜치를 삭제할 수 있습니다.
  3. group_protected_branches 기능 플래그가 활성화되어 있고 동일한 브랜치가 그룹 및 프로젝트 수준에서 모두 보호되는 경우, 프로젝트 수준에서 구성된 강제 푸시 설정은 무시됩니다. 다른 모든 보호 규칙은 계속해서 프로젝트 수준 설정을 사용합니다.

병합 요청 승인 정책을 구현하여 보호된 브랜치가 보호 해제되거나 삭제되는 것을 방지할 수 있습니다.

브랜치가 여러 규칙과 일치할 때

브랜치가 여러 규격과 일치하는 경우, 가장 허용도가 높은 규칙이 브랜치의 보호 수준을 결정합니다. 예를 들어 다음과 같은 와일드카드를 포함하는 규칙을 고려해보세요:

브랜치 이름 패턴 병합 허용 여부 푸시 및 병합 허용 여부
v1.x Maintainer Maintainer
v1.* Maintainer + Developer Maintainer
v* 아무도 아무도

v1.x라는 브랜치 이름은 v1.x, v1.*, v* 세 가지 브랜치 이름 패턴에 대해 대소문자를 구분하여 일치합니다. 가장 허용도가 높은 옵션이 행동을 결정하기 때문에, v1.x 브랜치에 대한 권한은 다음과 같습니다:

  • 병합 허용: 세 가지 설정 중에서 Maintainer + Developer가 가장 허용도가 높고 결과적으로 브랜치 동작을 제어합니다. 더 엄격한 권한을 가진 v1.xv*에도 불구하고, 개발자 역할을 가진 사용자는 브랜치로 병합할 수 있습니다.
  • 푸시 및 병합 허용: 세 가지 설정 중에서 Maintainer가 가장 허용도가 높고 결과적으로 브랜치 동작을 제어합니다. v* 브랜치가 아무도로 설정되어 있음에도 불구하고, v1.x 또는 v1.*에도 일치하는 브랜치는 더 허용적인 Maintainer 권한을 받습니다.

특정 규칙이 브랜치의 동작을 제어한다는 것을 확실히 하려면, 일치하는 다른 모든 패턴은 보다 덜 허용되거나 동등한 규칙을 적용해야 합니다.

아무도v1.x 브랜치로 푸시할 수 있도록 하려면, v1.x에 일치하는 모든 패턴이 푸시 및 병합 허용아무도로 설정해야 합니다. 예를 들어 아래와 같이 설정해야 합니다:

브랜치 이름 패턴 병합 허용 여부 푸시 및 병합 허용 여부
v1.x Maintainer 아무도
v1.* Maintainer + Developer 아무도
v* 아무도 아무도

기본 브랜치 보호 수준 설정

관리자는 관리 영역에서 기본 브랜치 보호 수준을 설정할 수 있습니다.

기존 브랜치에 보호 추가하기

그룹 내 모든 프로젝트 또는 특정 프로젝트를 위해 보호된 브랜치를 구성합니다.

프로젝트 당

전제 조건:

  • 적어도 Maintainer 역할을 가지고 있어야 합니다.
  • 보호된 브랜치에 병합 허용 또는 푸시 및 병합 허용 권한을 부여할 때, 해당 그룹은 프로젝트에 추가되어 있어야 합니다.

브랜치를 보호하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 브랜치 드롭다운 목록에서 보호하려는 브랜치를 선택합니다.
  6. 병합이 허용된 사용자 목록에서 이 브랜치로 병합할 수 있는 역할을 선택합니다.
  7. 푸시 및 병합이 허용된 사용자 목록에서 이 브랜치로 푸시할 수 있는 역할을 선택합니다.

    참고: GitLab Premium 및 Ultimate에서는 그룹이나 개별 사용자를 병합이 허용된 사용자푸시 및 병합이 허용된 사용자로 추가할 수도 있습니다.

  8. 보호를 선택합니다.

보호된 브랜치가 보호된 브랜치 목록에 표시됩니다.

그룹 내 모든 프로젝트를 위해

상세 정보: Tier: Premium, Ultimate Offering: Self-managed

플래그: 자체 관리형 GitLab에서는 기본적으로 이 기능을 사용할 수 없습니다. 관리자는 기능 플래그를group_protected_branches로 활성화할 수 있습니다. GitLab.com 및 전용 GitLab에서는 이 기능을 사용할 수 없습니다.

그룹 소유자는 그룹을 위해 보호된 브랜치를 생성할 수 있습니다. 이러한 설정은 그룹 내의 모든 프로젝트에 상속되며, 프로젝트 설정으로 재정의할 수 없습니다. 특정 브랜치가 그룹 및 프로젝트 수준에서 강제 푸시가 허용됨 설정으로 구성된 경우, 프로젝트 수준의 강제 푸시가 허용됨 설정은 그룹 수준의 설정에 우선하여 무시됩니다.

전제 조건: - 그룹에서 소유자 역할을 가져야 합니다.

그룹 내 모든 프로젝트를 위해 브랜치를 보호하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 브랜치 텍스트 상자에 브랜치 이름이나 와일드카드를 입력합니다. 브랜치 이름 및 와일드카드는 대소문자를 구분합니다.
  6. 병합이 허용된 사용자 목록에서 이 브랜치로 병합할 수 있는 역할을 선택합니다.
  7. 푸시 및 병합이 허용된 사용자 목록에서 이 브랜치로 푸시할 수 있는 역할을 선택합니다.
  8. 보호를 선택합니다.

보호된 브랜치가 보호된 브랜치 목록에 추가됩니다.

와일드카드 규칙을 사용하여 여러 브랜치 보호하기

와일드카드를 사용하면 하나의 브랜치에 여러 규칙을 적용할 수 있습니다. 하나의 브랜치에 둘 이상의 규칙이 적용되는 경우 해당 브랜치의 동작은 가장 관대한 규칙에 따릅니다. 병합 제어가 올바르게 작동하려면 병합이 허용된 사용자푸시 및 병합이 허용된 사용자보다 더 넓은 사용자 범위로 설정해야 합니다.

전제 조건: - 적어도 Maintainer 역할을 가져야 합니다.

동시에 여러 브랜치를 보호하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 브랜치 드롭다운 목록에서 브랜치 이름과 와일드카드를 입력합니다. 브랜치 이름과 와일드카드는 대소문자를 구분합니다. 예:

    와일드카드로 보호된 브랜치 일치하는 브랜치
    *-stable production-stable, staging-stable
    production/* production/app-server, production/load-balancer
    *gitlab* gitlab, gitlab/staging, master/gitlab/production
  6. 병합이 허용된 사용자 목록에서 이 브랜치로 병합할 수 있는 역할을 선택합니다.
  7. 푸시 및 병합이 허용된 사용자 목록에서 이 브랜치로 푸시할 수 있는 역할을 선택합니다. GitLab Premium 또는 Ultimate에서는 그룹이나 개별 사용자를 추가할 수도 있습니다.
  8. 보호를 선택합니다.

보호된 브랜치가 보호된 브랜치 목록에 표시됩니다.

보호가 적용된 새 브랜치 생성하기

적어도 Developer 역할을 가진 사용자는 새 보호된 브랜치를 생성할 수 있습니다.

전제 조건: - 푸시 및 병합이 허용된 사용자아무도로 설정되어 있어야 합니다. - 병합이 허용된 사용자개발자로 설정되어 있어야 합니다.

UI 또는 API를 사용하여 새 보호된 브랜치를 생성할 수 있습니다. 명령줄이나 Git 클라이언트 응용 프로그램에서 실수로 브랜치를 생성하지 못하도록 합니다.

사용자 인터페이스를 통해 새 브랜치를 생성하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 코드 > 브랜치를 선택합니다.
  3. 새 브랜치를 선택합니다.
  4. 브랜치 이름을 입력하고 새 브랜치를 기반으로 할 기존 브랜치, 태그 또는 커밋을 선택합니다. 보호된 브랜치와 보호된 브랜치에 이미 있는 커밋만 허용됩니다.

보호된 브랜치에 대한 모든 사람이 병합 요청 제출하기

보호된 브랜치로 직접 체크인을 허용하는 대신 모든 사람에게 병합 요청을 제출하도록 강제할 수 있습니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 브랜치 드롭다운 목록에서 보호하려는 브랜치를 선택합니다.
  6. 병합이 허용된 사용자 목록에서 개발자 + 관리자를 선택합니다.
  7. 추가로 푸시 및 병합이 허용된 사용자 목록에서 아무도를 선택합니다.
  8. 보호를 선택합니다.

보호된 브랜치로 직접 푸시하는 것을 모두에게 허용하기

쓰기 액세스 권한을 가진 모든 사람이 보호된 브랜치로 푸시할 수 있도록 할 수 있습니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 브랜치 드롭다운 목록에서 보호하려는 브랜치를 선택합니다.
  6. 푸시 및 병합이 허용된 사용자 목록에서 개발자 + 관리자를 선택합니다.
  7. 보호를 선택합니다.

배포 키가 보호된 브랜치로 푸시하도록 허용하기

  • GitLab 13.7에서 도입되었습니다.
  • 이 기능은 GitLab.com 13.7에 선택적으로 배포되었으며 모든 사용자에게 제공되지 않을 수 있습니다.
  • 이 기능은 GitLab 13.9에서 모든 사용자에게 제공됩니다.

배포 키의 소유자가 보호된 브랜치로 푸시하도록 허용할 수 있습니다. 배포 키는 관련 프로젝트의 구성원이 아니더라도 작동하지만, 배포 키의 소유자는 프로젝트에 적어도 읽기 액세스 권한을 갖고 있어야합니다.

전제 조건:

  • 프로젝트에 배포 키가 활성화되어 있어야 합니다. 프로젝트 배포 키는 생성될 때 기본적으로 활성화됩니다. 그러나 공개 배포 키는 프로젝트에 권한을 부여해야 합니다.
  • 배포 키는 프로젝트 저장소에 쓰기 액세스를 갖고 있어야 합니다.

배포 키가 보호된 브랜치로 푸시하도록 허용하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 브랜치 드롭다운 목록에서 보호하려는 브랜치를 선택합니다.
  6. 푸시 및 병합이 허용된 사용자 목록에서 배포 키를 선택합니다.
  7. 보호를 선택합니다.

배포 키는 병합이 허용된 사용자 드롭다운 목록에 사용할 수 없습니다.

보호된 브랜치에서 강제 푸시 허용하기

  • GitLab 13.10에서 도입되었습니다 (플래그allow_force_push_to_protected_branches로).
  • 기본적으로 비활성화되어 있는데, GitLab 14.0에서 활성화되었습니다. allow_force_push_to_protected_branches 플래그 제거됨.

보호된 브랜치로 강제 푸시를 허용할 수 있습니다.

새 브랜치를 보호하고 강제 푸시를 사용하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 브랜치 드롭다운 목록에서 보호하려는 브랜치를 선택합니다.
  6. 푸시 및 병합이 허용된 사용자병합이 허용된 사용자 목록에서 원하는 설정을 선택합니다.
  7. 모든 사용자에게 푸시 액세스를 강제 푸시하도록 허용하려면 푸시 강제 허용 토글을 켭니다.
  8. 보호를 선택합니다.

이미 보호된 브랜치에서 강제 푸시를 활성화하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 보호된 브랜치 목록에서 브랜치 옆에 위치한 푸시 강제 허용 토글을 켭니다.

이 브랜치에 푸시할 수 있는 멤버는 이제 강제 푸시도 할 수 있습니다.

한 브랜치가 여러 규칙과 일치하는 경우

한 브랜치가 여러 규칙과 일치하는 경우, 가장 관대한 규칙이 브랜치의 보호 수준을 결정합니다. 예를 들어 다음과 같은 와일드카드를 포함한 규칙을 고려해보십시오:

브랜치 이름 패턴 강제 푸시 허용
v1.x 허용됨
v1.* 비허용
v* 비허용

v1.x라는 브랜치는 v1.x, v1.*, v* 세 브랜치 이름 패턴을 모두 일치시킵니다. 가장 관대한 옵션이 동작을 결정하므로, 강제 푸시 허용에 대한 결과적인 권한은 다음과 같습니다:

  • 강제 푸시 허용: 3개의 설정 중 허용이 가장 관대하며, 결과적으로 브랜치 동작을 제어합니다. 더 엄격한 권한을 가진 v1.xv*에도 불구하고 이 브랜치에 푸시할 수 있는 모든 사용자는 강제 푸시도 할 수 있습니다.

참고: 프로젝트 수준의 브랜치에 대한 강제 푸시 설정은 그룹 수준 설정이 우선되며, group_protected_branches 기능 플래그가 활성화되고 그룹 소유자가 동일한 브랜치에 대해 그룹 수준 보호를 설정한 경우에는 무시됩니다.

보호된 브랜치에서 코드 소유자 승인 필요

Tier: 프리미엄, 얼티메이트 Offering: GitLab.com, Self-managed, GitLab Dedicated
  • GitLab 13.5에서 도입되었으며, 보호된 브랜치에 푸시할 수 있는 사용자 및 그룹은 기능 브랜치를 병합하기 위해 병합 요청을 사용할 필요가 없습니다. 이는 병합 요청 승인 규칙을 건너뛸 수 있다는 것을 의미합니다.

보호된 브랜치에서 코드 소유자의 승인을 하나 이상 요구할 수 있습니다. 하나의 브랜치가 여러 규칙으로 보호된 경우 해당 규칙 중 코드 소유자의 승인이 필요로 설정된 규칙이 하나라도 적용되면 코드 소유자의 승인이 필요합니다.

새 브랜치를 보호하고 코드 소유자의 승인을 활성화하려면:

  1. 왼쪽 사이드바에서 검색 또는 발견을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 브랜치 드롭다운 목록에서 보호할 브랜치를 선택합니다.
  6. 푸시 및 병합 허용병합 허용 사용자 목록에서 원하는 설정을 선택합니다.
  7. 코드 소유자의 승인 필요 토글을 켭니다.
  8. 보호를 선택합니다.

이미 보호된 브랜치에서 코드 소유자의 승인을 활성화하려면:

  1. 왼쪽 사이드바에서 검색 또는 발견을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 보호된 브랜치 추가를 선택합니다.
  5. 보호된 브랜치 목록에서 브랜치 옆에 있는 코드 소유자 승인 토글을 켭니다.

활성화되면 이러한 브랜치의 모든 병합 요청은 일치하는 규칙에 따라 코드 소유자의 승인이 필요하며, 또한 규칙이 일치하는 경우 보호된 브랜치로의 직접 푸시가 거부됩니다.

CODEOWNERS 파일에 지정되지 않은 사용자는 지정된 파일 또는 경로에 대한 변경 사항을 푸시할 수 없으며, 특별히 허용되지 않는 경우 보호된 브랜치로 직접 푸시하는 것을 제한할 필요가 없습니다. 대신, 코드 소유자 검토가 필요한 특정 파일로의 푸시를 제한할 수 있습니다.

GitLab 프리미엄 13.5 및 이후에서 보호된 브랜치에 푸시할 권한이 있는 사용자 및 그룹은 기능 브랜치를 병합하기 위해 병합 요청을 필요로 하지 않습니다. 따라서 병합 요청 승인 규칙, 코드 소유자도 포함됩니다.

보호된 브랜치에서 실행되는 파이프라인

보호된 브랜치로의 병합 또는 푸시 권한이 파이프라인 및 작업에서 명령을 실행할 수 있는지를 정의합니다.

병합 요청 파이프라인은 소스 브랜치에서 실행되므로 병합 요청을 열 수 있는 사용자가 소스 브랜치로 병합 또는 푸시할 수 없는 경우 파이프라인이 생성되지 않습니다.

자세한 내용은 보호된 브랜치의 파이프라인 보안을 참조하십시오.

보호된 브랜치 삭제

최소한 Maintainer 역할을 가진 사용자는 GitLab 웹 인터페이스를 사용하여 보호된 브랜치를 수동으로 삭제할 수 있습니다.

  1. 왼쪽 사이드바에서 검색 또는 발견을 선택하고 프로젝트를 찾습니다.
  2. 코드 > 브랜치를 선택합니다.
  3. 삭제할 브랜치 옆에 있는 삭제 ()를 선택합니다.
  4. 확인 대화상자에서 브랜치 이름을 입력하고 예, 보호된 브랜치 삭제를 선택합니다. 브랜치 이름은 대소문자를 구분합니다.

보호된 브랜치는 UI 또는 API를 통해만 삭제할 수 있습니다. 로컬 Git 명령이나 외부 Git 클라이언트를 통한 실수로 브랜치를 삭제하는 것을 방지합니다.

관련 주제

문제 해결

브랜치 이름은 대소문자를 구별합니다

git에서 브랜치 이름은 대소문자를 구별합니다. 보호된 브랜치를 구성하거나 대상 브랜치 작업 흐름을 설정할 때, devDEV 또는 Dev가 같지 않음을 주의하십시오.