代码之家  ›  专栏  ›  技术社区  ›  Mohan

git lfs迁移做什么?

  •  4
  • Mohan  · 技术社区  · 7 年前

    我以为 git lfs migrate 重写回购历史记录,以便在LFS中保存指定的大型文件。这意味着repo应该变得更小,因为它不直接包含所有版本的大文件。然而,当我跑的时候

    git lfs migrate import --include="test-data/**" --include-ref=refs/heads/master

    中的所有文件 test-data/

    version https://git-lfs.github.com/spec/v1
    oid sha256:5853b5a2a95eaca53865df996aee1d911866f754e6089c2fe68875459f44dc55
    size 19993296
    

    而.git文件夹将变大两倍(400MB到800MB)。我很困惑。什么 git lfs migrate doing ?

    编辑:是的 clean after migration

    git reflog expire --expire-unreachable=now --all
    git gc --prune=now
    

    跑步前 du

    414M.git/objects

    2 回复  |  直到 7 年前
        1
  •  13
  •   Ido Ran    7 年前

    .git 文件夹,因为您没有垃圾收集它们。

    你应该遵守规则 git lfs migration tutorial 这说明:

    物体。但是,常规对象仍然保留在.git中 目录这些最终将由git清理,但需要清理 马上把他们抬起来,跑:

    git reflog expire --expire-unreachable=now --all
    git gc --prune=now
    

    运行之后,您的.git应该是相同大小的,但是如果您进入它,您应该会看到 objects lfs 剩下的就留着吧。

    更好的消息是,现在当其他开发人员/应用程序克隆回购协议时,他们只需下载 物体 目录,然后将获取 只有

        2
  •  5
  •   Philippe    7 年前

    完全正确。

    这意味着repo应该变得更小,因为它不直接包含所有版本的大文件。

    不完全正确。承诺 git lfs 不是说你的repo会更小,而是说当你克隆时,你不必下载所有的git对象,所以克隆会更小更快。因为对于由管理的文件 git-lfs git checkout .

    测试数据/目录中的所有文件将替换为如下所示的文件:

    git lfs就是这样工作的。它不在存储库中提交文件,而是提交一个包含对象id的“指针”文件。文件的内容存储在 .git/lfs/objects 文件夹当您需要时,这些对象将上载到服务器 git push .

    而.git文件夹将变大两倍(400MB到800MB)。我很困惑。

    我还认为它是存储库大小的两倍,因为对象目前存储了两次。在 .git/objects 直到你抛弃旧的历史 purging the reflog and doing a git gc 因为你做了git-lfs转换。

    .git/lfs/objects 作为一个缓存文件夹,所以一旦你推送了所有新的历史记录并上传了lfs管理的文件,你就可以删除它以减少你的存储库的大小。 但如果我是你,我不会那么做!

    --force 推送新的历史记录(并且旧的历史记录不在远程存储库中),我将进行新的克隆。现在,您的本地存储库应该更小。

    但是文件夹 将来每次下载这些文件的新版本时,这些文件仍将不断增长(但它应该始终比不使用git lfs时更小)。

    我希望你能更好地理解它是如何工作的。。。

    附言:

    测试数据/目录中的所有文件将替换为如下所示的文件:

    我希望你所说的部分是假的。你的文件在哪 test-data/ 仍然包含好的内容,但您报告的内容是什么 git 命令显示你。。。 吉特lfs 安装。

        3
  •  1
  •   lamyseba    5 年前

    奇怪的文件看起来像git lfs指针,并替换了工作副本中的文件(在您的例子中是 test-data/ )如果您迁移,则会显示

    • 过了一会儿 git lfs track 命令此命令更改工作副本上所有跟踪的“大文件”。
    • git-lfs轨道 命令 如果您遵循本教程并仅提交 .gitattributes ,但不是所有的“大文件”。