Git lfs(大文件存储)说lfs管理的文件在进行git lfs pull后被修改。

11

我有一个使用git-lfs来存储一些大文件的版本库的工作副本。我已经安装了git-lfs二进制文件,但可能没有在工作副本中运行"git lfs install"命令。当我想要更新我的本地工作副本以包含lfs文件的添加时,我执行以下命令:

git pull
git lfs pull

在添加lfs文件时,这个方法是有效的。但后来仓库中有些lfs文件被修改了,当我运行 git pull命令时,我遇到了错误信息:

Your local changes to the following files would be overwritten by merge
....
....

它列出了所有将被拉取修改的lfs文件。

此后,我在工作副本中运行git lfs install,它可以正常工作,但是git status仍然将那些文件列为已修改,并且git pull给出相同的错误。

我的问题基本上是,如果我使用lfs,更新我的工作副本的正确步骤是什么? 我如何清理这个困境呢?

3个回答

12

原来在工作副本中运行git lfs install只解决了一半的问题。第二步是要在工作副本中运行git reset,它:

  • 保留了大文件不变
  • 让Git知道它们实际上并没有被更改,仍然良好无损。

现在似乎我不再需要显式地执行git lfs pull来获取最新的大文件了。第一个git pull就可以正常工作了。


0

我在使用Windows(git版本2.31.1和git-lfs/2.13.3)和Linux(git版本2.25.1和git-lfs/2.9.2)时,遇到了文件扩展名为大写字母的问题。

我的.gitattributes文件包含*.jpg filter=lfs diff=lfs merge=lfs -text,其中*.jpg是小写字母,但我在Windows下提交了扩展名为大写字母的文件,例如test.JPG。在Linux系统上克隆存储库后,具有大写扩展名(.JPG)的图像仅保留了引用,而具有小写文件扩展名(.jpg)的图像按预期进行了克隆。
在Linux系统上执行git lfs pull后,图像被正确地定位到文件系统中,但现在它们显示为已修改

解决方案是通过运行以下命令来配置Git在Linux上忽略大小写:
git config --global core.ignorecase true


0
对我来说,在进行 git clone 之前,我首先执行 git lfs install,然后再执行 git clone。一切问题都解决了!我认为这个问题非常重要和普遍,有大量的 GitHub 讨论没有展示真正的解决方案(至少不能一眼看出来)!感谢您的回答 greggles。

如果您还没有进行git克隆,则这似乎是一个不错的解决方案。我的情况是已经完成了git克隆并需要拉取lfs管理的文件。 - greggles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接