首次使用Git,执行git push origin master后进程无法退出求助
Git Push到本地裸仓库卡住无法退出的原因及解决办法
这种推送完成后进程卡住的情况我之前也碰到过几次,大概率是下面几个原因导致的,你可以逐一排查:
可能的原因
- 裸仓库的钩子脚本搞的鬼:裸仓库虽然没有工作区,但如果有人给它加了
post-receive这类钩子脚本,脚本里要是有需要交互的操作(比如等着用户输入东西),或者脚本本身运行卡住了,Git推送完内容后会一直等钩子执行完,自然就退不出来了。 - Windows下的文件锁/权限问题:Windows系统经常会有文件被其他进程占用的情况,要是MyProjectB里的文件被别的程序锁了,或者你的用户权限不够,Git在做后续收尾操作的时候卡壳,进程就停不下来。
- Git版本的小bug:有些旧版本的Git在处理本地仓库推送到本地裸仓库的场景时,可能存在进程无法正常终止的bug,更新版本就能解决。
对应的解决办法
- 先查钩子脚本
- 打开
D:\MyProjectB\hooks文件夹,看看有没有post-receive、update这类文件(可能没有后缀名)。 - 要是有,用记事本打开看看内容:有没有
read之类需要输入的命令?有没有无限循环或者等待外部资源的逻辑?有的话修改掉或者暂时重命名这个脚本,再重新推送试试。
- 打开
- 排查文件占用和权限
- 把所有打开MyProjectB目录的程序都关掉(比如资源管理器、VS Code这类IDE),确保没有进程占用里面的文件。
- 右键MyProjectB目录,选「属性」→「安全」,确认当前用户有「完全控制」的权限,避免Git写入时被权限拦住。
- 更新Git到最新版
- 打开PowerShell输入
git --version看看当前版本,安装最新的稳定版Git后再试一次推送,说不定旧版本的bug就修复了。
- 打开PowerShell输入
- 临时跳过钩子测试
- 试试运行
git push origin master --no-verify,这个参数会跳过所有钩子脚本。如果这次能正常退出,那百分百是钩子的问题,回头再仔细排查钩子就行。
- 试试运行
内容的提问来源于stack exchange,提问作者cbp
相关产品推荐
相关产品推荐

