使用 git 管理多个项目,这些项目相互构建并且可以独立使用



我正在计划一个开源项目,我想在GitHub上发布。我想创建几个相互扩展的项目。但是我希望可以选择更改应与其父项目合并的公共基类,但只有共享文件,没有通用文件的扩展名应该是独立的。

以下是我的三个示例项目:

项目A:

我想实现一个名为ObservableArray的有用类。该类将扩展一个 List,该列表通过接口观察其项目并将这些更改传播到寄存器侦听器。这对于像我的项目 B 这样的多个项目应该很有用。

项目B:

我想实现一个 SQlite 数据库扭曲器,它允许简单访问只是普通类的行列表。在项目 A 的帮助下,跟踪数据模型中的更改将很简单,这些数据模型可以简单地与 SQLite 数据库同步。

项目C:

这个项目应该采用数据库扭曲器并将其放入Android ContentProvider中,用于其他一些用例。

如您所见,所有三个项目都是相互构建的,但项目 A 或项目 B 除外,但到目前为止,用户可能不需要内容提供商的支持,我想将其用于独立项目。我认为让项目 C 的用户更新所有三个独立项目的开销太大了。所以我的想法是将一个项目分叉到另一个项目,以便每个项目都可以更新或如何在 GitHub 中调用它。

我的问题是:

  1. 是否可以分叉项目,以便可以在两个方向上更新基类?
  2. 假设我需要更新项目 A 的一个类,我需要执行哪些步骤来更新其他两个项目?
  3. 如何防止我在项目 A 中意外签入项目 C 的文件?我会使用不同的命名空间,所以我可以使用忽略列表。这会解决我的问题吗?

我知道这是安静的基本问题,我试图理解 git 的基础知识,GitHub 的分叉图让我认为这应该是可能的,但似乎这只有在您有多个帐户时才有效。请开导我!

听起来你正在寻找子模块。 子模块基本上允许您指向另一个 git 项目中的特定提交。 在您的示例中,您将执行以下操作:

  • 实施项目 A
  • git init项目B然后git submodule add /project/a/url/
  • git submodule init && git submodule update

此时,您将在项目 B 的子目录中看到项目 A 的代码,就好像您已将其git cloned到 Project B 的目录中一样。 但是,项目 B 的 git 存储库现在将包含一个 .gitmodules 文件,其中包含您在 git submodule add 中使用的 URL。 此外,现在,当您在项目 B 中执行git add project-a-directory而不是提交文件更改时,您将提交一个指向子模块中当前签出的 SHA id 的指针。

您应该阅读文档,子模块非常有用,但掌握窍门可能有点棘手。

  • 如果在项目 A 子模块中进行更改,则无法从项目 B 提交这些更改。 项目 A 子模块具有项目 A 的完整 git 存储库。 要提交更改,请提交它们并推送到项目 A 的存储库,然后提交指向项目 B 中新 SHA 的新指针。

  • 如果对项目 A 进行了所需的远程更改,则无法通过项目 B 获取它们。 首先cd子模块目录,获取更改并签出您现在希望项目 B 使用的提交。 然后cd ..到项目 B,并在项目 A 子模块中提交指向新 SHA ID 的指针。

最新更新