使用git回购协议作为公共基础

使用git回购协议作为公共基础,git,Git,假设我有一些代码,它们构成了一些酷东西的基本框架。我把它放在一个repo中,我将调用cool app base 现在,我有一些很棒的应用程序的好主意。我希望他们使用酷酷的应用程序库,并从中构建。当然,我可以选择克隆和孤立,以及分叉和重命名等。为了举例说明,假设我为我想要的做了最好的事情,并创建了cool-app-1 我不打算从cool-app-1重新加入cool-app-base,所以两者都可以。但我确实希望能够将我对cool-app-base所做的任何更新带入cool-app-1 问题是,co

假设我有一些代码,它们构成了一些酷东西的基本框架。我把它放在一个repo中,我将调用
cool app base

现在,我有一些很棒的应用程序的好主意。我希望他们使用
酷酷的应用程序库
,并从中构建。当然,我可以选择
克隆
和孤立,以及
分叉
和重命名等。为了举例说明,假设我为我想要的做了最好的事情,并创建了
cool-app-1

我不打算从
cool-app-1
重新加入
cool-app-base
,所以两者都可以。但我确实希望能够将我对
cool-app-base
所做的任何更新带入
cool-app-1

问题是,
cool-app-1
不应该关心
cool-app-base
的历史。我想将这些更新视为压缩提交,这样更新可以有一条提交消息“update with latest
cool app base
”,并且可以完成。这使得
fork
不那么吸引人,但听起来我唯一的选择是手动将
cool-app-base
代码更改合并到
cool-app-1
,这样我就可以控制提交历史记录了

我的问题是:我怎样才能做得更好?我确信我可以使用一些时髦的
git合并
选项,但我还没有足够的经验来自信地探索它们

澄清:
酷应用程序库
不是一个库,而是一组配置文件。虽然它们当然可以单独分解和导入,但我的意图是将它们捆绑在一起。我希望将
cool-app-base
的文件作为
cool-app-1
的根目录,而不是嵌套在子目录中。我试图解决的实际问题是,每当我想启动一个新项目时,不需要重新创建我的包文件、目录结构和一组精心构建的脚本。如果我的配置文件在子目录中,我仍然需要创建它们的引用,在我只考虑更多的样板代码。


同时,我认为这个概念是语言不可知的,我在<代码> JavaScript < /C>中使用<代码>节点< /C> >和<代码> NPM 。p> 在我看来,您可以使用,make

cool-app-base
作为
cool-app-1
的子模块。然后,
cool-app-1
将在物理文件资源中包含子文件夹
cool-app-base
,并且不会干扰存储库的Git历史记录

Git使用子模块解决了这个问题。子模块允许您将一个Git存储库保留为另一个Git存储库的子目录。这使您可以将另一个存储库克隆到项目中,并使提交保持独立


我认为,您可以使用make
cool-app-base
作为
cool-app-1
的子模块。然后,
cool-app-1
将在物理文件资源中包含子文件夹
cool-app-base
,并且不会干扰存储库的Git历史记录

Git使用子模块解决了这个问题。子模块允许您将一个Git存储库保留为另一个Git存储库的子目录。这使您可以将另一个存储库克隆到项目中,并使提交保持独立


你没有提到你的编程语言。但大多数语言都带有某种包管理器:

  • JavaScript:npm
  • 爪哇:马文,格雷德尔
  • Python:pip
如果您的语言中有这样一个包管理器,请在应用程序项目中使用它来包括您的基础项目

如果不是,我建议用子模块代替。您可以将基本项目包含到应用程序项目的子目录中。这就像将一个提交的整个文件系统复制到另一个repo。您可以选择是否需要历史记录(
squash


稍后,您可以使用一个命令更新到新版本。

您没有提到您的编程语言。但大多数语言都带有某种包管理器:

  • JavaScript:npm
  • 爪哇:马文,格雷德尔
  • Python:pip
如果您的语言中有这样一个包管理器,请在应用程序项目中使用它来包括您的基础项目

如果不是,我建议用子模块代替。您可以将基本项目包含到应用程序项目的子目录中。这就像将一个提交的整个文件系统复制到另一个repo。您可以选择是否需要历史记录(
squash


稍后,您可以使用一个命令更新到新版本。

谢谢您的回答。我已经对我的问题做了一些澄清,希望能使我的目标更加清晰。谢谢你的回答。我已经对我的问题做了一些澄清,希望能使我的目标更加清晰。谢谢你的回答。我已经对我的问题做了一些澄清,希望能细化我试图完成的事情。@JIM01做
cool-app-base-v0.1
内部
cool-app-1
需要在发布
cool-app-base-v0.2
时更新?好问题。这就是我的想法。如果我调整
cool-app-base
,我可以更新
cool-app-1
以使用这些酷的新功能。这听起来像是一个打破变化,以级联成衍生产品的配方,但让我们假设对基础的调整将足够小,不必担心这一点。例如,可能只有优化或依赖项版本更新才算作非破坏性更改。@JIM01我仍然认为子模块是最简单的方法。将其作为子模块并不意味着您必须拉取更新-您指向cool app base文件夹的子模块如果需要,可以永远保持在某个版本,或者可以分支-但在任何情况下,从主分支进行“拉取”都将很容易,因为共享历史。一旦你翻阅了你所看到的历史