Windows git 默认支持 lfs。但 gitee 免费版不支持 git lfs,需特别注意。
设置 git lfs
git lfs install
扫描仓库
扫描仓库查看有哪些大文件存在:
# linux
git ls-files | grep -E '\.psd|\.jpg'
# windows
git ls-files | Select-String -Pattern '\.psd$|\.jpg$'
还可使用
git lfs migrate info --include="*.psd,*.jpg"
配置
配置 .gitattributes
###############################
# Git Line Endings #
###############################
# Set default behaviour to automatically normalize line endings.
# * text=auto
# 文本文件全部使用lf换行,eslint prettier等工具保持一致。
# text=auto eol=lf
# https://start.spring.io/ 生成的项目,mvnw 文件使用 LF 换行。
/mvnw text eol=lf
# Force batch scripts to always use CRLF line endings so that if a repo is accessed
# in Windows via a file share from Linux, the scripts will work.
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
# Force bash scripts to always use LF line endings so that if a repo is accessed
# in Unix via a file share from Windows, the scripts will work.
*.sh text eol=lf
###############################
# Git Large File System (LFS) #
###############################
# Archives
*.7z filter=lfs diff=lfs merge=lfs -text
*.br filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
# Documents
*.pdf filter=lfs diff=lfs merge=lfs -text
*.doc filter=lfs diff=lfs merge=lfs -text
*.DOC filter=lfs diff=lfs merge=lfs -text
*.docx filter=lfs diff=lfs merge=lfs -text
*.DOCX filter=lfs diff=lfs merge=lfs -text
*.dot filter=lfs diff=lfs merge=lfs -text
*.DOT filter=lfs diff=lfs merge=lfs -text
*.xls filter=lfs diff=lfs merge=lfs -text
*.XLS filter=lfs diff=lfs merge=lfs -text
*.xlsx filter=lfs diff=lfs merge=lfs -text
*.XLSX filter=lfs diff=lfs merge=lfs -text
# Images
*.gif filter=lfs diff=lfs merge=lfs -text
*.ico filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.webp filter=lfs diff=lfs merge=lfs -text
# Adobe Photoshop
*.psd filter=lfs diff=lfs merge=lfs -text
# Adobe Illustrator
*.ai filter=lfs diff=lfs merge=lfs -text
# Audio
*.kar filter=lfs diff=lfs merge=lfs -text
*.m4a filter=lfs diff=lfs merge=lfs -text
*.mid filter=lfs diff=lfs merge=lfs -text
*.midi filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.ra filter=lfs diff=lfs merge=lfs -text
# Video
*.3gpp filter=lfs diff=lfs merge=lfs -text
*.3gp filter=lfs diff=lfs merge=lfs -text
*.as filter=lfs diff=lfs merge=lfs -text
*.asf filter=lfs diff=lfs merge=lfs -text
*.asx filter=lfs diff=lfs merge=lfs -text
*.avi filter=lfs diff=lfs merge=lfs -text
*.fla filter=lfs diff=lfs merge=lfs -text
*.flv filter=lfs diff=lfs merge=lfs -text
*.m4v filter=lfs diff=lfs merge=lfs -text
*.mng filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.mpeg filter=lfs diff=lfs merge=lfs -text
*.mpg filter=lfs diff=lfs merge=lfs -text
*.ogv filter=lfs diff=lfs merge=lfs -text
*.swc filter=lfs diff=lfs merge=lfs -text
*.swf filter=lfs diff=lfs merge=lfs -text
*.webm filter=lfs diff=lfs merge=lfs -text
# Fonts
*.ttf filter=lfs diff=lfs merge=lfs -text
*.eot filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text
*.woff filter=lfs diff=lfs merge=lfs -text
*.woff2 filter=lfs diff=lfs merge=lfs -text
*.pfb filter=lfs diff=lfs merge=lfs -text
# Other
*.exe filter=lfs diff=lfs merge=lfs -text
*.dat filter=lfs diff=lfs merge=lfs -text
# IP 地址库。如:ip2region.xdb
*.xdb filter=lfs diff=lfs merge=lfs -text
替换
将仓库中 git 大文件,替换成 git lfs 管理:
git lfs migrate import --include="*.7z,*.br,*.gz,*.tar,*.zip,*.jar,*.pdf,*.doc,*.DOC,*.docx,*.DOCX,*.dot,*.DOT,*.xls,*.XLS,*.xlsx,*.XLSX,*.gif,*.ico,*.jpg,*.jpeg,*.png,*.webp,*.psd,*.ai,*.kar,*.m4a,*.mid,*.midi,*.mp3,*.ogg,*.ra,*.3gpp,*.3gp,*.as,*.asf,*.asx,*.avi,*.fla,*.flv,*.m4v,*.mng,*.mov,*.mp4,*.mpeg,*.mpg,*.ogv,*.swc,*.swf,*.webm,*.ttf,*.eot,*.otf,*.woff,*.woff2,*.pfb,*.exe,*.dat,*.xdb"
本地迁出大文件:
git lfs fetch
git lfs checkout
清理空间:
git reflog expire --expire=now --all
git gc --prune=now
这会修改 git 的历史记录,使用强制推送同步到远程服务器:
git push origin --force --all