.gitignore per i progetti PhoneGap / Cordova 3.0 - cosa devo impegnare?


105

Ho appena provato a creare un nuovo progetto phonegap 3.0 ... Nota: sono nuovo in phonegap. Comunque, vedo che la cartella del progetto contiene:

  • .cordova
  • merges
  • platforms
  • plugins
  • www

E dopo aver provato phonegap local run androidvedo molti file binari / generati in platforms/android. Questo mi lascia a chiedermi, quali parti di questa struttura di cartelle dovrei aggiungere al mio repository git. Normalmente, ritengo che sia una pratica estremamente scarsa eseguire il commit di file binari. Quindi, io normalmente aggiungere modelli come bin/, obj/, *.o, *.pycecc per .gitignoreevitare di inquinare il mio repository git con le cose che serve solo a creare conflitti di unione.

Sicuramente, wwwdovrebbe essere aggiunto a git, ma per quanto riguarda le altre parti del progetto. In che misura sono prodotti del codice sorgente e in che misura sono la configurazione del progetto?

cosa fai? Certo, sono nuovo, quindi capisco a malapena cosa abbia senso qui ...


1
Non so di PhoneGap / Cordova ma, in caso di dubbio, commetti tutto. Puoi sempre rimuoverlo in seguito quando scopri che qualcosa era superfluo :)
Leif

Risposte:


43

La risposta dipende da quali piattaforme stai sviluppando l'app phongap e se stai seguendo la struttura di directory standard.

Se la struttura della directory del tuo progetto è standard, puoi iniziare da questo gitignore e modificarlo per le tue esigenze.

In linea di massima devi escludere tutti i file generati come le directory bin/e gen/. Se stai sviluppando una versione Android della tua app, dovresti escludere anche i file di build come *.apk.

Anche tutti i file generati nella androidsottodirectory dovrebbero essere esclusi:

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

1
Non importa quali piattaforme stai sviluppando. Non c'è nulla di male nell'ignorare le cose che si applicano solo alle piattaforme su cui non stai ancora sviluppando. Ha insinuato che sta usando la struttura di directory standard.
rjmunro


49

Espandendo la risposta di @Jake Moshenko:

Mi piace l'idea di omettere la platformsdirectory. In realtà, io sono sono in grado di escludere sia le pluginse platformsdirectory. Un buon punto di partenza per .gitignore:

platforms/
plugins/

Il problema con questo è che la copia pulita del repository deve essere inizializzata prima di poter effettivamente lavorare con esso. Può avere senso creare uno script di inizializzazione come:

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

Un avvertimento a questo approccio è che rende un po 'più difficile personalizzare il codice / la configurazione dell'applicazione specifica della piattaforma al di fuori di ciò che è supportato da phonegap / cordova (cioè supporto per l'orientamento dello schermo).

Aggiornamento: Bash Gist

Questa sintesi contiene uno script più completo per la gestione di un progetto che non esegue il commit delle directory pluginse platforms. Fornisce un meccanismo per copiare le icone e le immagini splashscreen da www alle directory della piattaforma (per iOS e Android), installare plugin e gestire file specifici della piattaforma che dovrebbero essere aggiunti al controllo della versione.

Aggiornamento: Grunt Gist

Ecco un altro succo che è un porting Grunt dello script bash sopra menzionato. (Grazie a @obie per aver suggerito grugnito).


2
Come dovrei gestire l'aggiunta di plug-in / codice nativo su misura o apportare modifiche ad AndroidManifest.xml per consentire lo sviluppo di plug-in utilizzando questo approccio? C'è da qualche altra parte in cui è possibile aggiungere modifiche ad AndroidManifest.xml?
obie

Vedi l'essenza collegata, specificamente qui . Sovrascrive / aggiunge qualsiasi file dalla platform-mergesdirectory. Ad esempio, potresti impegnarti platform-merges/android/AndroidManifest.xml. Questo approccio funziona bene per progetti semplici, ma potrebbe complicare le cose in progetti più grandi.
Jonathan Dixon

grazie per il vostro aiuto :) Ho finito per usare grugnito per fare la stessa cosa (con github.com/gruntjs/grunt-contrib-copy )
obie

3
Potresti evitare il passaggio con la creazione della cartella dei plugin e delle piattaforme aggiungendo un file .gitkeep in ognuno e inserendolo nel tuo .gitignore: piattaforme / *! Piattaforme / .gitkeep plugins / *! Plugins / .gitkeep
aharris88

1
@ aharris88 Buon punto, ma credo di averlo evitato per rendere più facile la pulizia del progetto. cioè rm -rf platforms plugins.
Jonathan Dixon

7

Quindi l'ho capito solo attraverso tentativi ed errori. La platformsdirectory può essere omessa se stai usando phonegap locale o build remota, poiché viene generata al volo. Tutte le altre cartelle, inclusa la cartella nascosta, .cordovasono obbligatorie.


4
Ciao, e se usassi un file jar di terze parti o un file sorgente Objective-C per personalizzare la build Android o iOS, ad esempio l'integrazione di Parse Notification. Ha sicuramente bisogno di scrivere un po 'di codice java, quindi come gestire il repository git? phonegap local build android sovrascriverà i miei file personalizzati?
EthanZ

Cordiali saluti per me, sembra che PhoneGap Build verrà .cordovacompilato senza la cartella: perché dici che è richiesto @Jake Moshenko?
Matty J

7
Questo suggerimento è del tutto errato. Non dovresti omettere la directory delle piattaforme perché alla fine dovrai aggiungere del codice e dei plugin specifici della piattaforma se stai facendo qualcosa di non banale. Spesso dovrai anche manipolare il manifest di Android e i file plist di iOS.
Daniel Williams

3
Direi che omettere le piattaforme è un buon inizio. Se sono presenti dipendenze, dovrebbero essere conservate altrove e copiate come passaggio di compilazione dopo l'aggiunta di una piattaforma.
tishma

Preferisco questa risposta.
Escludo

4

Volevo solo lasciare qui la mia esperienza con questo problema e l'approccio che abbiamo finalmente seguito.

Nel nostro progetto phonegap abbiamo iniziato a eseguire il commit di tutti i file meno la cartella / piattaforma utilizzando il file .gitignore. Abbiamo pensato in questo modo, quando lo sviluppatore ha clonato il repository l'unica azione rimasta da fare sarebbe stata eseguire:

phonegap / cordova aggiungi piattaforma

Ma non lo era. Una volta aggiunta la piattaforma e provato a compilare, è apparso un errore e l'app non è stata installata nel dispositivo.

Guardando i log, abbiamo riscontrato che questo errore era dovuto ai plugin. Quindi abbiamo deciso di reinstallare tutti i plugin che stavamo utilizzando nel progetto e voilà l'app è stata eseguita correttamente.

Quindi il mio consiglio è di salvare nel repository tutto il contenuto meno la piattaforma di cartelle e plugin. Crea e carica nel repository un file README con un elenco di plugin utilizzati nel progetto.

In questo modo, quando uno sviluppatore clona il repository, dovrà:

1.- Aggiungi le piattaforme: phonegap / cordova aggiungi la piattaforma "piattaforma"

2.- Aggiungi i plugin: phonegap / cordova plugin aggiungi "plugin"

Spero che questo ti aiuti!

Saluti.


1

Molte di queste cose sono vecchie e non si applicano all'ultima versione di Apache Cordova. Sto usando Apache Cordova 5.1.1 e questo .gitignore mi consente di personalizzare ancora con icone personalizzate ecc. Mentre blocco tutto ciò che non serve per la versione sia per Android che per IOS. Sì .gradle viene utilizzato quindi non rimuoverlo!

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

Perché dovresti includere la www/cartella lì dentro? Nella mia applicazione, questa era in realtà la maggior parte delle cose utili dalle vite dell'applicazione web.
vindia

2
@vindia Immagino che la mia lista possa essere un modello per far iniziare qualcuno. Pensavo che tutti gli hipster usassero la cartella www / come output volatile per il loro processo di creazione automatizzato. Colpa mia!
Helzgate

Escludo www/perché i contenuti generati da script di build personalizzati. Non vuoi davvero file sorgente lì dentro.
kim3er

0

Sebbene sia una preferenza in qualche modo personale, sono andato con questo (per un progetto solo per Android). Rimuovendo la maggior parte, ma mantenendo ciò che è personalizzato

ToonPlane/platforms/android/*
!ToonPlane/platforms/android/AndroidManifest.xml
ToonPlane/plugins/*
!ToonPlane/plugins/android.json
!ToonPlane/plugins/fetch.json
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.