2

我是 mercurial 和乌龟的新手,我在尝试了解如何处理子项目时遇到了一些问题。

我有三个文件夹,分别称为UARTSPIADC。这些文件夹包含使用微控制器系列的 uart、spi 和 adc 的代码。这些代码与任何项目无关,相反,此代码是单独设计和开发的,可用于任何项目。因此,我为每个存储库创建了一个存储库,并使用 hg 将它们置于版本控制之下。

但最近我决定开始一个名为“Project A”的项目,它使用ADCUART。我创建“Project A”文件夹,创建一个main.c文件,最后在“Project A”文件夹中创建一个repository,添加main.c文件,并提交。

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

我读过了:

Mercurial - 添加不在存储库文件夹中的项目

使用 Mercurial 时是否所有文件都必须位于“存储库文件夹”中?

http://hginit.com/index.html

Mercurial 初学者:权威实用指南

我找不到我的问题的答案。我找到了一个关于子项目的非常简洁和直截了当的教程,但它并没有真正帮助(http://tomtech999.wordpress.com/2011/12/17/getting-started-with-mercurial-subrepositories/ )

你能给我一系列的步骤或链接到一些教程来完成这个吗?

问候!

4

2 回答 2

0

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

于 2014-05-27T07:47:15.377 回答
0

感谢您在询问之前指定您研究过的内容;这些天令人耳目一新。

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

在我看来,库 UART、SPI 和 ADC 是严格意义上的“库”:它们为像 ProjectA 这样的调用程序提供服务。他们还可以为 ProjectB-ProjectZ 提供这些相同的功能而无需更改。

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

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

于 2014-05-26T20:33:26.333 回答