我正在计划一个开源项目,我想将其发布在 GitHub 上。我想创建几个相互扩展的项目。但我想要更改公共基类的选项,该基类应与其父项目合并,但只有共享文件,没有公共文件的扩展名应该是独立的。
这是我的三个示例项目:
我想实现一个有用的类 ObservableArray。该类将扩展一个列表,该列表通过接口观察其项目并将这些更改传播到寄存器侦听器。这对于像我的项目 B 这样的多个项目应该很有用。
我想实现一个 SQlite 数据库扭曲器,它允许简单地访问只是普通类的行列表。在项目 A 的帮助下,可以轻松跟踪数据模型中的更改,并可以轻松地与 SQLite 数据库同步。
该项目应该采用数据库扭曲器并将其放入 Android ContentProvider 中以用于其他一些用例。
正如您所看到的,所有三个项目都是相互构建的,但项目 A 或项目 B 除外,但用户可能不需要 ContentProviders 的支持,到目前为止我想将其制作为独立的项目。我认为让项目 C 的user 更新所有三个独立项目的开销太大了。所以我的想法是分叉一个项目另一个项目,以便每个项目都可以更新或者在 GitHub 中如何调用它。
我知道这是一些安静的基本问题,我试图了解 git 的基础知识,并且来自 GitHub 的分叉图让我认为这应该是可能的,但似乎这只在您拥有多个帐户的情况下才有效。请赐教!
听起来您正在寻找子模块。子模块基本上允许您指向另一个 git 项目中的特定提交。在您的示例中,您会执行以下操作:
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
中使用的 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 的指针。您还可以使用其他应用程序来管理多个项目。以下是如何使用看板工具执行此操作:https://kanbantool.com/blog/mastering-project-portfolios-through-kanban-board-swimlanes