1

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

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

我还注意到在 Eclipse 包资源管理器中,库项目根在括号内有一个提交哈希(例如[MyLibraryName 0123ABC])。这大概意味着库克隆来自某个提交点,我知道我可以使用git submodule foreach git pull.

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

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

4

1 回答 1

0

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

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

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

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

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

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

任何比这更好的建议(或对我所说的任何内容的更正)将不胜感激 - 但现在这是我自己对这个问题的回答。

于 2013-08-02T22:13:04.730 回答