如何将git跟踪的文件转换为git lfs?

如何将git跟踪的文件转换为git lfs?,git,version-control,git-lfs,Git,Version Control,Git Lfs,如何将已作为常规对象提交的单个文件(例如png)转换为git lfs 我不想迁移整个回购协议,也不想重写回购协议的历史记录。git lfs track将开始跟踪已检入存储库的新文件或现有文件。当您运行git lfs track并提交该更改时,它将更新文件,并将其替换为lfs指针内容 这里我有一个“正常”签入PNG的存储库(不使用LFS): git lfs已经做了它需要做的一切-它在.gittributes中设置了跟踪信息,现在git知道VSTS.png被修改了: C:\Temp\LFS>g

如何将已作为常规对象提交的单个文件(例如png)转换为git lfs


我不想迁移整个回购协议,也不想重写回购协议的历史记录。

git lfs track
将开始跟踪已检入存储库的新文件或现有文件。当您运行
git lfs track
并提交该更改时,它将更新文件,并将其替换为lfs指针内容

这里我有一个“正常”签入PNG的存储库(不使用LFS):

git lfs已经做了它需要做的一切-它在
.gittributes
中设置了跟踪信息,现在git知道
VSTS.png
被修改了:

C:\Temp\LFS>git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   VSTS.png

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .gitattributes

no changes added to commit (use "git add" and/or "git commit -a")
(这是实际的LFS元数据,而不是PNG文件。)

现在,当您提交并推送这些更改时,文件将位于LFS中。但是,这是不可追溯的-您没有重写存储库的历史记录,因此以前版本的PNG仍将直接位于存储库中(而不是LFS中),并且仍将占用空间

如果您确实想重写历史记录,我建议您使用。

根据:

仅跟踪文件不会将其转换为lfs。它们已经是历史的一部分,转换旧文件的唯一方法是重写历史[…]

相反,在启用LFS跟踪时,需要“重新添加”文件。因此,首先启用跟踪:

git lfs track VSTS.png
git add .gitattributes
git commit -m "Enable LFS tracking for VSTS.png"
然后在启用LFS跟踪的同时重新添加文件(内容相同):

git rm --cached VSTS.png
git add VSTS.png
git commit -m "Re-add VSTS.png as an LFS object"

当然,git历史记录仍然包括
VSTS.png
的全部内容,因为它最初是在没有LFS跟踪的情况下提交的。

不确定我是否理解:如果您删除了该文件,它现在将由
git LFS
跟踪,后续提交将不包括整个文件。但这不会影响以前的提交,如果不重写历史记录,就无法执行此操作。因此,我必须对已跟踪的文件进行修改,然后后续的提交将切换该文件以供git lfs跟踪?不
git lfs track
可以在现有文件上正常工作,并可以进行转换。谢谢你的澄清,我会补充一个答案。非常感谢!它是有效的,但是为了获得预期的行为,我做了另外一件事,那就是在最后放弃对
.gittributes
的更改。我已经跟踪了
*.png
,并且不需要在
.gittributes
中为例如
VSTS.png
添加跟踪条目。如果文件不断更改,它会被保存很多次吗?或者只保存与repo中任何其他文件不同的部分?
C:\Temp\LFS>git add VSTS.png

C:\Temp\LFS>git cat-file blob :0:VSTS.png
version https://git-lfs.github.com/spec/v1
oid sha256:6075cd5130bdbe29a037cba93dc22158d1443b22b2ffb6acb0d1d541838f26b9
size 48517
git lfs track VSTS.png
git add .gitattributes
git commit -m "Enable LFS tracking for VSTS.png"
git rm --cached VSTS.png
git add VSTS.png
git commit -m "Re-add VSTS.png as an LFS object"