归档含Git LFS大文件的Git仓库,避免数据丢失
我们正在进行GitHub实例迁移:活跃仓库迁移至新GitHub实例,旧仓库克隆至备份电脑的归档存储,旧GitHub实例将被停用。部分旧仓库使用Git LFS存储大文件,需确保归档的是实际文件而非指针文件,以下是相关疑问的解答:
核心疑问解答
1. 大文件是否存储在旧GitHub实例的Git LFS服务器中?
是的,GitHub实例自带专属的Git LFS服务器,所有通过Git LFS追踪的大文件都存储在旧实例的LFS服务器上,仓库代码库中仅保留指向这些大文件的指针文件。旧实例停用后,原LFS服务器会失效,无法再从中获取大文件,所以归档时必须把实际文件拉到本地。
2. 在备份电脑上克隆仓库仅得到指针文件,是否需要在每个仓库目录安装Git LFS?
不需要逐个仓库安装,在备份电脑上执行一次全局Git LFS安装即可:
git lfs install --global
这个命令会配置Git全局钩子,后续克隆仓库时,Git LFS会自动识别指针文件并拉取对应大文件。如果已经克隆了仓库才安装Git LFS,进入仓库目录执行:
git lfs pull
就能把当前分支的大文件拉取到本地。
3. 如何将大文件及其历史记录同步至归档仓库?
要完整归档包含所有历史版本的大文件,按以下步骤操作:
- 先在备份电脑上完成Git LFS全局安装
- 以镜像模式克隆旧仓库(包含所有分支、标签和提交历史):
git clone --mirror git@旧实例域名:用户名/仓库名.git
- 进入克隆后的仓库目录,拉取所有历史版本的LFS文件:
git lfs fetch --all
- 此时本地仓库已包含完整的Git历史和对应的所有LFS实际文件,直接将整个仓库目录归档到备份存储即可。
补充疑问解答
Git LFS服务器具体位置?
GitHub实例的LFS服务器和仓库实例绑定,地址通常为https://旧实例域名/lfs,无需手动指定,Git LFS会自动从仓库的配置信息中读取服务器地址并交互。
git lfs install是设置客户端还是复制文件?
git lfs install仅用于配置Git LFS客户端,它会在Git全局配置中添加必要的钩子脚本,让Git能够识别LFS指针文件并与LFS服务器交互,不会复制任何文件。
克隆后检出大文件仅获取最新版本,是否包含文件历史?
默认的git lfs pull只会拉取当前检出分支的最新版本LFS文件。要获取所有分支、所有提交记录中的历史版本LFS文件,必须执行:
git lfs fetch --all
这个命令会拉取仓库所有历史中的LFS文件,确保归档的历史完整性。
git lfs migrate export不符合需求,该如何操作?
git lfs migrate export的作用是将仓库中已用LFS追踪的文件转换为普通Git文件,适合不再需要LFS的场景。而你的需求是归档包含LFS的完整仓库,完全不需要用到这个命令,按照前面的镜像克隆+全量LFS拉取流程即可完成完整归档。
内容的提问来源于stack exchange,提问作者mmesser314

