【Git】清理.git文件夹中的大文件及.gitignore简单使用
发布网友
发布时间:2024-10-04 00:25
我来回答
共1个回答
热心网友
时间:2024-11-03 17:32
直接删除根目录下的.git文件夹,然后重新创建,这是一种简单直接的方法。但如果需要保留git log历史记录,不建议这样做。
在训练模型、编译或项目需要上传大文件时,经常使用git add -A提交所有内容,这会导致.git的历史记录过大。即使删除了本地文件,又不想丢失历史记录,就只能一个个手动删除。
强烈建议使用.gitignore文件,忽略不需要提交的目录和文件。
使用git branch-filter遍历git history tree,可以永久删除history中的大文件,达到让.git文件瘦身的目的。
下面给出步骤(以下步骤非常危险,操作需谨慎!):
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
执行的结果实际上是这样的:
git rev-list --objects --all | grep 8f10eff91bb6aa2de1f5d096ee2e1687b0eab007
最大的文件找到了。
git log --pretty=oneline --branches --
遍历所有提交:commit多了会比较慢
git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch ' --tag-name-filter cat -- --all
git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch ' --
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git fsck --full --unreachable
git repack -A -d
git gc --aggressive --prune=now
其中最重要的两条命令是git filter-branch和gc。filter-branch真正清理了大文件,但仅运行它也是没用的,需要再删除备份的文件,重新打包,最后的gc命令用于收集产生的垃圾,最终清除大文件。
git push --force [remote] master
如果我们想保留某个文件在项目中,又不想它受到Git的跟踪管理,可以使用文件.gitignore。只需创建该文件,并添加到项目的根目录中,然后将想要忽略(让Git不进行跟踪)的文件名称填写到该文件中。例如,要忽略C.md,可以将这行添加到.gitignore文件中。
GitHub为我们提供了一整套模板:github.com/github/gitignore...
简单梳理下语法规则:
如果只想忽略指定目录或文件,可以直接添加进去,每行一个。
.gitignore支持正则匹配。
举例:
*.xml # 忽略所有.xml结尾的文件
!beans.xml # 忽略所有.xml结尾的文件,但beans.xml除外
build/ # 忽略build/目录下的所有文件
doc/*.txt # 会忽略doc/y.txt,但不包括doc/xx/zzzz.txt