首页 > 解决方案 > 如何迁移到 git lfs

问题描述

我有一个 git repo,其中许多文件应该是 lfs,因为它们大于 100M。

环顾四周,我找不到分步指南来解释如何迁移具有许多分支的真实现有存储库以及 lfs 文件在子目录中的位置。

在我的情况下,大文件分布在 repo 周围,如下所示:

code/track1/file000.pkl
code/track3/dat000.bin
code/track4/pip000.pkl
code/subcode/track5/pip000.pkl
code/subcode/track5/pop000.model

我想只需使用以下命令将 git 项目转换为 git lfs git lfs migrate

git lfs install
git lfs migrate import --include="*.pkl"
git lfs migrate import --include="*.bin"
git lfs migrate import --include="*.model"
git commit -m "migrating models"

但这并没有做任何事情。

nothing to commit, working tree clean

我想转换所有的 repo,我的意思是所有的文件、历史记录以及所有现有的分支。

换句话说,git lfs migrate现在看起来很稳定,但用户不那么友好。

跑步git lfs track "*.pkl"似乎有效果:

modified:  code/track1/file000.pkl
modified:  code/track4/pip000.pkl
modified:  code/subcode/track5/pip000.pkl

但接下来该怎么做。我看到git lfs track它将开始跟踪新文件或已签入您的存储库的现有文件。

但是历史呢?我正在苦苦挣扎,因为我不希望最终得到一个必须从头开始重新导入或必须处理过滤器分支的混乱存储库。

标签: gitlarge-filesgit-lfsgit-lfs-migrate

解决方案


Git LFS 提供了如何使用的教程git lfs migrate

有几点要提:

  1. 当您使用 lfs migrate 时,它​​会遍历并更改历史记录,因此当您调用 时git lfs migrate import --include="*.pkl",它会将其添加到要在 LFS 下跟踪的 ​​.gitattributes 中,并在整个历史记录中将 .pkl 文件迁移到 LFS。因此,您无需git commit事后致电。请注意,如果您调用 git lfs import migrate --no-rewrite,这将有所不同,正如文档所示,这会导致将文件迁移到 LFS 的单独提交。(但是,鉴于您在问题中指出的内容,我认为这不是您想要的。)
  2. 您表明您正在使用多个分支进行回购。因此,您可能想要使用--everything文档指出其中包括迁移中的所有本地和远程分支。
  3. 如果您不确定 LFS 迁移是否成功,您可以检查 lfs 目录以查看对象是否已移动到 LFS 存储,或者运行git lfs ls-files以查看当前跟踪和存储在 LFS 下的文件。此外,您可能希望使用 运行 LFS 迁移--verbose,这将在迁移过程中打印出已移动到 LFS 存储的特定文件。

推荐阅读