开发一个Git库项目,它也是另一个项目的子模块

时间:2013-08-02 16:50:58

标签: android git git-submodules

我正在开发一个Android应用程序,它使用了我自己的独立库项目。这两个项目存储在单独的Git存储库中。应用程序项目通过.gitmodules文件引用库项目。

我现在正在尝试在新机器上同时处理这两个项目(应用程序和库)。我克隆了应用程序项目,这也导致库项目被自动克隆到我的〜/ git /目录中。到现在为止还挺好。

我还注意到在Eclipse Package Explorer中,库项目root在括号内有一个提交哈希(例如[MyLibraryName 0123ABC])。这可能意味着库克隆来自某个提交点,我知道我可以使用git submodule foreach git pull更新它(即引入此库的最新提交)。

问题是,现在继续单独开发图书馆项目的最佳方式是什么?我尝试修改文件并暂存它,但是当使用Team-> commit时,对话框没有列出修改后的文件。我假设这可能与它作为一个子模块,指向一个特定的提交有关。

我是否应该再次克隆我的库项目,完全单独拆分到不同的子目录中,并作为单独的项目导入Eclipse,以便我在该库上工作?

1 个答案:

答案 0 :(得分:0)

阅读了各种其他SO问题后,似乎没有优雅的解决方案。我最终采取的解决这个问题的步骤是:

  • 假设尚未这样做,请克隆使用子模块的应用程序存储库。将所有项目导入Eclipse工作区,包括子模块存储库(或存储库)。请注意,子模块存储库是主应用程序存储库中的存储库,并且它不在特定分支上;它是对特定提交(分离头)的引用。

  • 在Package Explorer中,重命名导入的子模块项目。我给它起了一个与应用程序repo相关的名称。例如,对于名为ABCD的应用程序项目,将其从SomeLibrary重命名为SomeLibrary_ABCD。

  • 接下来,将库与其自己的Git存储库分开克隆。现在,重命名子模块项目的重点是,现在可以从库存储库的独立克隆中导入Eclipse项目,而不会给出“部分或全部项目无法导入,因为它们已存在于工作空间中”错误

完成此操作后,我们的SomeLibrary_ABCD项目不在分支上,而是指向特定的提交,并且是项目ABCD的子模块。该子模块使用git submodule foreach git pull更新。然后,我们有一个项目SomeLibrary,它位于一个分支(例如master)上。

我计划的工作流程是在我想在库上进行开发时,将应用程序项目本地切换到指向库的“独立”项目而不是子模块版本。然后我将更改提交到SomeLibrary。

任何比这更好的建议(或对我所说的任何内容的更正)都会受到赞赏 - 但是现在这是我自己对这个问题的回答。