我对mercurial和乌龟很新,我在尝试理解如何使用子项目时遇到了一些问题。
我有三个名为 UART , SPI 和 ADC 的文件夹。这些文件夹包含用于微控制器系列的uart,spi和adc的代码。这些代码与任何项目无关,相反,此代码是单独设计和开发的,可用于任何项目。因此,我为每个人创建了一个存储库,并使用hg。进行版本控制。
但最近我决定启动一个名为"项目A" 的项目,该项目使用 ADC 和 UART 。我创建了"项目A"文件夹,创建一个main.c文件,最后在"项目A"中创建一个存储库。文件夹,添加main.c文件,并提交它。
我的问题在于我想以某种方式 "添加"或者"将UART和ADC代码链接到" Projet A" ,而无需手动复制粘贴文件夹,我的意思是,将UART和ADC代码作为子项目处理,独立于"项目A"并让hg将UART和ADC的最新版本复制到" main"项目。然后,如果UART代码中需要进行更改,则在UART代码中进行更改,将更改提交到UART项目,然后更新"它是所有已添加或链接UART代码的项目中的最后一个版本。
我读过:
Mercurial - Add project which is not within repository folder
Do all files have to be in the 'repository folder' when using Mercurial?
Mercurial for Beginners: The Definitive Practical Guide
我无法找到问题的答案。我找到了一个关于子项目的非常简洁直接的教程,但它并没有真正帮助(http://tomtech999.wordpress.com/2011/12/17/getting-started-with-mercurial-subrepositories/ )
您能否给我一系列要遵循的步骤或链接到一些教程来实现这一目标?
问候!
答案 0 :(得分:0)
感谢您在询问前指定您所研究的内容;这些日子令人耳目一新。
我认为您正在考虑错误地控制库的版本,看看这个答案是否符合您的想法。
在我看来,UART,SPI和ADC库是"库"在强烈的意义上:他们为像ProjectA这样的调用程序提供服务。他们还可以在不改变的情况下为ProjectB-ProjectZ提供这些相同的功能。
如果是这样,那么将库保存在单独的存储库中就是正确的事情。如果UART更改其寄存器或我在UART库中发现错误,我希望我的更改反映在UART库的所有用户中,并且这样做的方法是为UART创建一个单一的,明确的存储库图书馆。该存储库应该生成适合您系统的UART.a或UART.so或UART.dll。该库将在链接时成为ProjectA的一部分。另一种方法是在多个项目存储库中单独使用UART代码的未关联副本,这是一个错误邀请。
我不会告诉你,库生成和与ProjectA的链接几乎就像在一个仓库中拥有所有代码一样简单,但这是make
和朋友跨多个目录的限制(一种众所周知的缺陷)。但是,从DVCS的角度来看,您的存储库分离确实有意义。
答案 1 :(得分:0)
就像msw一样,我喜欢你解释你已经读过的东西!我建议阅读
hg help subrepos
。