是否有任何内部源代码版本控制 schemes/strategy?

Is there any internal source code versioning schemes/strategy?

我知道有很多版本控制方案(例如语义),但我找不到任何关于源代码版本控制的指南。它们必须由 VCS 跟踪(如 Git)还是可以独立进行版本控制?例如,我想独立于使用文件的项目跟踪 md5.c 模块的其他版本。

首先:是的,您确实希望您的代码从一开始就受到版本控制。永远不要接受任何低于完整的版本控制系统的东西,最好是 git,尤其是像 Dropbox 或乱搞文件夹的源代码管理,无论项目规模如何。

分支方案: 发布版本控制主要是更健康的代码版本控制方法的结果。通常你会想要在你的公司实施一个版本控制方案(=分支方案)并让人们坚持它。从不断增长的代码库中,发布将出现并接收一个版本标签,但所有 non-release 版本仍然在任何时间点都受到版本控制,每个人都使用相同的系统。这是使协作和维护变得透明和实用的唯一方法。

对于更复杂的项目,一种流行的分支方案是 git 流程方案。请查找文档 here。基本思想是拥有一个持续开发分支,您可以将新功能(每个功能都在一个单独的分支上开发)合并到一个稳定的分支中,并从中发布新功能。基本上,分支用于根据其稳定性对代码进行排序,从甚至不能独立存在的单独功能分支开始,直到一个永远值得信赖的稳定发布分支。

还有其他分支方案,具体取决于贵公司的需要,如官方 git 文档 here or in the Bitbucket docu by Atlassian here 中所述。环顾四周,根据您企业的需求做出决定。 Git 流程是一个很好的起点,但也许您想要更浅的内容。

相互依赖的项目: 软件工程的经典之作。假设您有一个在版本控制下开发的包。现在这个包将被其他几个人独立使用 - 你会将它复制到每个各自的存储库中,基本上失去对它的版本控制吗?

这就是 submodules 的用途。 Git 允许您将存储库加载到存储库中,基本上是嵌套版本控制。现在你将像往常一样在你喜欢的版本方案下开发你的共享包,并将它简单地导入到其他项目中(现在它被称为子模块)。当您实现了您现在希望在依赖项中看到的新功能时,您启动更新并简单地将新版本从您的原始存储库拉到使用它的版本中(有点像 producer/consumer),通过这样维护上游的开发历史并且始终清楚每个项目中存在哪个版本的依赖项。