파일 잠금

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

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

일반적으로 브랜치 전략은 소스 코드와 일반 텍스트에 대해 잘 작동하지만, 다른 버전을 병합할 수 있기 때문에 이진 파일에는 작동하지 않습니다.

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

파일이 잠겨 있을 때 파일을 수정할 수 있는 사용자는 잠긴 파일을 잡고 있는 유일한 사용자입니다. 이 사용자는 “잠긴 파일을 보유하고 있다” 또는 “잠금을 설정했다”고 말합니다. 한 번에 한 사용자만 파일을 잠길 수 있기 때문입니다. 파일이나 디렉토리를 잠그지 않으면 사용자는 “잠금을 해제했다”고 말합니다.

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

  • 배타적 파일 잠금은 이진 파일에 대한 것이다: 명령 행을 통해 Git LFS 및 .gitattributes를 사용하여, 잠긴 파일이 어떤 브랜치에서도 수정되지 않도록 합니다.
  • 기본 브랜치 잠금: GitLab UI를 통해서, 잠긴 파일과 디렉토리가 기본 브랜치에서 수정되는 것을 방지합니다.

권한

잠금은 저장소에 대한 적어도 개발자 역할을 갖고 있는 사람에 의해 생성될 수 있습니다.

잠긴 파일이나 디렉토리를 수정할 수 있는 것은 해당 파일 또는 디렉토리를 잠근 사용자뿐입니다. 다른 사용자는 푸시, 병합 또는 기타 수단으로 잠긴 파일을 수정하는 것을 방지되며 다음과 같은 오류가 표시됩니다: '.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 Large File Storage (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, 자체 관리, GitLab 전용

이 프로세스를 통해 GitLab UI를 통해 한 번에 하나의 파일을 잠글 수 있으며, GitLab 프리미엄 또는 얼티밋 티어에 액세스해야 합니다.

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

기본 브랜치의 잠긴 파일에 대한 변경은 차단되며, 잠긴 파일을 수정하는 병합 요청도 차단됩니다. 파일을 잠금 해제하여 변경을 허용하세요.

파일 또는 디렉터리 잠금

파일을 잠그려면:

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

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

디렉터리를 잠긴 사용자를 확인하려면 (본인이 아닌 경우) 해당 버튼 위에 마우스를 올리세요. 잠긴 파일에 대한 유사 기능의 복구는 이슈 376222에서 논의되었습니다.

기존 잠금 보기 및 제거

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

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

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

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