3

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

这是我的三个示例项目:

项目一:

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

项目B:

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

项目 C:

该项目应该使用数据库扭曲器并将其放入 Android ContentProvider 以用于其他一些用例。

正如您所看到的,所有三个项目都建立在彼此之上,但项目 A 或项目 B 但用户可能不需要 ContentProviders 的支持,到目前为止我想将其用于独立项目。我认为让 C 项目的用户更新所有三个独立项目的开销太大。所以我的想法是将一个项目分叉到另一个项目,以便每个项目都可以更新或如何在 GitHub 中调用它。

我的问题是:

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

我知道这是一些安静的基本问题,我试图了解 git 的基础知识,来自 GitHub 的 fork 图让我认为这应该是可能的,但似乎这只有在你有多个帐户时才有效。请赐教!

4

1 回答 1

2

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

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

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

您应该阅读文档,子模块非常有用,但可能有点难以掌握。

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

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

于 2013-09-21T16:05:57.310 回答