Debian安装gitlfs:
先更新下软件包版本
sudo apt update
安装
sudo apt install git-lfs
验证是否安装成功
git lfs version
cd到Gitea仓库目录下
cd /mnt/HuHDD/Git/Gitea/Repo/hu/testrepo.git
执行lfs的初始化命令
git lfs install
客户机Windows端在官网下载并安装Git-Lfs
再本地Git仓库工作空间下打开Git bash
执行lfs初始化命令
git lfs install
初始化之后发现工作空间如下内容发生了变化:
config文件增加了如下内容:
[lfs]
repositoryformatversion = 0
跟踪大文件:
现在,你可以选择需要用Git LFS跟踪大文件,并将它们加入到Git LFS管理中。例如,如果你要跟踪所有.mp4
文件,可以运行:
git lfs track "*.mp4"
执行了上述命令之后,仓库根目录下会出现这个文件:
打开这个文件,发现内容如下,实际就是配置了哪些文件被lfs追踪:
*.mp4 filter=lfs diff=lfs merge=lfs -text
它告诉 Git 如何处理 .mp4
文件。具体来说:
*.mp4
:这表示这个规则适用于所有扩展名为.mp4
的文件。filter=lfs
:这表示当 Git 检出和提交这些文件时,应该使用 Git LFS 过滤器。这意味着这些文件的内容将由 Git LFS 管理,而不是由 Git 本身管理。diff=lfs
和merge=lfs
:这表示当 Git 对这些文件进行差异比较和合并时,应该使用 Git LFS 的差异比较和合并策略。这通常意味着 Git 将不会尝试对这些文件的内容进行差异比较和合并,因为这些文件通常是二进制文件,不能像文本文件那样进行差异比较和合并。-text
:这表示 Git 不应该尝试将这些文件的内容视为文本。这可以防止 Git 在检出文件时自动转换行结束符。
另外会发现hooks钩子目录下会部署以下文件,lfs的大文件管理就是基于这些钩子实现的,有兴趣的可以深入研究一下:
测试提交并推送更改:
git add .gitattributes
git add your_large_files.mp4
git commit -m "Add large files"
git push origin master
我这里上传了一个一百多M的mp4文件(手头没有mp4文件,就拿一个压缩包改了后缀名冒名顶替了一下,手动斜眼)。提交并推送之后,我们远程到Gitea服务器上去看一下,首先看下Gitea代码仓库的大小:
才272k,显然,咱们的大文件果然不会被传入到代码仓库中,代码仓库中只会存储对于大文件夹的指针的引用。
那么咱们就去看下之前部署Gitea时所指定的git-lfs的目录下去看看。
大小127M,果然是在这里,再看一下结构:
可以看出文件是按照上面这样一种结构来存储的,使用文件的哈希值作为路径名称,将代码仓库中的引用指向这里,从而实现了大文件与代码仓库中的小文件分开存储的需求。
如果进一步验证的话,可以使用下面的命令:
使用仓库最后一次的commit对象,一直追溯到一个blob对象,指针开头为e53f,具体细节不再赘述,使用下面命令来查看该blob对象的内容:
git cat-file -p e53f
会看见这个blob的内容如下:
version https://git-lfs.github.com/spec/v1
oid sha256:74add27b1c9d3c39883fee6d130588a3f88959a578a7563b7a519c6e1a864a5d
size 132455501
解读一下:
version https://git-lfs.github.com/spec/v1:这是Git LFS规范的版本信息。
oid sha256:74add27b1c9d3c39883fee6d130588a3f88959a578a7563b7a519c6e1a864a5d:这是文件的对象标识符(OID),它是文件内容的SHA-256哈希值。
size 132455501:这是文件的大小,单位是字节。
这个指针文件实际上是一个文本文件,它指向存储在服务器上的大文件。当您克隆或拉取仓库时,Git LFS会下载这些大文件,并用它们替换本地的指针文件。这样,大文件就不会存储在Git仓库中,从而保持了仓库的轻量。
注:如果不想每次进行git push时输入密钥的密码,可以git bash中执行以下命令:
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
-
eval "$(ssh-agent -s)"
:这个命令会启动 SSH 代理。SSH 代理是一个在后台运行的程序,它可以保存你的 SSH 密钥,并在需要时自动提供密钥。eval
命令会执行ssh-agent -s
命令的输出,这样就可以设置 SSH 代理的环境变量。 -
ssh-add ~/.ssh/ssh.key
:这个命令会将你的 SSH 密钥添加到 SSH 代理中。这样,当你需要使用 SSH 密钥时,SSH 代理可以自动提供密钥,你就不需要每次都手动输入密钥的密码。请注意,你需要将ssh.key
替换为你的密钥的实际名称。当然,你也可以使用我上面的*号形式的模糊匹配。
下载大文件:
其他开发者在克隆仓库时,可以通过运行以下命令来下载大文件:
git lfs pull
注意事项:
- 请确保所有参与的开发者都安装了Git LFS。
- 在使用Git LFS时,确保不要将大文件直接添加到Git仓库,而是通过Git LFS进行跟踪和管理。
- 如果你的Gitea服务器是通过HTTPS进行访问的,你可能需要在服务器上配置Git LFS的HTTPS认证。