【问题标题】:Building NodeMCU Firmware Using Different Branches使用不同的分支构建 NodeMCU 固件
【发布时间】:2019-06-17 04:45:59
【问题描述】:

只有当我将它们克隆到单独的本地目录时,我才能为 NodeMCU 的所有分支 https://github.com/nodemcu/nodemcu-firmware 构建固件。

当我尝试只有一个文件夹并使用 git checkout 分支时,我只能构建主固件。当我签出分支时,其他文件会更改以匹配分支,但我无法构建固件。也许这就是它的方式?我希望我可以使用 git checkout master 然后 make 来构建主固件,然后使用 git checkout dev 然后 make 来构建开发固件。文件确实会更改以正确反映分支,所以我不确定它为什么不起作用。

【问题讨论】:

  • 构建后可以使用 git status 吗?也许有文件正在建设。也许 dev 没有构建,因为它不是稳定的版本,甚至没有人测试过它的构建?
  • 理论上这当然是可能的。在实践中,这是不太可能的,因为我们有 CI 来确保这种情况不会被忽视。 github.com/nodemcu/nodemcu-firmware/commits/devgithub.com/nodemcu/nodemcu-firmware/blob/dev/README.md 上的 Travis 徽章表明,对于 dev 的当前提示,它正在构建中。其他分支也一样。

标签: git github esp8266 nodemcu


【解决方案1】:

首先,您不必进行多次克隆。
您可以只创建一个克隆,然后使用 git worktree 在各自文件夹中签出这些分支。

其次,当你签出一个分支时,在你第一次编译期间创建的额外文件不会被删除,这可能会干扰你的第二次编译。

执行git clean -n -d -x -f预览您可以从新签出的工作树中清除的内容。

确定后,删除-n(试运行选项)。如果您不想删除被忽略的文件,也请删除 -x

【讨论】:

  • 也使用 git submodule update --recursive 来更新子模块,但在使用 git clean -d -x -f 之前我不会让 make 成功。 -x 是必需的...
【解决方案2】:

虽然@VonC 的回答肯定很有帮助而且有些“正确”,但它也很笼统。

您可能遇到的问题是 Git 子模块。我们将它们用于例如u8g2 和 ucg。查看相应分支中的.gitmodules 了解详细信息。

当您切换分支时,您需要更新子模块。 git worktree 在这里会非常方便,但仍然存在影响子模块处理的错误,我从未尝试过。

我怀疑您按照https://nodemcu.readthedocs.io/en/master/build/#git 的说明进行操作。对于ESP32 branch,我们记录了更多的构建说明,因为云构建器还不支持它。

结论:确保每次切换分支时都运行git submodule update --recursive

【讨论】:

  • 这是个好建议。赞成。 (一开始没看到github.com/nodemcu/nodemcu-firmware/graphs/contributors
  • 创建一个自动运行的 post-checkout 钩子。有关示例,请参见 stackoverflow.com/a/37383406/7976758
  • 我实际上更喜欢那里的 accepted 答案:git config --global submodule.recurse true(您仍然可以选择在本地而不是全局执行此操作)。
  • 这是一个很好的建议,我会这样做,但是在我运行 git clean -d -x -f 之前,make 仍然会失败。我不得不使用 -x
猜你喜欢
  • 2019-10-09
  • 2018-12-20
  • 2016-11-23
  • 2017-06-13
  • 2018-02-19
  • 2013-08-16
  • 1970-01-01
  • 2017-10-28
  • 2016-11-07
相关资源
最近更新 更多