0

我有几个库,libA、libB、libC。它们中的每一个都是具有以下结构的颠覆项目:

  • 树干
  • 分支机构
  • 标签

libA 不依赖于任何人,libB 依赖于 libA,而 libC 依赖于 libB 和 libA。

我有一个依赖于 3 个库的项目 MyProject。当我在 MyProject 中制作标签时,我希望将来能够签出该标签并编译并使用它。问题是,如果 MyProject 的标签版本针对 3 个库的主干进行编译,它们可能会发生变化,并且当我签出标签时,它可能无法编译或工作不同。为了以与制作标签时相同的方式工作,我应该将库签出到正确的版本(我应该通过 repos 查找 repos 哪个版本)。

我目前的解决方案是,为每个库制作一个标签,然后根据标签编译 MyProject 的标签。在颠覆中,标签只是一个副本,所以每当我签出 MyProject 标签时,它都会指向已经存在的标签。问题是随着时间的推移,标签的数量会增加,尽管 repos 大小没有增加,但它会在磁盘中增加。

现在我想迁移到 git。Git标签不是副本,所以我有我原来的问题。如果我转到 MyProject 的标记版本,其他库可能已经更改,所以我应该更改其他库的版本。

我该如何解决这个问题?

4

1 回答 1

0

一种解决方案是指出您需要编译的其他库的哪些标签。我建议您的问题的另一个解决方案是使用 git subtree 合并,以便您可以将其他库的适当版本嵌入到您正在构建的版本中。在这种情况下,每个库都有自己的存储库。然后,您将拥有一个将不同库集成在一起的附加存储库。

这实际上将归结为您在这些库上的工作方式以及它们彼此之间的独立性。

简而言之,不要针对其他库的“主干”进行编译,在编译时对其进行管理并用标签标记它们,以便以后重新编译旧的组合版本。(这对于回归测试通常很重要。)

说 git 标签不是“副本”,而 true 也不完全是一个先进的陈述。Git 标签就像分支一样,只是它们不会移动。它们是指向给定提交的指针。这正是他们非常适合的事情。您在所有这些库上放置了相同的标签,以便您可以检查用于生成给定构建的确切组合。

我看到的主要问题是你还没有弄清楚 git 是如何工作的。主干/分支/标签的区别是无用的,因为它们在本地被适当地管理,与 svn 如何操作它们相反。

我真的强烈建议您阅读 git 书籍以了解如何使用 git,而不是将其视为我要采取什么步骤来执行 x? http://git-scm.com/book

最后,在 SVN 或 GIT 上标记或不标记它不会增加您的文件大小,系统知道代码是常见的和重复的。

于 2014-04-21T20:53:54.280 回答