Git push显示成功但服务端仓库无文件 伴随Log4perl报错
问题排查结论
你执行的git push origin master:master操作本身没有错误,从推送日志的8a760af..d54ede4 master -> master标识可以确认,本地提交已经成功同步到远程仓库的master分支。你看到的remote开头的Perl报错是服务端日志组件的非致命警告,和提交文件未出现的故障没有关联。
提交文件未出现在服务端的排查方向
- 排查点1:确认你查看的是否为服务端仓库的工作目录。默认Git推送只会更新远程仓库的分支引用数据,不会自动刷新工作目录的文件。如果你的远程仓库是非裸仓库,需要登录服务端进入仓库目录执行
git checkout master手动同步工作目录,或者配置post-receive钩子实现推送后自动checkout。 - 排查点2:确认本地提交是否包含目标文件。在本地仓库执行
git show d54ede4查看你推送的这个提交的改动内容,确认你要提交的文件是否在改动列表中,避免出现本地漏执行git add、git commit的情况。 - 排查点3:确认服务端仓库路径正确。你本次推送的目标地址是
ssh://192.168.12.232/~/git_home/.git,对应服务端登录用户家目录下的git_home/.git仓库,确认你查看的不是服务端其他路径的仓库。 - 排查点4:检查服务端自定义Git钩子。如果远程仓库配置了pre-receive、post-receive一类的自定义钩子,可能存在钩子逻辑自动回滚了你推送的提交,可临时禁用钩子测试推送是否正常。
关于Log4perl警告的说明
该报错是服务端部署的Log4perl日志组件的代码缺陷:第164行执行join操作时,用到的$Log::Log4perl::JOIN_MSG_ARRAY_CHAR全局变量未初始化,或者$p->{message}数组中存在未定义的元素,仅会影响日志输出的完整性,属于非致命错误,不会干扰Git的推送逻辑,无需针对这个警告做操作。
内容的提问来源于stack exchange,提问作者Rohit Sarkar
相关产品推荐
相关产品推荐

