PhoneGap/Cordova 3.0项目的.gitignore文件 - 我应该提交什么?

105
我刚刚尝试创建了一个新的phonegap 3.0项目...注意:我是初学者。 无论如何,我看到项目文件夹包含:
  • .cordova
  • merges
  • platforms
  • plugins
  • www

并且尝试过phonegap local run android后,我发现在platforms/android中有很多二进制/生成的文件。 这让我想知道,我应该将这个文件夹结构的哪些部分添加到我的git存储库中。 通常情况下,我会认为提交二进制文件是非常不好的做法。 因此,我通常会将像bin/obj/*.o*.pyc等模式添加到.gitignore中,以避免使用只会导致合并冲突的东西来污染我的git存储库。

当然,www应该添加到git中,但是项目的其他部分呢?它们在多大程度上是源代码的产品,又在多大程度上是项目配置?

你会怎么做?尽管我是新手,所以我几乎不理解这里是什么意思...


1
我不了解PhoneGap/Cordova,但是当你有疑问时,最好将所有内容都提交。当你发现某些内容是多余的时,你总是可以稍后再删除它 :) - leifericf
6个回答

52

对@Jake Moshenko答案的进一步扩展:

我喜欢省略platforms目录的想法。事实上,我能够排除pluginsplatforms目录。一个很好的.gitignore起点:

扩展@Jake Moshenko的回答:

我喜欢省略platforms目录的想法。实际上,我可以同时排除pluginsplatforms目录。一个好的.gitignore起点:

platforms/
plugins/

问题在于,在实际使用之前,必须初始化清洁的存储库副本。创建一个初始化脚本可能是有意义的,例如:

#!/bin/bash
textReset=$(tput sgr0)
textGreen=$(tput setaf 2)
message_info () {
  echo "${textGreen}[my-app]${textReset} $1"
}

message_info "Creating necessary directories..."
mkdir plugins
mkdir platforms

message_info "Adding platforms..."
# If using cordova, change to: cordova platform add android
phonegap build android
phonegap build ios

message_info "Adding plugins..."
# If using cordova, change to: cordova plugin add
phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
该方法的一个警告是,它使得在phonegap/cordova所支持的范围之外自定义平台特定的应用程序代码/配置(例如屏幕方向支持)变得更加具有挑战性。

更新:Bash Gist

这个Gist包含了一个更完整的脚本,用于处理不提交pluginsplatforms目录的项目。它提供了一个机制,将图标和启动画面图片从www复制到平台目录中(适用于iOS和Android),安装插件,并处理应添加到版本控制的平台特定文件。

更新:Grunt Gist

这是另一个Gist,是上述bash脚本的Grunt端口。(感谢@obie建议使用grunt)。


2
我该如何处理使用此方法添加定制插件/本地代码或进行AndroidManifest.xml更改以适应插件开发?是否还有其他地方可以添加AndroidManifest.xml更改? - obie
谢谢你的帮助 :) 我最终使用Grunt来完成同样的事情(使用https://github.com/gruntjs/grunt-contrib-copy) - obie
我之前没有考虑过使用Grunt,但肯定会研究一下的。 - Jonathan Dixon
3
通过在每个文件夹中添加.gitkeep文件并将其放入.gitignore文件中,您可以避免创建插件和平台文件夹的步骤:platforms/* !platforms/.gitkeep plugins/* !plugins/.gitkeep这样做不会改变原始意思,但会使内容更加通俗易懂。 - aharris88
1
@aharris88 很好的观点,但我认为我避免了这个问题,以便更容易地清理项目。即 rm -rf platforms plugins - Jonathan Dixon
显示剩余3条评论

43

答案取决于您正在开发 Phonegap 应用的平台以及是否遵循标准目录结构。

如果您的项目目录结构是标准的,那么您可以从此 gitignore 开始,并根据您的需求进行修改。

一般来说,您需要排除所有生成的文件,例如 bin/gen/ 目录。如果您正在为应用程序开发 Android 版本,则还应该排除构建文件,例如 *.apk

所有在 android 子目录中生成的文件也应该被排除:

Android/bin/
Android/gen/
Android/assets/

1
无论你正在开发什么平台,忽略那些只适用于你尚未开发的平台的事情是没有坏处的。他暗示他正在使用标准的目录结构。 - rjmunro
我要不要厚颜无耻地为我的 Cordova gitignore 做个广告: https://gist.github.com/elliot-labs/c92b3e52053906816074170ada511962 - Elliot Huffman

7
所以我通过试错找出了这个问题。如果使用phonegap本地或远程构建,则可以省略platforms目录,因为它是即时生成的。其他所有文件夹,包括隐藏文件夹.cordova都是必需的。

4
你好,如果我使用第三方的JAR文件或Objective-C源代码来定制Android或iOS构建,例如Parse通知集成。这肯定需要编写一些Java代码,那么如何管理Git仓库?PhoneGap本地构建Android是否会覆盖我定制的文件? - EthanZ
对我来说,似乎PhoneGap Build可以在没有.cordova文件夹的情况下构建 - 为什么你说它是必需的@Jake Moshenko? - Matty J
7
这个建议是完全错误的。你不应该省略platforms目录,因为如果你做任何非常规操作,最终你会需要添加一些特定平台的代码和插件。你也经常需要操作Android清单文件和iOS的plist文件。 - Daniel Williams
3
我会尽力进行翻译,请问您需要翻译的内容是:“I would say omitting platforms is a good start. If there are dependencies, they should be kept somewhere else, and copied as a build step after adding a platform.”? - tishma
我更喜欢这个答案。我只是排除平台目录。 - realtebo

4

我想在这里分享一下关于这个问题的经验以及我们最终采取的方法。

在我们的 phonegap 项目中,我们使用 .gitignore 文件来提交除了 /platform 文件夹以外的所有文件。我们认为这样做,当开发者克隆仓库时,唯一需要执行的操作就是执行:

phonegap/cordova add platform

但实际情况并非如此。一旦添加了平台并尝试编译,就会出现错误,并且应用程序无法安装到设备上。

查看日志,我们发现这个错误是由插件引起的。因此,我们决定重新安装项目中使用的所有插件,结果应用程序成功运行了。

所以我的建议是将除了 platform 和 plugins 文件夹以外的所有内容保存在仓库中。创建并上传一个包含项目中使用的插件列表的 README 文件。

这样,当开发者克隆仓库时,他/她需要执行以下操作:

1.- 添加平台:phonegap/cordova add platform "platform"

2.- 添加插件:phonegap/cordova plugin add "plugin"

希望这能有所帮助!

祝好!


1
很多内容已经过时,不适用于最新版本的Apache Cordova。我正在使用Apache Cordova 5.1.1,这个.gitignore文件允许我仍然可以自定义图标等内容,同时阻止我们不需要为Android和IOS版本控制的所有内容。是的,.gradle被使用了,所以不要删除它!
www/
.gradle/
build/
.tmp/
.temp/
coverage/
*.log
node_modules/
bower_components/

为什么要包含 www/ 文件夹呢?在我的应用程序中,这实际上是网络应用程序中大部分有用的东西所在的地方。 - vindia
2
@vindia 我猜我的列表可以作为某人入门的模板。我以为所有的时髦人都将www/文件夹用作自动构建过程的不稳定输出。我的错! - Post Impatica
我排除 www/ 目录,因为其中的内容是由自定义构建脚本生成的。你不会真的想在那里放源文件。 - kim3er

0

虽然这有点个人喜好,但我选择了这个(针对仅限 Android 的项目)。删除大部分内容,但保留自定义的内容。

ToonPlane/platforms/android/*
!ToonPlane/platforms/android/AndroidManifest.xml
ToonPlane/plugins/*
!ToonPlane/plugins/android.json
!ToonPlane/plugins/fetch.json

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接