针对多个库的标记进行编译,SVN到GIT

krcsximq  于 2023-09-29  发布在  Git
关注(0)|答案(1)|浏览(145)

我有几个库,libA,libB,libC。它们中的每一个都是一个不同的subversion项目,其结构如下:

  • 后备箱
  • 分支
  • 标签

libA不依赖于任何人,libB依赖于libA,libC依赖于libB和libA。
我有一个项目MyProject,它依赖于3个库。当我在MyProject中创建一个标记时,我希望将来能够检出该标记并编译和使用它。问题是,如果MyProject的标记版本针对3个库的 Backbone.js 进行编译,它们可能会发生变化,并且当我 checkout 标记时,它可能无法编译,或者工作方式不同。为了像我创建标签时一样工作,我应该将库检出到正确的版本(我应该通过repos查找repos版本)。
我目前的解决方案是,为每个库创建一个标记,然后根据标记编译MyProject的标记。在Subversion中,标记只是一个副本,所以每当我 checkout MyProject标记时,它都会指向已经存在的标记。问题是,随着时间的推移,标签的数量会增加,尽管存储库的大小不会增加,但它会在磁盘中增加。
现在我想迁移到git。Git标签不是副本,所以我有我原来的问题。如果我转到MyProject的标记版本,其他库可能已经更改,因此我应该更改其他库的版本。
如何解决这个问题?

olmpazwi

olmpazwi1#

一种解决方案是指定您需要使用其他库的哪些标记进行编译。我建议的另一个解决方案是使用git子树合并,这样你就可以将其他库的适当版本嵌入到你正在构建的版本中。在这种情况下,每个库都有自己的存储库。然后,您就有了一个将不同库集成在一起的附加存储库。
这实际上取决于你在这些库上工作的方式,以及它们需要彼此独立的程度。
简而言之,不要编译其他库的“ Backbone.js ”,管理它们,并在编译时用标签标记它们,以便以后可以重新编译旧的组合版本。(这通常对回归测试很重要。
说git标签不是“副本”,而true也不完全是一个进步的声明。Git标签就像树枝一样,只是它们不会移动。它们是指向给定提交的指针。这正是他们非常适合做的事情。您可以在所有这些库上放置一个相同的标记,以便可以检出用于生成给定构建的确切组合。
我看到的主要问题是,你还没有完全理解git是如何工作的。Trunk/分支/tag的区别是无用的,因为它们是在本地被正确管理的,而不是svn如何操作它们.
我真的强烈建议你读一读git的书来学习如何使用git,而不是把它看作是我应该采取什么步骤来做x?http://git-scm.com/book
最后,在SVN或GIT上标记或不标记它不会增加文件大小,系统会意识到代码是通用和重复的。

相关问题