Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 如何在mercurial中将子项目添加到主项目中?_Version Control_Mercurial_Mercurial Subrepos - Fatal编程技术网

Version control 如何在mercurial中将子项目添加到主项目中?

Version control 如何在mercurial中将子项目添加到主项目中?,version-control,mercurial,mercurial-subrepos,Version Control,Mercurial,Mercurial Subrepos,我对mercurial和tortoise是新手,在理解如何处理子项目时遇到了一些问题 我有三个文件夹,分别是UART、SPI和ADC。这些文件夹包含用于微控制器系列的uart、spi和adc的代码。本规范不适用于任何项目,相反,本规范是为任何项目单独设计和开发的。因此,我为每个文件创建了一个存储库,并使用hg对它们进行版本控制 但最近我决定启动一个名为“ProjectA”的项目,它使用ADC和UART。我创建了“projecta”文件夹,创建了一个main.c文件,最后在“projecta”文件

我对mercurial和tortoise是新手,在理解如何处理子项目时遇到了一些问题

我有三个文件夹,分别是UARTSPIADC。这些文件夹包含用于微控制器系列的uart、spi和adc的代码。本规范不适用于任何项目,相反,本规范是为任何项目单独设计和开发的。因此,我为每个文件创建了一个存储库,并使用hg对它们进行版本控制

但最近我决定启动一个名为“ProjectA”的项目,它使用ADC和UART。我创建了“projecta”文件夹,创建了一个main.c文件,最后在“projecta”文件夹中创建了一个存储库,添加了main.c文件,并提交了它

我这里的问题是,我想以某种方式将UART和ADC代码添加或链接到我的“Projet A”,而无需手动复制粘贴文件夹,我的意思是,将UART和ADC代码作为独立于“项目A”的子项目处理,并让hg将UART和ADC的最新版本复制到“主”项目。例如,如果UART代码中需要更改,则在UART代码中进行更改,将更改提交到UART项目,并将其“更新”到添加或链接了UART代码的所有项目中的最新版本

我读过:

我找不到我问题的答案。我发现了一个关于子项目的非常简洁、直截了当的教程,但它并没有真正的帮助( )

你能给我一系列要遵循的步骤吗,或者给我一个到一些教程的链接来完成这个任务吗


问候

感谢您在询问之前详细说明您的研究内容;这几天很清爽

我认为您错误地考虑了版本控制库,看看这个答案是否符合您心目中的模型

在我看来,UART、SPI和ADC库在强烈的意义上是“库”:它们为ProjectA这样的调用程序提供服务。它们还可以不经更改地向ProjectB–ProjectZ提供这些相同的功能

如果是这样,那么在单独的存储库中维护库是正确的做法。如果UART更改了它的寄存器,或者我在UART库中发现了一个bug,我希望我的更改能够通过UART库的所有用户反映出来,实现这一点的方法是为UART库建立一个单一的、确定的存储库。该存储库应生成适合您的系统的UART.a或UART.so或UART.dll。该库将在链接时成为ProjectA的一部分。另一种方法是在多个项目存储库中分别使用UART代码的非关联副本,这会导致错误


我不会告诉你,库的生成和与ProjectA的链接几乎和将所有代码放在一个repo中一样简单,但这是
make
和多个目录中的朋友的限制(这是一个众所周知的缺陷)。不过,从DVCS的角度来看,您对存储库的分离似乎是有意义的。

像msw一样,我喜欢您解释您已经阅读的内容!我建议阅读

  • -我的一个同事写的关于子存储库的指南
  • -我写了一个答案,试图解释强耦合子组件可能遇到的一些问题。我不知道您的世界中有什么构建工具,但如果可能,您应该使用一个工具来管理组件之间的依赖关系
  • -关于在服务器端保持子回购同步的另一个答案
  • 和hg帮助子回购

这是正确的,但是,我需要主项目中的代码副本,而不仅仅是在链接时链接.a lib文件。这是因为有时我可能需要添加或删除UART、SPI或ADC中的代码以不断改进它们,有时在调试时可能需要深入这些代码库。因此,我们的想法是能够在主项目中复制库的代码,而不仅仅是链接预编译的.a文件。例如,在synergy中,当创建项目时,提供所有公共功能的所有“支持”功能或“库”的代码都是“复制”的创建工作区后,所有代码都可以在本地编辑。如果需要在任何库中对某些更改进行错误修复,则库“所有者”会进行更改,对库进行基线检查,然后在主项目中将其更新为最新版本。如果“synergy”是指IBM®Rational®synergy软件配置管理,然后你有了决斗的SCM,你会发现很难保持它们的一致性。如果Synergy有点像ClearCase,愿上帝怜悯你的灵魂。哦,对不起,是的,我指的是IBM®Rational®Synergy