我认为git lfs migrate
重写了回购的历史记录,以便将指定的大文件保存在LFS中。这意味着存储库应该变小,因为它不直接包含大文件的所有版本。但是,当我跑步
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 398M .git / lfs
答案 0 :(得分:5)
唯一的问题是二进制文件的原始git对象仍然位于.git
文件夹中,因为您没有对它们进行垃圾回收。
您应遵循git lfs migration tutorial的说明:
以上代码成功地将先前存在的git对象转换为lfs 对象。但是,常规对象仍保留在.git中 目录。这些将最终由git清理,但要清理 立即将它们运行:
git reflog expire --expire-unreachable=now --all
git gc --prune=now
运行后,您的.git应该具有相同的大小,但是如果您要使用它,则应该看到objects
现在应该比迁移之前小得多,并且lfs
拥有休息。
更好的消息是,现在其他开发人员/应用程序克隆存储库时,他们只需下载objects
目录,然后仅获取 “大文件”即可他们查看的不是全部历史记录。
答案 1 :(得分:3)
我认为git lfs migration重写了一个repo的历史记录,以便将指定的大文件保存在LFS中。
完全正确。
这意味着存储库应该变小,因为它不直接包含大文件的所有版本。
并非完全正确。 git lfs
的承诺不是您的仓库会更小,而是克隆时,您不必下载所有git对象,因此克隆会更小,更快。因为对于git-lfs
管理的文件,在git checkout
期间仅下载应该出现在您的工作目录中的文件。
test-data /目录中的所有文件都替换为以下文件:
这就是git-lfs的工作方式。而不是提交存储库中的文件,而是提交包含对象的ID的“指针”文件。文件的内容存储在.git/lfs/objects
文件夹中。这些对象将在您git push
上载到服务器。
.git文件夹变成两倍大(400MB至800MB)。我很困惑。
由于git lfs管理的所有文件都存储在此文件夹中,所以它可能会变得很大。
我还认为它使存储库的大小增加了一倍,因为对象暂时存储了两次。在.git/objects
中,直到您放弃旧的历史记录为止(按purging the reflog and doing a git gc
。但是,一旦确定您的lfs迁移成功,就执行此操作),然后在.git/lfs/objects
中这样做,因为您进行了git lfs转换。
我认为(但不确定).git/lfs/objects
用作缓存文件夹,因此一旦您推送了所有新历史记录并上载了lfs管理的文件,就可以删除它以减小大小您的存储库。
但是如果我是你,我不会那样做!
要查看git lfs对本地存储库的实际影响,一旦您--force
推送了新的历史记录(并且旧的存储库不再位于远程存储库中),我将进行一个新的克隆。现在,您的本地存储库应该较小。
但是以后每次下载这些文件的新版本时,文件夹.git/lfs/objects
仍会增加(但应始终比不使用git lfs时小)。
希望您能更好地了解它的工作原理...
PS:
test-data /目录中的所有文件都替换为以下文件:
我希望你所说的部分错误。 test-data/
中的文件仍然包含良好的内容,但是您报告的是git
命令向您显示的内容...
你能确认吗?或您有问题...可以通过未安装git lfs
来解释。
答案 2 :(得分:0)
如果您进行迁移,则会出现看起来像git lfs指针并替换了工作副本中的文件的奇怪文件(在您的情况下为test-data/
中的文件)
git lfs track
命令之后。此命令将更改工作副本上所有已跟踪的“大文件”。git lfs track
命令对工作副本所做的所有更改。
如果您遵循了本教程并仅提交了.gitattributes
,但并没有提交所有“大文件”,则可能会发生这种情况。