파일 잠금

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

병합할 수 없는 충돌로 인한 작업 낭비를 방지하려면 다른 작업 방식이 필요합니다. 이는 명시적으로 쓰기 권한을 요청하고, 시작하기 전에 다른 사람이 동일한 파일을 편집하지 않았는지 확인하는 것을 의미합니다.

보통 브랜치 전략은 소스 코드와 일반 텍스트에 대해 잘 작동하지만, 여러 버전을 병합할 수 있기 때문에 바이너리 파일에는 작동하지 않습니다.

파일 잠금이 설정되면 잠금 가능한 파일은 기본적으로 읽기 전용입니다.

파일이 잠기면 해당 파일을 잠금한 사용자만 수정할 수 있습니다. 이 사용자는 “잠금을 보유하고 있다” 또는 “잠금을 가졌다”고 말하며, 한 번에 한 사용자만 파일을 잠글 수 있기 때문입니다. 파일이나 디렉토리의 잠금이 해제되면 사용자는 “잠금을 해제했다”고 말합니다.

GitLab은 파일 잠금을 지원하는 두 가지 다른 모드를 지원합니다.

  • 독점적인 파일 잠금 (이진 파일용): Git LFS 및 .gitattributes를 사용하여 명령줄을 통해 수행되며, 잠금된 파일이 어떤 브랜치에서도 수정되지 않도록 합니다.
  • 기본 브랜치 잠금: GitLab UI를 통해, 기본 브랜치에서 잠긴 파일 및 디렉토리의 수정을 방지합니다.

권한

잠금은 저장소에서 적어도 개발자 역할을 가진 사람이 생성할 수 있습니다.

잠긴 파일을 수정할 수 있는 것은 해당 파일 또는 디렉토리를 잠금한 사용자 뿐입니다. 다른 사용자들은 푸시, 병합 또는 다른 방법을 통해 잠긴 파일을 수정하는 것을 방지하며 다음과 같은 오류가 표시됩니다: The path '.gitignore' is locked by Administrator.

독점적인 파일 잠금

이 프로세스를 사용하면 단일 파일이나 파일 확장자를 잠글 수 있으며, 이는 명령줄을 통해 수행됩니다. GitLab 유료 구독이 필요하지 않습니다.

Git LFS는 파일 추적으로 유명하지만 파일 잠금에도 사용할 수 있습니다. 이것이 독점적인 파일 잠금에 사용되는 방법입니다.

Git LFS 설치

시작하기 전에 컴퓨터에 Git LFS가 설치되어 있는지 확인하세요. 터미널 창을 열고 다음 명령을 실행합니다:

git-lfs --version

이 명령이 인식되지 않는 경우, 설치해야 합니다. OS에 따라 여러 설치 방법을 선택할 수 있습니다. Homebrew로 설치하는 방법은 다음과 같습니다:

brew install git-lfs

설치한 후, 터미널 창에서 로컬 저장소를 열고 저장소에 Git LFS를 설치하세요. LFS가 이미 설치되어 있는지 확실하다면 이 단계를 건너뛸 수 있습니다. 확신이 없으면 재설치해도 해가 없습니다:

git lfs install

자세한 정보는 Git LFS 사용을 참조하세요.

독점적인 파일 잠금 구성

Maintainer 역할이 필요합니다. 프로젝트에 명령줄을 통해 독점적인 파일 잠금을 설정하세요.

파일 잠금을 사용하기 전에 먼저 Git LFS에 어떤 종류의 파일이 잠급니다라고 알려야 합니다. 다음 명령은 PNG 파일을 LFS에 저장하고 해당 파일을 잠금 가능하다고 표시합니다:

git lfs track "*.png" --lockable

위 명령을 실행한 후에는 .gitattributes라는 파일이 만들어지거나 업데이트되며 다음과 같은 내용이 포함됩니다:

*.png filter=lfs diff=lfs merge=lfs -text lockable

이와 같이 LFS를 사용하지 않고도 파일 유형을 잠급 가능하게 등록할 수도 있습니다 (예를 들어, LFS 파일 잠금 API를 구현한 원격 서버에서 필요한 파일을 잠글 수 있게 하려면 .gitattributes 파일을 수정할 수 있습니다):

*.pdf lockable

.gitattributes 파일은 프로세스의 핵심이며 변경 사항이 적용되려면 원격 저장소에 푸시해야 합니다.

파일 유형이 잠급 가능하게 등록된 후에는 Git LFS가 파일 시스템에서 자동으로 읽기 전용으로 만듭니다. 이는 파일을 편집하기 전에 해당 파일을 꼭 잠그어야 함을 의미합니다.

파일 잠금

파일을 잠금으로써 누군가 다른 사람이 그것을 편집하고 있는지 확인하고 누군가 다른이 파일을 편집하지 못하도록 할 수 있습니다. 반면에, 파일을 잠금 해제하면 편집을 마쳤음을 알릴 수 있으며 다른 사람이 편집할 수 있도록 합니다. 독점적인 파일 잠금을 사용하여 파일을 잠금하거나 잠금을 해제하려면 저장소 디렉토리에서 터미널 창을 열고 아래 명령을 실행하세요.

파일을 잠글려면:

git lfs lock path/to/file.png

파일을 잠금 해제려면:

git lfs unlock path/to/file.png

또한 파일 ID로도 잠금을 해제할 수 있습니다 (잠금된 파일을 보기할 때 LFS에서 제공되는):

git lfs unlock --id=123

자신이 잠그지 않은 파일을 어떤 이유에서든 잠금 해제해야하는 경우 Maintainer 권한이 있으면 다음과 같이 --force 플래그를 사용할 수 있습니다:

git lfs unlock --id=123 --force

잠긴 상태든 아니든 파일을 GitLab에 푸시할 수 있습니다.

참고: Git LFS 명령줄 인터페이스를 통해 다중 브랜치 파일 잠금을 생성하고 관리할 수 있지만, 파일 잠금은 어떤 파일에 대해서든 생성할 수 있습니다.

배타적으로 잠긴 파일 보기

로컬에서 LFS로 잠긴 모든 파일을 나열하려면 저장소에서 터미널 창을 열고 다음을 실행하세요:

git lfs locks

출력은 각각 누가 잠긴 지와 파일의 ID가 포함된 잠긴 파일을 나열합니다.

GitLab 저장소 파일 트리에서는 Git LFS로 추적되는 파일에 대한 LFS 뱃지와 배타적으로 잠긴 파일에는 잠금 아이콘이 표시됩니다:

LFS-Locked files

또한 GitLab UI에서 기존 잠금 보기 및 제거를 할 수 있습니다.

참고: 배타적으로 잠긴 파일의 이름을 바꾸면 잠금이 해제됩니다. 잠금을 유지하려면 다시 잠가야 합니다.

편집 가능한 파일 편집

파일을 잠금 가능하게 구성한 후에는 읽기 전용으로 설정됩니다. 그러므로 편집하기 전에 잠그어야 합니다.

공유 프로젝트를 위한 권장 워크플로우:

  1. 파일을 잠그세요.
  2. 파일을 편집하세요.
  3. 변경 사항을 커밋하세요.
  4. 저장소에 푸시하세요.
  5. 변경 사항을 검토하고 승인하고 병합하세요.
  6. 파일을 잠금 해제하세요.

기본 브랜치 파일 및 디렉토리 잠금

Tier: Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

이 과정을 통해 GitLab UI를 통해 한 번에 하나의 파일을 잠글 수 있으며 GitLab Premium 또는 Ultimate 티어에 대한 액세스가 필요합니다.

기본 브랜치 파일 및 디렉토리 잠금은 프로젝트 설정에서 설정된 기본 브랜치에만 적용됩니다.

기본 브랜치에서 잠긴 파일에 대한 변경은 차단되며, 잠긴 파일을 수정하는 병합 요청도 포함됩니다. 변경을 허용하려면 파일을 잠그세요.

파일 또는 디렉토리 잠금

파일을 잠그려면:

  1. GitLab에서 파일 또는 디렉토리를 엽니다.
  2. 파일 위의 오른쪽 상단에 있는 잠금을 선택합니다.
  3. 확인 대화상자에서 확인을 선택합니다.

파일을 잠글 권한이 없으면 버튼이 활성화되지 않습니다.

만약 디렉토리를 잠금한 사용자(본인이 아닌 경우)를 보려면 해당 버튼 위로 마우스를 올리세요. 잠긴 파일에 대해 비슷한 기능을 복구하는 것은 issue 376222에서 논의되었습니다.

기존 잠금 보기 및 제거

파일 잠금을 보고 제거하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. Code > 잠긴 파일을 선택합니다.

이 목록에는 LFS나 GitLab UI를 통해 잠긴 모든 파일이 표시됩니다.

잠금은 저자 또는 최소한 Maintainer 역할을 가진 사용자에 의해 제거될 수 있습니다.