如何迁移到git lfs

fre*_*dev 4 git large-files git-lfs git-lfs-migrate

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

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

就我而言,大文件分布在存储库中,如下所示:

code/track1/file000.pkl
code/track3/dat000.bin
code/track4/pip000.pkl
code/subcode/track5/pip000.pkl
code/subcode/track5/pop000.model
Run Code Online (Sandbox Code Playgroud)

我想将 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"
Run Code Online (Sandbox Code Playgroud)

但这没有任何作用。

nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)

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

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

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

modified:  code/track1/file000.pkl
modified:  code/track4/pip000.pkl
modified:  code/subcode/track5/pip000.pkl
Run Code Online (Sandbox Code Playgroud)

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

但历史又如何呢?我很挣扎,因为我不想最终得到一个混乱的存储库,我必须从头开始重新导入或者必须处理过滤器分支。

ama*_*ent 6

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 存储的特定文件。