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,果然是在这里,再看一下结构:
可以看出文件是按照上面这样一种结构来存储的,使用文件的哈希值作为路径名称,将代码仓库中的引用指向这里,从而实现了大文件与代码仓库中的小文件分开存储的需求。?
注:如果不想每次进行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