在git项目中创建git项目(没有子模块)

时间:2014-08-07 19:24:30

标签: git versioning

我正在使用git而我正在为一个嵌入式项目的库工作。该库也可供其他项目使用,因此我决定创建一个新项目,并通过git的子模块功能将lib链接到我的主项目。 到目前为止没问题。

但是,由于这是一个嵌入式项目,我必须添加其他代码,如硬件初始化和系统计时器。但是,这些东西不应该在库的项目中,因为它不是运行lib所必需的,只是用于开发它。让我们称这个东西为开发工具。

所以,这意味着我的实际lib文件夹是一个git项目INSIDE一个更大的项目,即开发工具。 看起来像:

/ development harness root
|-- .git
|-- makefile
|-- main.c
|-- additional_stuff.c
|-- lib folder (can be used from someone else as submodule)
         |-- .git
         |-- lib.c
         |-- lib.h

所以,"内部项目"可以通过子模块功能由其他外部项目使用。 外部项目(开发工具)将帮助我开发我的lib,构建它并在硬件上运行它。

但是,我的问题是:如何创建这样的结构? 如何告诉外部项目有一个内部项目,不应该跟踪其单个文件? 我只是尝试了#git init"在我的lib文件夹中,这确实会创建一个内部项目,但外部项目也会跟踪这些文件。 我猜,.gitignore在这个地方错了。

我也无法将内部项目创建为子模块,因为此项目目前不在任何地方。但是" git submodule add"确实需要存储库/现有项目的路径。

我能想到的一个解决方案是这样的:

/ development harness root
|-- .git
|-- makefile
|-- main.c
|-- additional_stuff.c
|-- lib folder (via submodule feature)
     |-- (all stuff here is pulled from lib root)

/ lib root
|-- .git
|-- lib.c
|-- lib.h

我想这可行。 但是,对我而言,这感觉是错误的。这将给我另一个顶级项目"。如果我为有时可能重复使用的所有东西做这个,我会有很多项目...... 此外,对我来说,这甚至不是一个真正的项目,因为它不是构建和可运行的。

那么,有没有办法实现像我的第一个例子中的结构?

1 个答案:

答案 0 :(得分:0)

如何为您的库创建一个完全独立的仓库,并将其用作主项目中的库?

这样,在您的lib repo中,您可以拥有

  • 您的图书馆代码
  • 您的开发工具(它不会打扰您的客户,因为他们可以使用您的库,例如.so,即无需操作代码)

在您的主仓库中,您只需要在构建文件中引用此库。

如果您计划经常同时更改库和主项目,那么它可能不如使用子模块那么实用。但是如果你有一个干净地解耦的代码,它应该是,imo,是你的方式。