首次推送大型项目至Gitea时未推送全部文件的问题求助
我之前处理过类似的超大Git仓库推送问题,结合你的情况,给你梳理几个排查和解决的方向,应该能帮你找到问题所在:
1. 先排查Git忽略规则的问题
这是最常见的“文件消失”原因——大概率是某些规则不小心把大量文件排除在跟踪范围外了:
- 在本地仓库根目录执行
git check-ignore -v *,这个命令会列出被忽略的文件以及对应的忽略规则来源,看看是不是有太宽泛的规则(比如误写了*却没正确添加例外)。 - 再执行
git ls-files --exclude-standard --others | wc -l,统计未被Git跟踪的文件数量。如果这个数字接近5万多,那说明这些文件根本没被git add .纳入提交,问题就出在忽略规则上。 - 别忘了检查全局忽略文件:
git config --get core.excludesfile,看看有没有全局配置的.gitignore文件在搞鬼。
2. 验证本地提交的完整性
先确认你的本地提交真的包含了所有文件,别是本地就没提交全:
- 执行
git ls-tree -r HEAD --name-only | wc -l,统计当前HEAD提交里的文件总数。如果结果只有3500左右,那问题出在git add .这一步——换成git add -A重新添加所有变更(包括删除的文件、未跟踪的文件),然后重新提交,再统计文件数。 - 检查有没有子模块:执行
git submodule status,如果输出有内容,说明项目里嵌了子模块。git add .只会添加子模块的引用文件,不会把子模块的实际内容推送到远程。这种情况你要么初始化并推送子模块,要么把submodule转成普通目录(删除.gitmodules文件和子模块的.git目录,重新add)。
3. 排查大文件和Git LFS的问题
你的项目有10GB,肯定包含不少大文件,这很容易触发Git或Gitea的隐性限制:
- 先找出仓库里的大文件:
git ls-tree -r HEAD -l | sort -k 4 -n | tail -20,看看有没有单个文件超过100MB甚至1GB的。Git默认对大文件的支持很差,而且如果Gitea没开启Git LFS,可能会静默拒绝大文件的推送(不会直接报错,但会跳过这些文件)。 - 如果有大文件,建议启用Git LFS:
- 本地初始化LFS:
git lfs install - 跟踪你的大文件类型(比如所有超过100MB的文件,或者特定后缀):
git lfs track "*.iso"(替换成你实际的大文件后缀) - 重新添加并提交:
git add .gitattributes(LFS的跟踪规则存在这个文件里),然后git add -A、git commit --amend(或者新提交) - 去Gitea仓库的设置里开启LFS支持,再重新推送。
- 本地初始化LFS:
- 另外,检查Gitea的全局设置:看看后台的
max_upload_size是不是设得太小,导致大文件被截断。
4. 强制重新推送,开启 verbose 模式看日志
如果本地提交是完整的,但远程就是缺文件,可能是推送时的部分失败被Git静默忽略了:
- 先删除远程仓库,重新创建一个空的Gitea仓库,然后本地执行:
git remote remove origin git remote add origin <你的Gitea仓库URL> git push -u origin master --force --verbose--verbose会输出详细的推送日志,能看到每个文件的推送状态,如果有错误会显示出来。
5. 检查Gitea服务器的日志
如果以上都没解决,去Gitea服务器上找日志看看——通常日志在/var/log/gitea/或者Gitea安装目录的data/logs文件夹里。看看推送过程中有没有磁盘空间不足、权限错误、仓库创建异常之类的记录,这些都可能导致文件没被正确写入。
内容的提问来源于stack exchange,提问作者Ministry




