跟踪源代码变体

2024-01-23

我很快就开始维护一系列包含相同嵌入式软件变体的产品。由于我已经使用 git 一年了并且非常欣赏它,所以我很可能使用它来进行源代码控制。

我可以看到多种用于维护固件变体的选项,但没有一个让我太满意。您在自己的工作中应用了哪些最佳实践?

我能想到的替代方案:

  • defines。预处理。 优点:所有内容都始终存在于源代码中,很难错过其中一款产品的更新。 缺点:较难阅读。当我们只有两个变体时可能还好,当它变成四个或更多时,那就很痛苦了。而且,应用 DRY 原则(不要重复自己)似乎更困难。

  • 每个产品变体一个分支。 当包含适用于所有产品的更改时,必须将更改合并到其他产品。 缺点:如果提交包含所有产品的更改和特定变体的更改,则会出现问题。当然,您可以确保提交仅包含一种更改:此产品更改或整个系列更改。但尝试将其强加给团队?另外,合并是行不通的,我们应该精挑细选。正确的?

  • a 核心存储库作为子模块。 将包含核心功能的所有文件单独作为存储库。 所有产品都包含核心存储库的一个版本作为子模块。 缺点:我看不出最终不会有核心子模块的变体。然后我们又遇到麻烦了,然后我们又会使用定义或一些不好的东西。 有分支的核心存储库?然后我们回到之前的选择:必须合并适用于所有分支的更改,但合并还包括产品特定的内容。

  • create 每个模块一个存储库。 例如,显示驱动程序的存储库、电源管理硬件的另一个存储库、用户输入接口的另一个存储库…… 优点:良好的模块化。只需选择您需要的模块作为子模块即可制作新产品!所有子模块都可能有分支,例如一个变体以不同的方式使用硬件。 缺点:有很多很多模块,每个模块都跟踪几个文件(一个包含文件和一个源文件)。一个麻烦。 有人在某些模块中进行了重要更新?然后,如果合适的话,需要有人将更改包含在该模块的其他分支中。然后有人还必须更新每个产品存储库中的子模块。 做了相当多的工作,但我们有点失去了 git 的快照功能。

你是如何做到的,效果如何?或者你会怎么做?

我有一种感觉,我应该体验一下樱桃采摘。


您应该尽可能努力将每个变体的自定义代码保留在其自己的文件集中。然后,您的构建系统(Makefile 或其他文件)根据您正在构建的变体选择要使用的源。

这样做的优点是,在处理特定变体时,您可以看到它的所有代码,而不会出现其他变体的代码造成混淆。可读性也比在源代码中乱七八糟地使用 #ifdef、#elif、#endif 等要好得多。

当您知道将来想要合并时,分支效果最好all将代码从分支转移到主分支(或其他分支)。它不适用于仅合并some从一个分支到另一个分支的更改(尽管这当然可以完成)。因此,为每个变体保留单独的分支可能不会产生好的结果。

如果您使用上述方法,则无需尝试在版本控制中使用此类技巧来支持代码的组织。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跟踪源代码变体 的相关文章

  • Eclipse 与外部 src 和 Web 内容文件夹链接或映射

    首先这不是问题但是我遇到的问题的解决方案浪费了4 5个小时来找到解决方案 请让我知道是否有更好的替代方法来使用 eclipse 项目管理外部 src 文件夹 我正在使用版本控制系统 GIT 来管理我的项目 还使用外部 Git 客户端 Sou
  • 什么是 .axf 文件?

    我是arm架构的新手 我从事嵌入式软件工作 并试图了解我的项目二进制文件的调试文件夹中存在的 axf文件 发现它是链接器在构建过程中生成的arm可执行格式文件 用于调试崩溃 所以很明显它包含了一些调试信息 但不清楚具体是什么信息 而且deb
  • TeamCity 将功能分支推送到主分支

    有没有办法将成功构建的功能分支推送到另一个分支 我想要这样的东西 Git 存储库 Gitorious GitHub 等 分支机构 master 当前项目的代码 质量保证 代码等待 QA 的分支 功能分支 许多远程分支 开发人员可以在其中开发
  • 从 github 中删除子项目提交

    我有两个存储库A and B 我错误地在我的机器上将仓库 B 克隆到了 A 内 我从存储库 B 中删除了所有代码 但是当我在源上从 A 推送并合并代码时 它还显示了子项目提交B在 Github 仓库上 我想从我的 master 上删除子项目
  • 获取最新远程提交的 SHA1 [重复]

    这个问题在这里已经有答案了 可能的重复 git bash 如何检查是否有新的提交可用 https stackoverflow com questions 6006759 git bash how to check if theres a n
  • Git:压缩 master 上提交的最简单方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 git 将最后 X 次提交压缩在一起 https stackoverflow com questions 5189560 how can i squash my last x commits
  • 自动生成/删除詹金斯工作

    我正在寻找一种自动创建一组詹金斯作业的方法 通常在创建新的 git 分支之后 我已经为maven尝试过这个插件 http evgeny goldin com wiki Maven jenkins plugin http evgeny gol
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git
  • 未能将一些参考推送至 [email protected]

    当我尝试推送到 Heroku 存储库时收到此错误 我已经设置了autocrlf false在gitconfig中 但这个问题仍然存在 我也尝试过这个解决方案here https stackoverflow com questions 566
  • 在 Azure DevOps 中为 Wix MSI 文件生成 GUID

    我正在为 Web 服务器应用程序和 Sitecore 前端应用程序设置 Wix 安装程序 我的问题并非特定于 Web 服务器或 Sitecore 我的问题是 Wix 以及如何使用它进行持续交付 1 Wix 需要每个文件和产品本身的 GUID
  • 我可以忽略全局 .gitignore 吗?

    我的全局 gitignore 一般都很棒 但对于这个一次性项目 我不希望应用全局规则 如何删除这个怪异存储库的全局 gitignore 规则 在您的存储库中运行此命令 git config local core excludesfile f
  • 自动同步两个 git 存储库

    是否可以保持同步两个 Github 存储库 远程 的特定文件夹 有两个 github 存储库 repoA 和 repoB 这两个存储库都有名为 ABC 的文件夹以及其他独特的文件夹 如果repoA的文件夹ABC中的任何文件有更新 我想自动更
  • 为什么“git描述-dirty”在描述干净结帐时添加“-dirty”后缀?

    我刚刚发现 dirty选项git describe看起来它应该做一些非常有用的事情 即在输出中附加一个后缀git describe当工作树脏时 但是在我的一些存储库上似乎并非如此 git status On branch 8 30 noth
  • Spring Cloud Config - 不允许使用 git-upload-pack

    我有一个在 docker 环境中运行的 spring boot 应用程序 它连接到 Git 存储库以获取应用程序的配置 我的问题是 当尝试获取 properties 文件时 应用程序有时会出错 这很奇怪 因为如果我更改用户和密码 同一个应用
  • 尝试配置 GIT 时 Eclipse 没有响应

    Windows 10 专业版 64 位SSD金士顿 i5 4690Eclipse 版本 全部工作空间 空问题 每次我尝试配置 TEAM gt GIT gt 配置或尝试导入 创建本地 远程 git 时 Eclipse 都会冻结 直到我强制用任
  • 尝试了解 ARM 二进制映像中的加载内存地址 (LMA) 和二进制文件偏移量

    我在一家ARM 皮质 M4 STM32F4xxxx 我试图了解二进制文件 elf and bin 在内存中构建并闪存 特别是关于内存位置 具体来说 我不明白的是LMA从实际的二进制文件偏移量进行 翻译 让我用一个例子来解释一下 我有一个 e
  • 如何在 SVN 中分支单个文件?

    分支的颠覆概念似乎专注于创建整个存储库的 不稳定 分支 并在其上进行开发 是否有一种机制可以创建单个文件的分支 对于用例 请考虑具有多个特定于平台的源代码 c 实现的通用头文件 h 这种类型的分支是永久性的 所有这些分支都将不断发展 偶尔会
  • Smartgit:自动插入提交消息

    有没有办法使用钩子脚本在 Smartgit 中自动插入提交消息 重击 如果用户提交了他的更改 我想预加载提交消息字段 我没有看到任何SmartGit配置 http www syntevo com smartgit documentation
  • 合并后 Git 分支和提交历史记录

    我正在开发一个项目 单独 对于我开发的每个功能 我都会创建一个新分支 处理该功能 然后将其合并到 master 中 所以通常我不会同时在两个不同的分支上工作 也不会在一个分支上工作时接触master 当我合并一个分支时 我看到 使用gitx
  • 在种子项目上构建时如何组织 git 存储库

    我正在基于从 github 克隆的种子项目 MEAN io 构建一个网站 如何将这些文件与我自己的文件分开 由于该种子提供了广泛的文件框架 因此我自己的文件分布在整个项目中 我希望能够从种子中提取更新 但不能将其与我添加的文件混合 我知道我

随机推荐

  • Visual C++ 中的堆框架有多大

    在 Visual C 中 如果我使用 new 在堆上创建对象 堆帧头和填充会占用多少额外空间 特别是在发布代码中 我期望一个 int 表示块中有多少可用空间 另一个可能表示当前正在使用多少空间 并且帧大小根据体系结构四舍五入到最接近的 32
  • WEB API 返回遵循序列化属性的对象

    我正在使用 WEB API 返回一个对象 类 类已经使用 System Xml Serialization 属性进行结构化 这使得使用 WEB API 返回整个类变得困难 因为它公开的内容超出了应有的范围 我不认为这是序列化类并返回字符串的
  • MDX 查询返回记录数

    以下是我的 MDX 查询 SELECT NON EMPTY Measures Fact Sample Count ON COLUMNS NON EMPTY Fact Sample Sample Reference No Sample Ref
  • Django 的缓存模块可以在 Google App Engine 上运行吗?

    我正在 Google App Engine 上运行 Django 1 0 2 并且想知道以下哪一项 如果有 Django 缓存模块 http docs djangoproject com en dev topics cache 本质上应该与
  • GCC 生成的 ARM 和 x86 汇编代码的差异

    让我们看一个简单的 C 代码来设置寄存器 int main int a int 111111 a 0x1000 return 0 当我使用 1 级优化为 ARM arm none eabi gcc 编译此代码时 汇编代码类似于 mov r2
  • travis 构建失败,因为缺少 devtools

    我正在尝试设置 travis 构建 但失败并出现以下错误 export PKG TARBALL Rscript e pkg lt devtools as package cat paste0 pkg package pkg version
  • Django JavaScript 文件

    在 Django 应用程序中 我应该将 javascript jquery 脚本放在哪里 与其他静态媒体一起使用 请参阅此处了解更多信息 http docs djangoproject com en dev howto static fil
  • 使用 Margin Auto 和 Center 将 Float Left Div 居中

    我知道这个问题已经被问过很多次了 将 div 居中对齐 https stackoverflow com questions 1740587 float a div to center 不过 我遵循他们的建议
  • XNA 的 CPU 使用率高

    我今天刚刚注意到 当我编译并运行一款新的 XNA 4 0 游戏时 其中一个 CPU 线程以 100 的速度运行 并且帧速率下降到 54 FPS 奇怪的是 有时它可以在 60 FPS 下运行 但随后就会下降到 54 FPS 我以前没有注意到这
  • 在 OPTIONS 响应后使 fetch API 与 CORS 一起使用

    我正在尝试从我们的 API 获取数据 API 已启用 CORS 支持并对 OPTIONS 请求返回以下响应 Access Control Request Headers content type Access Control Allow O
  • requireJS 中的上下文和嵌套模块

    我在 requireJS 中的上下文方面遇到了一些麻烦 我想要的是在配置阶段 在加载任何模块之前 创建一个上下文 mycontext 然后始终保留该上下文 这很复杂 因为不幸的是 我需要 base js contextReq require
  • 如何按组应用函数?

    我来自另一个topic https stackoverflow com questions 63529481 group by function with pandas dataset cronbachs alpha with groupe
  • Spock:模拟类的方法未匹配

    我能够通过我的代码的简化版本的测试 感谢 cgrim Spock 方法未被识别为调用 https stackoverflow com questions 53254616 spock method not recognized as an
  • D3JS SVG 视图框属性

    我将 svg 附加到我的 div 并应用 viewBox 属性 0 0 100 100 我的控制台显示 d3 js 的错误 Error Invalid value for
  • 不引人注目的验证 C# MVC Razor

    是否可以进行不显眼的验证 使某个字段成为必填字段 但前提是其他属性发生更改 例如 Required public Decimal Income get set Required public Decimal Tax get set Requ
  • 错误:无法解析 setupPlatform 的所有参数:(?, [object Object], [object Object])

    我将 Angular 更新到版本 8 但遇到了一个小问题 当我使用离子服务启动应用程序时 Error Can t resolve all parameters for setupPlatform object Object object O
  • 在Python中模拟assert_used_with

    我无法理解为什么以下代码未通过 test py import mock import unittest from foo import Foo class TestFoo unittest TestCase mock patch foo B
  • 在 Angular 单元测试中模拟 ngResource

    我有一个ngResourceMockFactory看起来像这样 function use strict angular module app factory NgResourceMock ngResourceMockFactory ngRe
  • Jupyter Lab 显示小部件的问题(javascript 错误)

    我在新 PC 上复制 Jupyter Lab 安装时遇到问题 它在我的前一个上工作得很好 我无法显示简单的小部件 例如 ipywidgets 或 ipyvuetify 中的复选框 我检查了 jupyter widgets 是否已通过 jup
  • 跟踪源代码变体

    我很快就开始维护一系列包含相同嵌入式软件变体的产品 由于我已经使用 git 一年了并且非常欣赏它 所以我很可能使用它来进行源代码控制 我可以看到多种用于维护固件变体的选项 但没有一个让我太满意 您在自己的工作中应用了哪些最佳实践 我能想到的