背景与问题
我目前正在开发一个Flutter应用程序,它要求我们对Flutter引擎和框架进行修改。因此,我的系统上有一个定制的Flutter引擎,以及一个快照安装的Flutter环境。为了对Flutter框架进行修改和测试,我将我的远程上游设置为我自己的分支Flutter存储库。现在,我的问题和提出这个问题的原因是,每当我对Flutter代码进行更改时,我都会从forked repo、flutter doctor
输出、0.0.0-unknown
中挑选一些代码更改作为Flutter版本。
重现步骤
1.使用snap安装flutter(在Ubuntu上):snap install flutter --classic
1.运行flutter doctor
以安装Flutter工具
1.在GitHub中派生flutter.git
存储库
1.打开终端并运行cd ~/snap/flutter/common/flutter
1.将远程上游设置为派生的存储库:git remote add upstream git@github.com:<YourRepo>/flutter.git
- 2.8.1结帐标记:
git checkout 2.8.1
1.运行flutter doctor
并查看您的版本;它应该是2.8.1
(显然是正确) - checkout 新分支:
git checkout -b <your branch>
1.进行更改
1.将您的更改推送到派生的存储库(上游)
1.运行flutter doctor
并查看您的版本。对我来说,它是0.0.0-unknown
,尽管我所有的代码都与2.8.1相同,除了一些(相当小的)变化。
最终问题
有没有人知道Flutter版本是如何确定的?最初显示为2.8.1的2.8.1标签怎么会在几个小的改动之后就切换到了未知的0.0.0呢?
1条答案
按热度按时间rqqzpn5f1#
根据我的发现,它使用git的标签系统来确定代码链接到哪个版本。查看
flutter_tools/lib/src/version.dart
,调用fetchTagsAndUpdate
函数,获取当前的git标签和一些其他信息。然后,它将输出字符串解析为片段,并根据片段确定代码的版本。我用来复制它的命令是
git describe --tags
。我的标记显然是不可解析的,并抛出了一个未知错误。这也解释了为什么当我切换分支和标记时,它会改变flutter doctor
的版本输出