文件管理
Git 提供能够帮助您追踪变更的文件、与他人协作以及高效管理大型文件的文件管理能力。
文件历史
使用 git log
查看文件的完整历史记录,并了解它随时间如何变化。文件历史会为您展示:
- 每个更改的作者。
- 每个修改的日期和时间。
- 每个提交中所做的具体更改。
比如,要查看 gitlab
仓库根目录中 CONTRIBUTING.md
文件的历史信息,请运行:
git log CONTRIBUTING.md
Example output:
commit b350bf041666964c27834885e4590d90ad0bfe90
Author: Nick Malcolm <nmalcolm@gitlab.com>
Date: Fri Dec 8 13:43:07 2023 +1300
Update security contact and vulnerability disclosure info
commit 8e4c7f26317ff4689610bf9d031b4931aef54086
Author: Brett Walker <bwalker@gitlab.com>
Date: Fri Oct 20 17:53:25 2023 +0000
Fix link to Code of Conduct
and condense some of the verbiage
查看文件的上一次更改
使用 git blame
查看文件的上一次更改。这有助于理解文件内容的上下文,解决冲突,并识别对特定更改负责的人。
如果您想要在本地目录中查看 README.md
文件的 blame
信息:
- 打开终端或命令提示符。
- 赚到您的 Git 仓库。
-
运行如下命令:
git blame README.md
- 要导航到结果页面,按 Space。
- 要退出结果,请按 Q。
此输出显示文件内容,带有注释,显示每个行的提交 SHA、作者和日期。例如:
58233c4f1054c (Dan Rhodes 2022-05-13 07:02:20 +0000 1) ## Contributor License Agreement
b87768f435185 (Jamie Hurewitz 2017-10-31 18:09:23 +0000 2)
8e4c7f26317ff (Brett Walker 2023-10-20 17:53:25 +0000 3) Contributions to this repository are subject to the
58233c4f1054c (Dan Rhodes 2022-05-13 07:02:20 +0000 4)
Git LFS
Git 大文件存储(LFS)是一个扩展,它帮助您在 Git 仓库中管理大型文件。它用 Git 中的文本指针替换大型文件,并将文件内容存储在远程服务器上。
先决条件:
- 下载并安装适用于您操作系统的 Git LFS CLI 扩展。
- 配置项目以使用 Git LFS。
- 安装 Git LFS 预推送钩子。为此,请在仓库根目录中运行
git lfs install
。
添加并追踪文件
要将大型文件添加到您的 Git 仓库并使用 Git LFS 追踪它:
-
为特定类型的文件配置跟踪。将
iso
替换为您的所需文件类型:git lfs track "*.iso"
此命令会创建一个
.gitattributes
文件,其中包含处理所有 ISO 文件的 Git LFS 指令。以下行被添加到您的.gitattributes
文件中:*.iso filter=lfs -text
- 添加
.iso
文件类型到您的仓库。 -
追踪对
.gitattributes
文件和.iso
文件的更改:git add .
-
确保您已经添加了这两个文件:
git status
.gitattributes
文件必须要包含在您的提交中。如果未包含,Git 不会使用 Git LFS 来跟踪 ISO 文件。确保您正在修改的文件未在.gitignore
文件中列出。如果它们在,Git 会将更改提交到本地副本,但不会将其推送到上游仓库。 -
提交这两个文件到您的本地仓库副本中:
git commit -m "Add an ISO file and .gitattributes"
-
推送变更到上游。将
main
替换为您的分支名称:git push origin main
- 创建合并请求。
git lfs migrate
将现有文件转换为使用 Git LFS。停止追踪文件
当您追踪 Git LFS 文件时,文件依旧在磁盘上,因为它是仓库历史的一部分。
要停止对 Git LFS 文件的追踪:
-
运行
git lfs untrack
命令并提供要停止追踪的文件的路径:git lfs untrack doc/example.iso
-
使用
touch
命令将文件转换回标准文件:touch doc/example.iso
-
追踪文件的变更:
git add .
- 提交并推送您的变更。
- 创建合并请求并请求评审。
- 将请求合并到目标分支。
git lfs untrack
追踪它,该对象在 git status
中显示为 modified
。停止追踪单个类型的所有文件
要在 Git LFS 中停止对特定类型的所有文件进行跟踪:
-
运行
git lfs untrack
命令并提供要停止跟踪的文件类型:git lfs untrack "*.iso"
-
使用
touch
命令将文件转换回标准文件:touch *.iso
-
追踪文件的变更:
git add .
- 提交并推送您的变更。
- 创建合并请求并请求评审。
- 将请求合并到目标分支。
文件锁定
文件锁定有助于阻止冲突并确保每次只有一个人编辑文件。它是一个很好的选择:
- 二进制文件无法被合并。比如,设计文件和视频。
- 需要在编辑期间独占访问的文件。
先决条件:
- 您必须安装 Git LFS。
- 您必须拥有项目的维护者角色。
配置文件锁定
要为特定文件类型配置文件锁定:
-
使用
git lfs track
命令和--lockable
选项。例如,要配置 PNG 文件:git lfs track "*.png" --lockable
此命令创建或更新您的
.gitattributes
文件,内容如下:*.png filter=lfs diff=lfs merge=lfs -text lockable
-
推送
.gitattributes
文件到远程仓库以让变更生效。文件被注册为可锁定后,它会自动标记为只读。
配置不使用 LFS 的文件锁
要将文件类型注册为不使用 Git LFS 的可锁定类型:
-
手动编辑
.gitattributes
文件:*.pdf lockable
-
推送
.gitattributes
文件到远程仓库。
锁定和解锁文件
使用排除文件锁来锁定或解锁文件:
- 在您的仓库目录中打开终端窗口。
-
运行以下命令之一:
::Tabs
:::TabTitle 锁定文件
git lfs lock path/to/file.png
:::TabTitle 解锁文件
git lfs unlock path/to/file.png
:::TabTitle 通过 ID 解锁文件
git lfs unlock --id=123
:::TabTitle 强制解锁文件
git lfs unlock --id=123 --force
::EndTabs
查看锁定的文件
要查看锁定的文件:
- 在您的仓库中打开终端窗口。
-
运行以下命令:
git lfs locks
输出会列出锁定的文件,锁定它们的用户以及文件 ID。
在极狐GitLab UI 上:
- 存储库文件树会为那些由 Git 大文件存储(Git LFS)所跟踪的文件显示一个 LFS 徽章。
- 排他锁定的文件会显示一个锁图标。
您还可以从极狐GitLab UI 上查看和移除既有的锁。
锁定并编辑文件
要锁定文件,编辑它,然后可选地解锁它:
-
锁定文件:
git lfs lock <file_path>
- 编辑文件。
-
可选。 在完成编辑后解锁文件:
git lfs unlock <file_path>