.gitignore para proyectos PhoneGap / Cordova 3.0: ¿qué debo comprometer?


105

Intenté crear un nuevo proyecto phonegap 3.0 ... Nota: Soy nuevo en phonegap. De todos modos, veo que la carpeta del proyecto contiene:

  • .cordova
  • merges
  • platforms
  • plugins
  • www

Y después de haberlo intentado phonegap local run android, veo muchos archivos binarios / generados en formato platforms/android. Esto me deja preguntándome qué partes de esta estructura de carpetas debo agregar a mi repositorio de git. Normalmente, consideraría una práctica extremadamente deficiente confirmar archivos binarios. Por lo tanto, normalmente agregaría patrones comobin/ , obj/, *.o, *.pycetc, para .gitignoreevitar contaminar mi repositorio git con cosas que sólo sirve para crear conflictos de fusión.

Seguramente, wwwdebería agregarse a git, pero ¿qué pasa con las otras partes del proyecto? ¿En qué medida son productos del código fuente y en qué medida son la configuración del proyecto?

¿Qué haces? De acuerdo, soy nuevo, así que apenas entiendo lo que tiene sentido aquí ...


1
No sé sobre PhoneGap / Cordova pero, en caso de duda, confíe todo. Siempre puede eliminarlo más tarde cuando sepa que algo era superfluo :)
Leif

Respuestas:


43

La respuesta depende de en qué plataformas esté desarrollando la aplicación phongap y si está siguiendo la estructura de directorios estándar.

Si la estructura del directorio de su proyecto es estándar, entonces puede comenzar desde este gitignore y modificarlo según sus necesidades.

Como regla general, debe excluir todos los archivos generados como los directorios bin/y gen/. Si está desarrollando una versión para Android de su aplicación, también debería excluir los archivos de compilación como *.apk.

Todos los archivos generados en el androidsubdirectorio también deben excluirse:

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

1
No importa qué plataformas esté desarrollando. No hay nada de malo en ignorar las cosas que solo se aplican a las plataformas en las que aún no está desarrollando. Ha dado a entender que está utilizando la estructura de directorios estándar.
rjmunro


49

Ampliando la respuesta de @Jake Moshenko:

Me gusta la idea de omitir el platformsdirectorio. De hecho, puedo excluir los directorios pluginsy platforms. Un buen punto de partida para .gitignore:

platforms/
plugins/

El problema con esto es que se debe inicializar una copia limpia del repositorio antes de poder trabajar con él. Puede tener sentido crear un script de inicio como:

#!/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

Una advertencia a este enfoque es que hace que sea un poco más desafiante personalizar el código / configuración de la aplicación específica de la plataforma fuera de lo que admite phonegap / cordova (es decir, soporte de orientación de pantalla).

Actualización: Bash Gist

Esta esencia contiene un script más completo para manejar un proyecto que no compromete los directorios pluginsy platforms. Proporciona un mecanismo para copiar los íconos y las imágenes de la pantalla de presentación de www a los directorios de la plataforma (para iOS y Android), instalar complementos y manejar archivos específicos de la plataforma que deben agregarse al control de versiones.

Actualización: Grunt Gist

Aquí hay otra esencia que es una adaptación de Grunt del script bash mencionado anteriormente. (Gracias a @obie por sugerir gruñido).


2
¿Cómo lidiaría con agregar complementos personalizados / código nativo o hacer cambios en AndroidManifest.xml para adaptarse al desarrollo de complementos usando este enfoque? ¿Hay algún otro lugar donde se puedan agregar los cambios de AndroidManifest.xml?
obie

Vea la esencia vinculada, específicamente aquí . Sobrescribe / agrega cualquier archivo del platform-mergesdirectorio. Por ejemplo, podría comprometerse platform-merges/android/AndroidManifest.xml. Este enfoque funciona bien para proyectos simples, pero podría complicar las cosas en proyectos más grandes.
Jonathan Dixon

gracias por su ayuda :) Terminé usando grunt para hacer lo mismo (con github.com/gruntjs/grunt-contrib-copy )
obie

3
Puede evitar el paso de crear la carpeta de complementos y plataformas agregando un archivo .gitkeep en cada uno y colocándolo en su .gitignore: plataformas / *! Plataformas / .gitkeep complementos / *! Plugins / .gitkeep
aharris88

1
@ aharris88 Buen punto, pero creo que lo evité para facilitar la limpieza del proyecto. es decir rm -rf platforms plugins.
Jonathan Dixon

7

Así que descubrí esto a través de prueba y error. El platformsdirectorio se puede omitir si está utilizando la compilación local o remota de phonegap, ya que se genera sobre la marcha. Todas las demás carpetas, incluida la carpeta oculta, .cordovason necesarias.


4
Hola Definitivamente es necesario escribir un código java, entonces, ¿cómo administrar el repositorio de git? ¿Phonegap local build android sobrescribirá mis archivos personalizados?
EthanZ

FYI para mí, parece que PhoneGap Build se compilará sin la .cordovacarpeta, ¿por qué dice que es necesario @Jake Moshenko?
Matty J

7
Esta sugerencia es completamente incorrecta. No debe omitir el directorio de plataformas porque eventualmente necesitará agregar algún código y complementos específicos de la plataforma si está haciendo algo que no sea trivial. A menudo, también necesitará manipular el manifiesto de Android y las listas de ios.
Daniel Williams

3
Yo diría que omitir plataformas es un buen comienzo. Si hay dependencias, deben guardarse en otro lugar y copiarse como paso de compilación después de agregar una plataforma.
tishma

Prefiero esta respuesta. Estoy excluyendo solo el directorio de plataformas
realtebo

4

Solo quería dejar aquí mi experiencia con este tema y el enfoque que finalmente seguimos.

En nuestro proyecto phonegap comenzamos a enviar todos los archivos menos la carpeta / plataforma usando el archivo .gitignore. Pensamos de esta manera, cuando el desarrollador clonó el repositorio, la única acción que quedaba por hacer sería ejecutar:

phonegap / cordova agregar plataforma

Pero no fue así. Una vez que se agregó la plataforma e intentamos compilar, apareció un error y la aplicación no se instaló en el dispositivo.

Mirando los registros, obtuvimos algunos resultados de que este error se debía a los complementos. Entonces decidimos reinstalar todos los complementos que estábamos usando en el proyecto y voilá la aplicación se ejecutará correctamente.

Entonces, mi consejo es guardar en el repositorio todo el contenido menos la plataforma de carpetas y los complementos. Cree y cargue en el repositorio un archivo README con una lista de complementos utilizados en el proyecto.

De esta forma, cuando un desarrollador clone el repositorio, deberá:

1.- Agregar las plataformas: phonegap / cordova agregar plataforma "plataforma"

2.- Agrega los complementos: phonegap / cordova plugin add "plugin"

¡Espero que esto ayude!

Saludos.


1

Muchas de estas cosas son antiguas y realmente no se aplican a la última versión de Apache Cordova. Estoy usando Apache Cordova 5.1.1 y este .gitignore me permite personalizar con íconos personalizados, etc., mientras bloqueamos todas las cosas que no necesitamos para la versión tanto para Android como para IOS. Sí .gradle se usa, ¡así que no lo elimines!

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

¿Por qué incluirías la www/carpeta ahí? En mi aplicación, eso era realmente la mayoría de las cosas útiles de la vida de las aplicaciones web.
vindia

2
@vindia Supongo que mi lista puede ser una plantilla para que alguien comience. Pensé que todos los hipsters usaban la carpeta www / como una salida volátil para su proceso de compilación automatizado. ¡Culpa mía!
Helzgate

Los excluyo www/porque los contenidos generados por scripts de compilación personalizados. Realmente no desea archivos de origen allí.
kim3er

0

Si bien es una preferencia algo personal, elegí esto (para un proyecto solo para Android). Eliminando la mayoría, pero manteniendo lo personalizado

ToonPlane/platforms/android/*
!ToonPlane/platforms/android/AndroidManifest.xml
ToonPlane/plugins/*
!ToonPlane/plugins/android.json
!ToonPlane/plugins/fetch.json
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.