파일 잠금

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

Merge 충돌로 인한 낭비된 작업을 방지하려면 다른 작업 방식이 필요합니다. 이는 명시적으로 쓰기 권한을 요청하고 시작하기 전에 누구도 같은 파일을 편집하고 있지 않은지 확인하는 것을 의미합니다.

일반적으로 브랜치 전략은 소스 코드와 일반 텍스트에 대해 충분히 작동하지만, 이진 파일에는 동작하지 않습니다.

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

파일이 잠겨 있을 때 해당 파일을 수정할 수 있는 유저는 잠긴 파일의 유일한 소유자입니다. 이 유저는 파일을 “보유 중”이라고 하거나 “잠금을 쥐었다”고 말합니다. 한 번에 한 명의 유저만 파일을 잠글 수 있기 때문에 다른 유저는 파일이나 디렉터리가 잠겨 있지 않은 경우 “잠금을 해제했다”고 합니다.

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

  • Exclusive file locks - 완료 이진 파일에 대해 명령줄을 통해 수행되며, Git LFS 및 .gitattributes를 사용하여 잠긴 파일이 어떤 브랜치에서도 수정되지 않도록 합니다.
  • Default branch locks - 완료 GitLab UI를 통해 수행되며, 기본 브랜치에서 잠긴 파일 및 디렉터리의 수정을 방지합니다.

권한

잠금은 리포지터리에서 적어도 Developer 역할을 가진 사람이 생성할 수 있습니다.

잠금한 파일 또는 디렉터리를 편집할 수 있는 유저는 잠긴 파일을 잠근 유저뿐입니다. 다른 사용자는 푸시, Merge 또는 기타 방법으로 잠긴 파일을 수정하는 것을 방지하며 다음과 같은 오류가 표시됩니다: The path '.gitignore' is locked by Administrator.

독점 파일 잠금

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

Git LFS는 Git 리포지터리의 저장 공간을 줄이기 위해 파일을 추적하는 데 잘 알려져 있지만, 파일 잠금에도 사용할 수 있습니다. 이것이 독점 파일 잠금에 사용되는 방법입니다.

Git LFS 설치

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

git-lfs --version

해당 명령이 인식되지 않는 경우 설치가 필요합니다. OS에 따라 선택할 수 있는 여러 가지 설치 방법이 있습니다. Homebrew를 사용하여 설치하려면:

brew install git-lfs

설치한 후 로컬 리포지터리를 터미널 창에서 열어 리포지터리에 Git LFS를 설치하세요. LFS가 이미 설치되어 있다면 이 단계를 건너뛸 수 있습니다. 확실하지 않은 경우 다시 설치해도 무방합니다:

git lfs install

자세한 정보는 Git Large File Storage (LFS)를 참조하세요.

독점 파일 잠금 구성

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

파일 잠금을 사용하기 전에 File Locking을 사용할 수 있는 파일 종류를 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에 푸시할 수 있습니다.

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

독점으로 잠긴 파일 보기

로컬에서 LFS로 잠긴 모든 파일을 나열하려면 리포지터리에서 터미널 창을 열고 실행하세요:

git lfs locks

출력은 잠긴 파일을 나열하고 그 각각을 잠근 사용자와 파일 ID를 표시합니다.

리포지터리 파일 트리에서 GitLab은 Git LFS로 추적되는 파일에 대해 LFS 배지와 독점적으로 잠긴 파일에는 잠금 아이콘을 표시합니다:

LFS-Locked files

또한 기존의 잠긴 항목 보기 및 제거를 GitLab UI에서 수행할 수 있습니다.

note
독점적으로 잠긴 파일의 이름을 바꾸면 잠금이 해제됩니다. 잠금된 상태로 유지하려면 다시 잠가야 합니다.

잠금 가능한 파일 편집

파일이 잠금 가능하도록 구성되면 이를 읽기 전용으로 설정됩니다. 따라서 편집하기 전에 반드시 파일을 잠가야 합니다.

공유 프로젝트를 위한 제안된 작업 흐름:

  1. 파일을 잠근다.
  2. 파일을 편집한다.
  3. 변경 사항을 커밋한다.
  4. 리포지터리로 푸시한다.
  5. 변경 사항을 검토, 승인 및 Merge한다.
  6. 파일을 잠금 해제한다.

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

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

이 프로세스를 사용하면 GitLab UI를 통해 한 번에 한 파일을 잠그고, GitLab Premium 또는 Ultimate 등급에 대한 액세스가 필요합니다.

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

기본 브랜치에서 잠긴 파일에 대한 변경 사항은 차단되며, 잠긴 파일을 수정하는 Merge Request도 차단됩니다. 변경을 허용하려면 파일을 잠금 해제하세요.

파일 또는 디렉터리 잠그기

파일을 잠그려면:

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

파일을 잠글 권한이 없는 경우 버튼이 사용되지 않습니다.

디렉터리를 잠긴 사용자를 볼려면 (자신이 아닌 경우) 버튼 위로 마우스를 가져가세요. 잠긴 파일에 대한 유사한 기능을 재활용하는 것은 이슈 376222에서 논의됩니다.

기존 잠금 보기 및 제거하기

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

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

이 디렉터리에는 LFS 또는 GitLab UI를 통해 잠긴 모든 파일이 표시됩니다.

잠금은 그 작성자나 적어도 유지자 역할을 가진 사용자에 의해 제거될 수 있습니다.