毕设填坑笔记-Git lfs的使用

自从自己拟了这个毕设后,感觉自己把自己坑的很惨,上次训练模型把电脑烧了后,总是能碰上奇奇怪怪的问题,所以打算开个新篇幅来记录我是如何填上毕设路上的自己给自己挖的坑。

我的毕设选题是关于用GAN生成图像方面的,为了记录中间的过程,我打算把每次训练生成的epoch都存下来;同时还想用git来管理代码版本,这时摆在我眼前的首要问题就是如何处理图片这些大文件。

使用一些开源的框架和成熟的模型,可以从一定程度上减小自己所需要的训练集体积,但是招架不住每次 pull/push 时所面对的动辄几百兆的传输列表,于是便在网上找到了git基于大文件传输的扩展 – git lfs(Large File Storage)

原理

lfs将标记的大文件保存至另外的仓库,而主仓库仅保留其轻量级指针。

当你检出版本时,根据指针的变化情况更新对应的大文件,而不是本地保存所有版本的大文件。

简单来讲,就是把指定需要lfs进行管理的文件替换成了一个指针文件交给git来进行版本管理。

实际过程

在执行 pull/push 等操作中,lfs通过lfs服务器把这些文件的真身给下载或者上传。

通过这个手段,使得本地仓库体积减小,避免随着这些文件的版本增多而出现仓库体积剧烈膨胀的情况。

安装过程

macOS

//使用homebrew安装
brew install git-lfs

Windows

前往此处下载

更详细安装过程见官方文档

使用方法

把需要用lfs管理的文件添加到追踪列表里,语法支持简单正则,比如添加所有的png文件:git lfs track '*.png'

此时,仓库的根目录下会自动创建 .gitattribute文件,里面记录了使用lfs追踪的文件,该文件需要添加到git远程仓库中进行管理。

具体步骤

  1. 安装后,执行

    git lfs install 
    

    开启lfs功能,上诉语句只需要执行一次

  2. 执行

    git lfs track 'fileName'
    

    进行大文件追踪

  3. 提交,别忘记提交 .gitattribute 文件

  4. 提交后可执行

    git lfs ls-file
    

    查看当前追踪列表

  5. push到远程仓库后,使用lfs追踪的文件会以 “Git LFS”的形式显示

  6. clone时,执行 git clone 或者 git lfs clone 都行