文件管理

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 信息:

  1. 打开终端或命令提示符。
  2. 赚到您的 Git 仓库。
  3. 运行如下命令:

    git blame README.md
    
  4. 要导航到结果页面,按 Space
  5. 要退出结果,请按 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 仓库并使用 Git LFS 追踪它:

  1. 为特定类型的文件配置跟踪。将 iso 替换为您的所需文件类型:

    git lfs track "*.iso"
    

    此命令会创建一个 .gitattributes 文件,其中包含处理所有 ISO 文件的 Git LFS 指令。以下行被添加到您的 .gitattributes 文件中:

    *.iso filter=lfs -text
    
  2. 添加 .iso 文件类型到您的仓库。
  3. 追踪对 .gitattributes 文件和 .iso 文件的更改:

    git add .
    
  4. 确保您已经添加了这两个文件:

    git status
    

    .gitattributes 文件必须要包含在您的提交中。如果未包含,Git 不会使用 Git LFS 来跟踪 ISO 文件。

    note 确保您正在修改的文件未在 .gitignore 文件中列出。如果它们在,Git 会将更改提交到本地副本,但不会将其推送到上游仓库。
  5. 提交这两个文件到您的本地仓库副本中:

    git commit -m "Add an ISO file and .gitattributes"
    
  6. 推送变更到上游。将 main 替换为您的分支名称:

    git push origin main
    
  7. 创建合并请求。
note 当您向 Git LFS 追踪添加新文件时,现有文件不会转换为 Git LFS。只有在开始跟踪后添加的该类型文件才会添加到 Git LFS。使用 git lfs migrate 将现有文件转换为使用 Git LFS。

停止追踪文件

当您追踪 Git LFS 文件时,文件依旧在磁盘上,因为它是仓库历史的一部分。

要停止对 Git LFS 文件的追踪:

  1. 运行 git lfs untrack 命令并提供要停止追踪的文件的路径:

    git lfs untrack doc/example.iso
    
  2. 使用 touch 命令将文件转换回标准文件:

    touch doc/example.iso
    
  3. 追踪文件的变更:

    git add .
    
  4. 提交并推送您的变更。
  5. 创建合并请求并请求评审。
  6. 将请求合并到目标分支。
note 如果您删除了由 Git LFS 追踪的对象,而没有使用 git lfs untrack 追踪它,该对象在 git status 中显示为 modified

停止追踪单个类型的所有文件

要在 Git LFS 中停止对特定类型的所有文件进行跟踪:

  1. 运行 git lfs untrack 命令并提供要停止跟踪的文件类型:

    git lfs untrack "*.iso"
    
  2. 使用 touch 命令将文件转换回标准文件:

    touch *.iso
    
  3. 追踪文件的变更:

    git add .
    
  4. 提交并推送您的变更。
  5. 创建合并请求并请求评审。
  6. 将请求合并到目标分支。

文件锁定

文件锁定有助于阻止冲突并确保每次只有一个人编辑文件。它是一个很好的选择:

  • 二进制文件无法被合并。比如,设计文件和视频。
  • 需要在编辑期间独占访问的文件。

先决条件:

  • 您必须安装 Git LFS
  • 您必须拥有项目的维护者角色。

配置文件锁定

要为特定文件类型配置文件锁定:

  1. 使用 git lfs track 命令和 --lockable 选项。例如,要配置 PNG 文件:

    git lfs track "*.png" --lockable
    

    此命令创建或更新您的 .gitattributes 文件,内容如下:

     *.png filter=lfs diff=lfs merge=lfs -text lockable
    
  2. 推送 .gitattributes 文件到远程仓库以让变更生效。

    note 文件被注册为可锁定后,它会自动标记为只读。

配置不使用 LFS 的文件锁

要将文件类型注册为不使用 Git LFS 的可锁定类型:

  1. 手动编辑 .gitattributes 文件:

    *.pdf lockable
    
  2. 推送 .gitattributes 文件到远程仓库。

锁定和解锁文件

使用排除文件锁来锁定或解锁文件:

  1. 在您的仓库目录中打开终端窗口。
  2. 运行以下命令之一:

    ::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

查看锁定的文件

要查看锁定的文件:

  1. 在您的仓库中打开终端窗口。
  2. 运行以下命令:

    git lfs locks
    

    输出会列出锁定的文件,锁定它们的用户以及文件 ID。

在极狐GitLab UI 上:

  • 存储库文件树会为那些由 Git 大文件存储(Git LFS)所跟踪的文件显示一个 LFS 徽章。
  • 排他锁定的文件会显示一个锁图标。

您还可以从极狐GitLab UI 上查看和移除既有的锁

note 当您重命名一个排他锁定的文件时,该锁会丢失。 您必须再次锁定它以保持锁定状态。

锁定并编辑文件

要锁定文件,编辑它,然后可选地解锁它:

  1. 锁定文件:

    git lfs lock <file_path>
    
  2. 编辑文件。
  3. 可选。 在完成编辑后解锁文件:

    git lfs unlock <file_path>
    

相关主题