要防止由无法解决的合并冲突导致的工作浪费需要不同的工作方式,意味着需要明确请求写入权限,并在您开始之前,验证没有其它人正在编辑同一个文件。
尽管分支策略对于源代码和纯文本通常很有效,因为不同的版本可以合并在一起,但它们不适用于二进制文件。
设置文件锁定后,可锁定文件默认为
只读
。
当文件被锁定时,只有锁定该文件的用户才能对其进行修改。该用户被称为“持有锁”,因为一次只有一个用户可以锁定一个文件。当文件或目录被解锁时,被称为用户“释放锁”。
极狐GitLab 支持两种不同的文件锁定模式:
独占文件锁
,适用于二进制文件:
通过命令行
使用 Git LFS 和
.gitattributes
完成,它可以防止在任何分支上修改锁定的文件。
默认分支文件和目录锁
:
通过 GitLab UI
完成,它可以防止在默认分支上修改锁定的文件和目录。
任何在仓库中至少拥有开发者权限的人都可以创建锁。
只有锁定文件或目录的用户才能编辑锁定的文件。其它用户无法通过推送、合并或任何其他方式修改锁定的文件,并显示如下错误:
The path '.gitignore' is locked by Administrator
。
Git LFS 以跟踪文件以减少 Git 仓库的存储而闻名,但它也可用于
锁定文件
。
这是用于独占文件锁的方法。
安装 Git LFS
在开始之前,请确保您的计算机中有 Git LFS 安装
。打开终端窗口并运行:
git-lfs --version
如果不能识别此命令,则必须安装它。有多种安装方式,可以根据自己的操作系统选择。要使用 Homebrew 安装它:
brew install git-lfs
安装后,在终端窗口中打开您的本地仓库,并在您的仓库中安装 Git LFS。如果您确定已经安装了 LFS,则可以跳过此步骤。 如果您不确定,重新安装亦无害处:
git lfs install
您需要维护者角色通过命令行,为您的项目配置独占文件锁。
在使用文件锁定之前要做的第一件事是告诉 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
如果由于某种原因您需要解锁一个未被自己锁定的文件,只要您对项目具有维护者权限,就可以使用 --force
标志:
git lfs unlock --id=123 --force
您通常可以将文件推送到极狐GitLab,无论它们是锁定的还是未锁定的。
虽然可以通过 Git LFS 命令行界面创建和管理多分支文件锁,但可以为任何文件创建文件锁。
默认分支文件和目录锁