IntelliJ + git +子模块 - >你把.iml放在哪里?

Mar*_*ini 6 git android intellij-idea git-submodules

请注意:不使用Gradle/Maven.

场景:

一个典型的Android应用程序,需要Facebook SDK,你有几个选择:

  1. 在你的磁盘中的某个位置克隆SDK,将/facebook-android-sdk/facebook(/myapp/facebook例如,库的Android src代码所在的位置)的内容复制到你的例子中,在IntelliJ中导入一个模块,将它指向这个新/myapp/facebook路径并在一天内调用它.IntelliJ将创建一个facebook.iml(并将修改您的project.properties和其他.idea相关文件以考虑这个新模块).然后,您可以将此新模块添加到存储库,并将其视为任何其他库.
  2. 在您的应用程序目录中克隆SDK,例如:/myapp/facebook-android-sdk/*并在IntelliJ中导入模块,将其指向此新路径并将其视为另一个git存储库(您甚至可以从Facebook获取新的更改,尽管有时这可能会破坏模块) .
  3. 创建一个指向Facebook SDK的github仓库的git子模块,在IntelliJ中导入指向子模块的模块,很可能是正确导入的/myapp/facebook-android-sdk/*.

在继续之前,让我们看看每个方面的一些特定方面:

  1. PROS:这是一个火灾,忘记和干净的方法,你甚至可以随意更改SDK,因为你只导入了库,你有源代码.缺点:保持最新的乏味.每次有新的FacebookSDK更新时,您必须手动更新外部克隆,复制SDK和/或重新添加模块(并确保工作正常!).如果你有局部变化,事情就会变得更难.
  2. PROS:比#1更容易更新,但你不能真正提交更改(除非你创建了一个fork),因为我们没有对FacebookSDK的写入权限.缺点:你的facebook.iml东西在git中总是" 脏 "的,因为你不能提交它(因为它是一个不同的回购).
  3. PROS:在技​​术方面最干净的方法,你通过使用子模块做"正确的事",让git指向正确的存储库并正确地对待它.缺点:子模块是......如果不小心处理,那就很精细了,但是,除了你的子模块是你可以控制的分支之外,它与#2规则一致,你不能改变FacebookSDK并提交它,所以这就离开了你facebook.iml当你将模块添加到你的项目时,IntelliJ创建的问题,在子模块目录周围漫游......这引出了我的问题......

如果您因为没有权限(例如FacebookSDK)而无法提交子模块,那么您可以在哪里(以及如何)放置IntelliJ放入每个新模块中的module.iml(本例中为facebook.iml),以便您的其他模块用户可以克隆你的仓库,做git submodule init和git submodule update,并没有得到典型的IntelliJ"问题加载模块"的错误.上述问题的解决方案在于每个新用户克隆,不得不对"从项目中删除facebook"说"是",然后再次添加/导入模块(依赖项,如果他们尊重名称,则为其他人正确保存)模块,这样很好).