前言
写这篇文章主要是项目中需要搭建自己的Git服务器,因为公司部署的产品是在离线情况下和公司内部使用自己的Git代码仓库,💪兄弟们,如果帮助您嘞,请记得分享😀
O(∩_∩)O哈哈~
首先我们大家要知道这个东东是啥玩意^_^
Git LFS(Git Large File Storage)是Git的扩展,用于版本控制大文件。
它可以将大文件从Git存储库中提取出来,而只在存储库中保存文件指针和文件元数据,从而提高Git的性能。
嗖嘎,所以咱们为了提高咱们提交代码的速度,嗖嗖😀必须来一套O(∩_∩)O哈哈~
Git LFS的主要用途有:
处理大文件。
Git本身对版本控制的文件大小有限制,超过这个限制的文件会严重降低Git的性能。
Git LFS可以将这些大文件从Git存储库中提取出来,解决这个问题。
减小仓库大小。
由于只在Git存储库中保存文件指针和元数据,可以显著减小仓库的大小。
保留文件历史。
虽然大文件被提取出Git存储库,但仍可以通过文件指针实现对文件的版本控制,保留文件的历史修改记录。
优化流量。
在推送和拉取存储库时,只需要转移文件指针和元数据,而不是整个大文件的内容,可以优化网络流量。
安装Git LFS的步骤如下:
一、下载并安装Git LFS。
可以从官网https://git-lfs.github.com/下载对应系统的安装包进行安装。
对于Mac系统,可以按如下步骤安装Git LFS:
1. 下载Git LFS的Mac安装包。打开网站https://git-lfs.github.com/,找到Git LFS的Mac下载链接,点击下载最新版本的Installer包。
2. 安装Git LFS。双击下载的Installer包GitLFS-x.x.x.pkg进行安装。按照安装向导的步骤一步步安装。
3. 验证安装。打开终端,运行命令git lfs -v
,如果出现Git LFS的版本信息,说明安装成功。
4. 全局安装(可选)。通过Homebrew或MacPorts等包管理工具也可以进行安装。例如通过Homebrew运行:brew install git-lfs
。
5. 指定存储库启用Git LFS(可选)。如果需要在指定存储库启用Git LFS,可以按如下步骤进行:- 进入需要启用Git LFS的存储库目录
- 运行命令git lfs install
进行初始化
- 运行命令git lfs track "<pattern>"
来track需要作为大文件处理的文件模式
- 提交更新和推送到服务器
- 其他客户端拉取后会自动获取大文件内容对于Windows系统,
可以在网站https://git-lfs.github.com/选择Windows下载64位或32位的Installer进行安装。
安装过程和Mac系统类似。
安装完成后,可以按照上文所述的步骤使用Git LFS进行版本控制大文件,优化我们的Git体验。
二、 初始化Git LFS。
通过运行git lfs install
命令在Git存储库中初始化Git LFS。
只需要在每个存储库运行一次。
在需要使用Git LFS的每个Git存储库中运行此命令一次,用于初始化Git LFS。
例如,如果需要在存储库myrepo中使用Git LFS,可以按如下步骤进行:
- 进入myrepo存储库目录:
bash
cd myrepo
- 运行
git lfs install
命令进行初始化:
bash
git lfs install
- 选择需要track的文件模式,例如track扩展名为.psd和.mp4的文件:
bash
git lfs track "*.psd"
git lfs track "*.mp4"
- 添加和提交这些文件:
bash
git add .
git commit -m "Add files"
- 推送到服务器:
bash
git push
此时,只会推送文件指针和元数据到服务器,不会推送大文件内容。
其他用户或客户端在拉取此存储库时,会自动下载大文件内容。
这避免了在每次推送和拉取时传输大文件,优化了存储库的体积和网络流量。
三、track文件。
需要版本控制的大文件,需要通过git lfs track "<文件名>"
进行track,指定作为大文件进行处理。
track文件是指使用Git LFS track命令,指定哪些文件类型或文件模式需要进行大文件处理,从而实现这些文件的版本控制。
track文件有以下好处:
1.可以提取大文件。
通过track命令指定的文件会被提取出Git存储库,只保留其文件指针和元数据,从而减小仓库大小和优化网络流量。
2.保留文件历史。
虽然文件被提取出Git存储库,但通过文件指针仍可以实现文件的版本控制,查看文件的历史修改记录。
3.自动下载。
其他客户端在拉取存储库时,如果本地没有track的大文件,会自动下载其内容。
4.track文件步骤如下:
- 进入需要在其中使用Git LFS的Git存储库目录。
- 确保已经运行过
git lfs install
命令进行了初始化。 - 运行
git lfs track
命令指定需要track的文件模式,例如:
bash
git lfs track "*.psd" # Track .psd files
git lfs track "*.mp4" # Track .mp4 video files
- 提交更新和推送到服务器,例如:
bash
git add .
git commit -m "Add files"
git push
- 其他客户端拉取存储库时,会自动获取指定文件模式的文件内容。6. 可以通过
git lfs untrack
命令取消对某文件模式的track,例如:
bash
git lfs untrack "*.psd" # Stop tracking .psd files
通过track命令指定存储库中需要做大文件处理的文件类型,Git LFS可以高效管理这些文件,实现版本控制的同时优化Git性能。
track和untrack命令为大文件管理提供了很大的灵活性,我们可以根据需要随时调整被track的文件模式。
四、 提交更新。
和Git标准流程一样,通过git add
和git commit
提交对track文件的更新。
例如,如果需要提交一次更新,包含大文件内容的变更,可以按以下步骤进行:
-
修改大文件内容。例如修改一个视频文件video.mp4。
-
添加修改的文件:
git add video.mp4
-
提交更新:
git commit -m "Update video file"
-
推送到服务器:
git push
此时,Git LFS会检测到video.mp4文件被track为大文件,所以只会推送其文件指针和元数据到服务器,而不会推送实际的文件内容。其他客户端在拉取此更新时,如果本地没有video.mp4文件,会自动下载其内容。
如果本地已有,会重新下载其最新版本。
Git LFS通过文件指针的变化来判断大文件内容是否有更新,如果文件指针未变化,则认为大文件内容也没有更新,不需要重新下载。
这样,在推送和拉取过程中,避免了重复传输大文件的内容,大大减少了网络流量,提高了Git的性能。
当然,如果不希望track某些文件类型作为大文件,可以通过
git lfs untrack
命令进行取消track,使其重新纳入标准Git的管理。例如,如果不再需要track视频文件,可以运行:
bash
git lfs untrack "*.mp4"
之后,mp4视频文件再次被提交时,其内容会直接提交到Git存储库,而不是通过Git LFS进行管理。
总之,Git LFS在提交更新时和标准Git工作流基本一致,但在背后实现了对大文件的智能管理,通过文件的track状态来判断是否提取文件内容,这使得我们可以像标准Git一样轻松高效地管理包含大文件的存储库。
五、 推送更新。
通过git push
命令推送更新到服务器,此时只会上传文件指针和元数据,而不会上传大文件内容。
当执行git push
命令推送更新时,Git LFS会检测当前提交中哪些文件被track为大文件。
对于这些大文件,Git LFS只会推送其文件指针和元数据到服务器,而不会推送实际的文件内容。
例如,如果当前提交包含一个视频文件video.mp4,并且其扩展名*.mp4被track为大文件,那么推送更新时,只会推送video.mp4文件的文件指针和元数据,而不会推送其内容。
其他客户端在拉取此更新后,会通过文件指针判断自己是否已有video.mp4的最新内容。
如果没有,会自动从Git LFS的大文件存储服务器上下载。
这避免了在每次推送时重复传输大文件内容,大大减少了网络流量,提高了Git的性能。
推送更新步骤:
- 确保当前提交中包含了track为大文件类型的文件,例如视频文件。
- 运行命令
git push
推送更新到服务器:
bash
git push
-
此时,只会推送大文件的文件指针和元数据,而不会推送内容。
-
其他客户端在拉取此更新后,如果本地没有大文件内容,会自动下载。如果已有,会判断是否需要重新下载最新版本。
-
可以通过
git lfs track
和git lfs untrack
命令随时调整被track的文件类型,从而控制哪些文件在推送时需要通过Git LFS进行大文件管理。总之,Git LFS实现了对git push命令的拓展,在推送更新时可以智能地判断哪些文件需要提取内容而只推送其文件指针。
这使我们在推送时可以像标准Git一样简单,但在大文件管理上更加高效,既保证了Git的性能,也不失去文件的历史记录。
六、拉取更新。
通过git pull
命令从服务器拉取更新。
如果本地没有某个大文件,Git LFS会自动下载它的内容。
当执行git pull
命令从服务器拉取更新时,Git LFS会检测当前提交中哪些文件被track为大文件。
对于这些大文件,会判断本地是否已有其内容:
- 如果本地没有这些大文件的内容,会自动从Git LFS的大文件存储服务器下载内容。
- 如果本地已有,会判断版本是否最新。如果不是最新版本,会下载最新内容。
- 如果本地已是最新,则不需要重新下载。 - 这样,避免了在每次拉取时重复下载大文件内容,优化了网络流量。
- 只有当大文件内容真的发生变化时,才会触发重新下载。
- 拉取更新的步骤:
- 运行
git pull
命令从服务器拉取更新:
- 运行
bash
git pull
- Git LFS会检测当前提交中哪些文件被track为大文件,并判断本地是否已有内容。
- 如果本地没有或不是最新版本,会自动触发下载track文件类型的最新文件内容。
- 可以通过
git lfs track
和git lfs untrack
命令随时调整被track的文件类型,控制下载行为。 - 也可以通过清除大文件缓存,强制重新下载所有track文件类型的最新内容。例如:
bash
git lfs prune
git pull
总之,Git LFS拓展了git pull
命令,可以在拉取过程中自动管理大文件,判断是否需要下载最新内容。
这使我们在拉取更新时,可以像标准Git一样简单,但同时也自动完成了大文件管理,无需手动触发下载。
七、管理大文件。
可以通过git lfs ls-files
、git lfs migrate
、git lfs unlock
、git lfs prune
等命令管理被track的大文件。
git lfs ls-files
:列出被track的大文件。可以通过文件名,文件模式和提交SHA来过滤列表。
git lfs migrate:将指定提交范围内的大文件转换为Git LFS管理的文件。这对已有存储库非常有用,可以 retrospectively将过去提交的大文件转换为LFS文件。
git lfs clean`:清除任何过期或未使用的大文件缓存内容。这有助于清理硬盘空间。
git lfs prune
:清除所有缓存的大文件内容。这会强制重新下载所有track文件类型的最新内容。
git lfs unlock
:解锁被锁定的大文件。如果文件被其他进程锁定,无法修改或删除,这很有用。
git lfs rm
:从Git LFS管理中删除大文件。这会在下次推送时,从Git LFS服务器中实际删除大文件内容。
例如:
bash
# 列出所有被track的PNG文件
git lfs ls-files "*.png"
# 转换过去5次提交中的大文件为LFS
git lfs migrate --include="*.psd" HEAD~5..HEAD
# 清除所有缓存的大文件内容
git lfs prune
# 解锁文件名包含"image"的文件
git lfs unlock "image*"
# 从Git LFS管理中删除文件名以"tmp"开头的文件
git lfs rm "tmp*"
这些命令为我们管理和维护被Git LFS track的大文件提供了很大便利。
无论是清理过期文件,解决被锁定文件的问题,还是从管理中彻底删除不再需要的文件,都可以通过简单的Git LFS命令来实现。
这些命令和Git LFS的其他功能一起,使得Git LFS成为一个非常完善和强大的大文件管理解决方案。
使用Git LFS,我们无需学习和掌握过多新概念,就可以高效地管理Git存储库中的大文件,并优化存储库的体积和性能。
总之,Git LFS是Git的一个非常有用的扩展,可以高效版本控制大文件,优化Git的性能。
通过简单的命令就可以轻松管理大文件,这使得我们的Git版本控制的体验更加完善。
希望此文章可以帮助大家对Git LFS有一个系统和深入的了解。
给个好评,O(∩_∩)O哈哈~感谢,哈哈哈哈
最后大家看完我的博客最起码知道了:
Git LFS是Git的扩展,用于优化管理大文件。
它主要有以下功能:
-
提取大文件内容。将大文件内容从Git存储库中提取出来,只保存文件指针和元数据,减小仓库大小和优化网络流量。
-
保留文件历史。通过文件指针,仍然可以实现大文件的版本控制和查看历史修改。
-
自动下载。在拉取更新时,会自动判断是否需要下载最新版本的大文件内容。只有当内容真的发生变化时才会触发下载。
-
标准Git工作流。无需学习新命令或工具,可以像标准Git一样轻松管理大文件。
-
管理大文件。提供
git lfs ls-files
、git lfs migrate
、git lfs prune
等命令专门用于管理大文件。Git LFS的工作原理是:通过git lfs track
命令指定需要管理的大文件类型,Git LFS提取这些文件内容,只在Git中保存其文件指针。在推送和拉取提交时,只操作这些文件指针,实现版本控制。只有当大文件内容发生变化时,才会触发内容下载。使用Git LFS主要分为以下步骤:
-
安装Git LFS。下载并安装对应系统的安装包。
-
初始化。在需要使用的存储库中运行
git lfs install
进行初始化。 -
Track文件。使用
git lfs track
指定需要管理的大文件类型。 -
提交更新。使用
git add
和git commit
提交更新。 -
推送和拉取。使用
git push
和git pull
推送和拉取更新。Git LFS会自动管理大文件内容。 -
管理大文件。使用
git lfs prune
、git lfs migrate
等命令管理大文件。Git LFS使我们可以像标准Git一样简单地管理包含大文件的存储库,但在背后实现了大文件内容的智能管理。这极大地优化了我们的Git体验,无需频繁地手动管理大文件的下载和存储。
希望此总结能帮助大家对Git LFS有一个整体和深入的理解。O(∩_∩)O哈哈~
-