GITHUB 大文件管理

# GITHUB 大文件提交

  1. 下载安装 Git Large File Storage 命令行工具。参考这里 (opens new window)brew install git-lfs

  2. 配置 Git LFS。每个用户只需要配置一次就好了 git lfs install

  3. 在想要使用大文件追踪的 GIT 目录下,使用如下命令追踪大文件。 git lfs track "*.psd"

  4. 就像正常提交文件一样提交就好了。

    git add file.psd
    git commit -m "Add design file"
    git push origin main
    

Note

  1. 对于新增加的大文件可以使用这种方式,对于已经存在的大文件使用 git lfs migrate 命令。
  2. 通过命令 git add .gitattributes 来增加属性文件,确保大文件被追踪。

# GITHUB 大文件清理

因为 GITHUB 的免费账户有大文件的容量限制,只能上传最多 1G,再多就需要付费了(不付费的的话似乎仓库会被锁定),所以有的时候需要删除 GITHUB 上的大文件,怎么删除呢?

GITHUB 官方并没有提供单独删除大文件的方案,官方文档提示需要将整个仓库移除才行。

我的想法是移除仓库,然后在本地移除指定大文件后,新建仓库重新上传。能不能做到呢?答案是能。

主要是使用 BFG Repo-Cleaner (opens new window) 这个工具,下载下来 .jar 文件后,在当前的仓库下执行如下命令来清除 100M 以上的文件。

$ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git

这个改动会修改所有commit的值,所以涉及到团队协作的话,需要和团队里的其他成员同步你的修改状况,保证所有人用最新的提交。

有的时候执行这个命令没有过滤出git中的大文件,提示 no large blobs matching criteria found in packfiles - does the repo need to be packed?。这时候可以尝试先执行 git gc 命令重新 pack 一下仓库(参考这个 issue (opens new window)),再去移除大文件。

还有一种场景是,大文件是在过去的某个版本中提交的,但是当前的版本已经不再需要这个大文件了,GIT 依然会上传这个大文件,如果不在意历史提交记录的化,可以将历史提交记录重置。

关于删掉提交记录,有人说可以直接删掉 .git 目录,但是似乎是有问题。更好的解决方案可以参考这个问题 (opens new window)的回答,主要命令是创建一个孤儿分支 git checkout --orphan latest_branch

参考地址:

  1. https://git-lfs.com/ (opens new window)
  2. Removing files from Git Large File Storage (opens new window)
  3. Github上使用LFS超限后被禁用的问题 (opens new window)