背景
git lfs可用来管理大文件,从而解决文件太大的问题。
添加文件
# 此操作会在.gitattributes文件中添加该大文件的路径和信息,一般是一行
git lfs track bigfile_file_path
# 向仓库添加大文件
git add bigfile_file_path
# 向仓库添加更新后的gitattributes文件
git add .gitattributes
git commit -m "use lfs to track xxx file"
# 可查看所有被lfs 追踪的文件
git lfs ls-files
克隆项目
如果是克隆一个被lfs管理的项目,并想将其推送至一个新的仓库地址,很可能出现的问题是:
1. 文件太大
remote: fatal: pack exceeds maximum allowed size
error: remote unpack failed: unpack-objects abnormal exit
问题1解决法是:
# 分布提交代码,不要一次性推送,对照log的commit逐步的将大文件所涉及的提交拆分开来,
# 一步步提交直至最后的commitId
# 如下命令中,commit id是你拆分开来的本地的commit id
# 分支名为远程仓库的分支名
git push origin <commit id>:refs/heads/<分支名>
2. LFS objects are missing
LFS objects are missing
remote: Resolving deltas: 100% (112/112), done.
remote: GitLab: LFS objects are missing. Ensure LFS is properly set up or try a manual “git lfs push --all”.
问题2解决方法是:
# 在git clone 代码之后,一定要执行如下命令
# 该命令会将项目已经删除的大文件也下载下来,而git clone默认只是下载项目最新版本所涉及的大文件
git lfs fetch --all
示例
# 从仓库1下载代码
git clone -b test git:xxxrepo1.git
# 一定要执行,非常重要
git lfs fecth --all
# 切换分支
git checkout -b dev
# 添加新仓库
git remote add repo2 git:xxxxrepo2.git
# 下载最新代码
git pull repo2 dev:dev
# 接下来逐步拆分commit至repo2: git push -f repo2 <commitId>:refs/heads/<repo2的远程仓库分支名>,
# (参数-f可根据实际情况看是否需要)
git push -f repo2 <commitId>:refs/heads/dev
# 重复执行以上步骤直至最后的commitId即可