我的印象是,Git LFS的目的是不比较二进制文件。
在一个简单的测试中,我有一个包含2个文件的测试仓库:一个8mb music.mp3
文件和一个只有几个kb的'textFile.txt'文件。
然后我运行以下命令:
git init
git lfs install
git lfs track '*.mp3'
git add --all
git commit -m "Initial Commit"
合理地,我的git repo的大小达到了8mb左右,就像Git LFS的工作方式一样,它仍然必须存储文件。当我将30mb music.mp3
文件替换为8mb music.mp3
文件时,会出现问题。我运行相同的代码
git add --all
git commit -m "Changed music"
但是现在我的仓库回升到38mb!即使我安装了Git LFS,它似乎仍在存储二进制文件的不同版本。有什么我想念的吗?
我希望能够在即将到来的游戏项目中使用Git,但是如果我无法使LFS正常工作,则可能必须找出其他解决方案。
答案 0 :(得分:1)
为Git LFS添加大文件时,该大文件将存储在您的存储库中.git
目录的子目录下。因此,如果您在Git LFS中添加了一个8 MB的文件,然后在Git LFS中添加了另一个30 MB的文件,则这些文件将至少存在于本地存储库中,直到您将它们推送到其他位置,并且您的.git
目录将大38 MB。
这是正常现象,这是正常现象,因为Git LFS会像Git一样跟踪您提交的每个文件的每个版本。但是,Git LFS不会压缩数据,因为(a)许多大型文件(例如MP3)已经被压缩,无法很好地压缩,并且(b)通常您不会一次在系统上存储许多副本,而是仅下载您需要签出的版本。
Git LFS可以使用git lfs prune
修剪系统上不再需要的数据,但是必须将这些数据推送到其他位置。否则,修剪内容当然会导致数据丢失。此外,由于最近使用的数据很可能会再次使用,因此数据通常会保留一定的天数。