记录一次在windows上执行flutter pub get的问题

2,415 阅读2分钟

flutter支持远端git依赖,类似这样

dependencies:  
    flutter:    
        sdk: flutter​  
    flutter_boost:    
        git:      
            url: git@git.xxx.co:live/pub.git      
            path: plugins/flutter_boost

当我用终端运行flutter pub get的时候(直接点击AS上面的Packages get效果一样),直接报错:

在IDE上运行Packages get会在Terminal终端提示下面错误:

Cannot find a Git executable.
Please ensure Git is correctly installed.
pub get failed (1)

在git bash终端提示下面错误:


刚开始以为是git环境变量没配置对,但是之前运行的好好的,并且用UninstallTool工具卸载干净了git,然后重新安装依然不行。

在Stack Overflow上搜到了跟我的场景很相似的帖子

地址: stackoverflow.com/questions/1…

This could be related to issue 4947

Run pub from Windows shell with git installed and available in PATH:

D:\Tools\dart\dart-sdk\bin\pub install                                                                                Cannot install 'dartlib' from Git (git://github.com/kevmoo/dartlib.git).                                                                        Please ensure Git is correctly installed.     git --version                                                                                                         git version 1.7.7.1.msysgit.0    

Seems, that this issue related to Issue 1705 as git is available as git.cmd.

Replacing "git" to "git.cmd" at pub's sources (io.dart and git_source.dart) fixes pub for my environment.

上面提示是需要修改dart的pub源码,因为源码里面有用到git.cmd命令,但是我windows下的git并没有该可执行文件存在。

最后去github.com/dart-lang/s… 仓库中找io.dart and git_source.dart两个文件,并不能找到,原因是master分支上已经把dart的pub工具打包成可执行文件了。

通过search in this repository 查找git.cmd关键字,终于在仓库的某个节点找到了io.dart文件引用git.cmd的地方

地址:github.com/dart-lang/s…


仔细查看该段代码实现,里面先去试着执行git,然后再执行git.cmd,理论上我本机git安装正确,就不会执行git.cmd命令的...

注意看红框中的代码实现,输出的result.stdout.length == 1 && regex.hasMatch(results.stdout[0]);这段代码的意思是执行命令输出的行数为1行,并且匹配git version字符。


难道我的git --version输出的不对吗?发现在windows下的cmd终端输入确实多了行Active code page: 65001

C:\Users\computerName>cmd /c git --version
Active code page: 65001
git version 2.23.0.windows.1

好吧,感觉有眉目了,不禁想起之前有次手贱想把windows下的cmd终端编码格式改成utf-8,windows下cmd终端默认是gbk。

参考了www.cnblogs.com/yifengs/p/1… 这篇文章,并且在注册表里永久修改了编码格式

难怪会出现一个65001,它是utf-8的编码代码,gbk是936

好吧,删除注册表里的配置,并且重新将cmd改成gbk就好了...

看来Windows上的环境问题真的坑很多,不过遇到这种问题,需要好好思考到底是哪个环境出的问题,在Stack Overflow上找到那篇帖子让我改dart的pub工具源码的给了我很大启发,源码是不会改的,这辈子都不可能改dart 的源码的……