파일 잠금

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

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

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

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

파일이 잠겼을 때, 파일을 잠근 사용자만 수정할 수 있습니다. 이 사용자는 오로지 한 명의 사용자만이 파일을 잠글 수 있기 때문에 파일을 ‘잠궜다’ 또는 ‘잠금을 가져갔다’라고 말합니다. 파일 또는 디렉터리가 잠금 해제되면 사용자는 ‘잠금을 해제했다’고 말합니다.

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

  • 전용 파일 잠금 (이진 파일용): Git LFS와 .gitattributes를 이용하여 명령줄을 통해 완료하며, 잠긴 파일이 어떤 브랜치에서도 수정되지 않도록 합니다.
  • 기본 브랜치 잠금: GitLab UI를 통해 완료하여 기본 브랜치에서 잠긴 파일 및 디렉터리가 수정되는 것을 방지합니다.

권한

락은 리포지터리에서 적어도 개발자 역할을 가진 사람에 의해 생성될 수 있습니다.

파일 또는 디렉터리를 잠글 수 있는 권한을 가진 사람만이 잠긴 파일을 편집할 수 있습니다. 다른 사용자들은 푸시, 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 LFS 사용하기를 참조하세요.

전용 파일 잠금 구성

프로젝트에 대한 유지관리자 역할인 사용자는 명령줄을 통해 전용 파일 잠금을 설정할 수 있습니다.

파일 잠금을 사용하기 전에 깃 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에서 제공하는 ID):

git lfs unlock --id=123

자신이 잠금하지 않은 파일을 어떤 이유로든 잠긴 해제해야하는 경우, 유지자 권한이 있으면 --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를 통해 잠긴 모든 파일이 표시됩니다.

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