.gitignore用于PhoneGap / Cordova 3.0项目-我应该提交什么?


105

我只是尝试创建一个新的phonegap 3.0项目...注意:我是phonegap的新手。无论如何,我看到项目文件夹包含:

  • .cordova
  • merges
  • platforms
  • plugins
  • www

尝试过之后,phonegap local run android我在中看到了很多二进制/生成的文件platforms/android。这让我想知道,我应该将该文件夹结构的哪些部分添加到我的git存储库中。通常,我认为提交二进制文件是极差的做法。因此,我通常会添加模式,如bin/obj/*.o*.pyc等,以.gitignore避免污染我的git仓库的东西,只有用于创建合并冲突。

当然,www应该将其添加到git中,但是该项目的其他部分呢?它们将源代码的产品扩展到什么范围,并将它们的项目配置扩展到什么范围?

你是做什么?当然,我是新来的,所以我几乎不明白在这里有意义的事情...


1
我不了解PhoneGap / Cordova,但是有疑问时,只需提交所有内容即可。当您得知某些东西多余时,您可以随时将其删除:)
Leif 2013年

Answers:


43

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

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

根据经验,您必须排除所有生成的文件,例如bin/gen/目录。如果您正在开发Android版本的应用程序,则也应排除构建文件*.apk

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

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

1
开发什么平台都没有关系。忽略仅适用于您尚未开发的平台的东西并没有什么害处。他暗示他正在使用标准目录结构。
rjmunro 2013年


49

扩展@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要点

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

更新:咕unt声

这是上述bash脚本的Grunt端口的另一个要点。(感谢@obie建议咕gr声)。


2
如何使用这种方法来添加定制的插件/本机代码或进行AndroidManifest.xml更改以适应插件开发?还有其他地方可以添加AndroidManifest.xml更改吗?
obie

请参阅链接的要点,特别是在这里。它会覆盖/添加platform-merges目录中的所有文件。例如,您可以提交platform-merges/android/AndroidManifest.xml。这种方法适用于简单项目,但会使大型项目复杂化。
乔纳森·迪克森

感谢您的帮助:)最后我用咕噜做同样的事(github.com/gruntjs/grunt-contrib-copy
奥比

3
您可以通过在每个文件夹中添加一个.gitkeep文件并将其放入.gitignore文件来避免创建plugins和platform文件夹的步骤:platform / *!platforms / .gitkeep plugins / *!plugins / .gitkeep
aharris88

1
@ aharris88好点了,但是我相信我避免了这一点,以使清理项目更容易。即rm -rf platforms plugins
乔纳森·迪克森

7

所以我只是通过反复试验弄清楚了这一点。platforms如果您正在使用phonegap本地或远程构建,则该目录可以省略,因为它是动态生成的。所有其他文件夹,包括隐藏的文件夹.cordova都是必需的。


4
嗨,如果我使用一些第三方jar文件或Objective-C源文件来自定义android或ios构建,例如Parse Notification集成,该怎么办?它肯定需要编写一些Java代码,然后如何管理git存储库?phonegap本地构建android会覆盖我的自定义文件吗?
EthanZ 2013年

仅供参考,对于我来说,似乎PhoneGap Build将在不包含.cordova文件夹的情况下进行构建-为什么您说@Jake Moshenko需要它?
Matty J 2014年

7
这个建议是完全错误的。您不应该忽略平台目录,因为如果您做不重要的事情,最终将需要添加一些平台特定的代码和插件。您还经常需要操纵android清单和ios plists。
Daniel Williams

3
我会说省略平台是一个好的开始。如果存在依赖关系,则应将其保留在其他位置,并在添加平台后将其复制为构建步骤。
tishma 2014年

我更喜欢这个答案。我只排除了平台目录
realtebo,

4

我只是想在这里留下我在此问题上的经验以及我们最终遵循的方法。

在我们的phonegap项目中,我们开始使用.gitignore文件来提交所有文件(不包括文件夹/ p​​latform)。我们以这种方式思考,当开发人员克隆存储库时,剩下要做的唯一动作就是执行:

phonegap / cordova添加平台

但事实并非如此。添加平台并尝试编译后,就会出现错误,并且该应用未安装在设备中。

查看日志,我们发现此错误是由于插件引起的。因此,我们决定重新安装该项目中使用的所有插件,并确保该应用正确运行。

因此,我的建议是将所有内容保存在存储库中,而不要保存文件夹平台和插件。创建一个README文件并将其上传到资源库,其中包含该项目中使用的插件列表。

这样,当开发人员克隆存储库时,他/她将必须:

1.-添加平台:phonegap / cordova添加平台“平台”

2.-添加插件:phonegap / cordova插件添加“插件”

希望这可以帮助!

问候。


1

这些东西很多都是旧的,并不能真正应用于最新版本的Apache Cordova。我正在使用Apache Cordova 5.1.1,这个.gitignore允许我仍然使用自定义图标等进行自定义,同时阻止所有我们不需要针对Android和IOS进行版本控制的内容。是的,使用了.gradle,所以不要删除它!

www/
.gradle/
build/
.tmp/
.temp/
coverage/
*.log
node_modules/
bower_components/

为什么要在其中包含www/文件夹?在我的应用程序中,这实际上是Web应用程序生命中最有用的东西。
vindia

2
@vindia我想我的清单可以作为入门的模板。我认为所有时髦人士都将www /文件夹用作其自动构建过程的易失性输出。我的错!
Helzgate

我排除www/由于自定义构建脚本生成的内容。您实际上并不需要源文件。
kim3er 2016年

0

尽管这是个人喜好,但我还是这样做了(仅针对android项目)。删除大部分内容,但保留自定义内容

ToonPlane/platforms/android/*
!ToonPlane/platforms/android/AndroidManifest.xml
ToonPlane/plugins/*
!ToonPlane/plugins/android.json
!ToonPlane/plugins/fetch.json
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.