.gitignore para projetos PhoneGap / Cordova 3.0 - o que devo comprometer?

105

Acabei de tentar criar um novo projeto do Phonegap 3.0 ... Nota: Sou novo no Phonegap. De qualquer forma, vejo que a pasta do projeto contém:

  • .cordova
  • merges
  • platforms
  • plugins
  • www

E depois de tentar phonegap local run android, vejo muitos arquivos binários / gerados no platforms/android. Isso me deixa pensando, quais partes dessa estrutura de pasta devo adicionar ao meu repositório git. Normalmente, eu consideraria uma prática extremamente pobre comprometer arquivos binários. Por isso, eu normalmente adicionar padrões como bin/, obj/, *.o, *.pycetc, para .gitignoreevitar poluir meu repositório git com coisas que só serve para criar conflitos de mesclagem.

Certamente, wwwdeve ser adicionado ao git, mas e as outras partes do projeto. Até que ponto eles são produtos do código-fonte e até que ponto são configuração de projeto?

O que você faz? Admito que sou novo, então mal entendo o que faz sentido aqui ...

Jonasfj
fonte
1
Não conheço o PhoneGap / Cordova mas, na dúvida, me comprometa tudo. Você sempre pode removê-lo mais tarde, quando descobrir que algo era supérfluo :)
Leif

Respostas:

43

A resposta depende das plataformas em que você está desenvolvendo o aplicativo phongap e se está seguindo a estrutura de diretório padrão.

Se a estrutura de diretório do seu projeto for padrão, você pode começar a partir deste gitignore e modificá-lo de acordo com suas necessidades.

Como regra geral, você deve excluir todos os arquivos gerados, como os diretórios bin/e gen/. Se você estiver desenvolvendo uma versão Android do seu aplicativo, você também deve excluir os arquivos de compilação *.apk.

Todos os arquivos gerados no androidsubdiretório também devem ser excluídos:

Android/bin/
Android/gen/
Android/assets/
Atropo
fonte
1
Não importa quais plataformas você está desenvolvendo. Não há mal nenhum em ignorar coisas que se aplicam apenas a plataformas nas quais você ainda não está desenvolvendo. Ele deu a entender que está usando a estrutura de diretório padrão.
rjmunro
Plugue sem vergonha para o meu Cordova gitignore: gist.github.com/elliot-labs/c92b3e52053906816074170ada511962
Elliot Labs LLC
49

Expandindo a resposta de @Jake Moshenko:

Gosto da ideia de omitir o platformsdiretório. Na verdade, posso excluir os diretórios pluginse platforms. Um bom ponto de partida para .gitignore:

platforms/
plugins/

O problema com isso é que uma cópia limpa do repo deve ser inicializada antes que você possa realmente trabalhar com ele. Pode fazer sentido criar um script init 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

Uma ressalva a essa abordagem é que ela torna um pouco mais desafiador personalizar o código / configuração do aplicativo específico da plataforma fora do que é compatível com o phonegap / cordova (ou seja, suporte para orientação de tela).

Atualização: Bash Gist

Esta essência contém um script mais completo para lidar com um projeto que não confirma os diretórios pluginse platforms. Ele fornece um mecanismo para copiar os ícones e imagens da tela inicial de www para os diretórios da plataforma (para iOS e Android), instalar plug-ins e manipular arquivos específicos da plataforma que devem ser adicionados ao controle de versão.

Atualização: Grunt Gist

Aqui está outra essência que é uma porta Grunt do script bash mencionado acima. (Obrigado a @obie por sugerir grunhido).

Jonathan Dixon
fonte
2
Como eu lidaria com a adição de plug-ins personalizados / código nativo ou fazendo alterações no AndroidManifest.xml para acomodar o desenvolvimento de plug-ins usando essa abordagem? Existe algum outro lugar onde as alterações do AndroidManifest.xml podem ser adicionadas?
obie
Veja a essência do link , especificamente aqui . Ele sobrescreve / adiciona quaisquer arquivos do platform-mergesdiretório. Por exemplo, você pode se comprometer platform-merges/android/AndroidManifest.xml. Essa abordagem funciona bem para projetos simples, mas pode complicar as coisas em projetos maiores.
Jonathan Dixon
obrigado por sua ajuda :) Acabei usando o grunt para fazer a mesma coisa (com github.com/gruntjs/grunt-contrib-copy )
obie
3
Você poderia evitar a etapa de criação da pasta de plug-ins e plataformas adicionando um arquivo .gitkeep em cada um e colocando-o em seu .gitignore: plataformas / *! Plataformas / .gitkeep plugins / *! Plugins / .gitkeep
aharris88
1
@ aharris88 Bom argumento, mas acredito que evitei isso para facilitar a limpeza do projeto. ie rm -rf platforms plugins.
Jonathan Dixon,
7

Então, descobri isso por tentativa e erro. O platformsdiretório pode ser omitido se você estiver usando a compilação local ou remota do phonegap, já que é gerado instantaneamente. Todas as outras pastas, incluindo a pasta oculta, .cordovasão necessárias.

Jake Moshenko
fonte
4
Olá, e se eu usasse um arquivo jar de terceiros ou um arquivo de origem object-c para personalizar a compilação do Android ou ios, por exemplo, integração de notificação do Parse. Definitivamente, é necessário escrever algum código java, então como gerenciar o repositório git? O phonegap local build android substituirá meus arquivos personalizados?
EthanZ
Para mim, parece que o PhoneGap Build será compilado sem a .cordovapasta - por que você diz que é necessário @Jake Moshenko?
Matty J
7
Esta sugestão é totalmente incorreta. Você não deve omitir o diretório de plataformas porque, eventualmente, precisará adicionar algum código e plug-ins específicos da plataforma se estiver fazendo algo não trivial. Freqüentemente, você também precisará manipular o manifesto do Android e as plistas do ios.
Daniel Williams
3
Eu diria que omitir plataformas é um bom começo. Se houver dependências, elas devem ser mantidas em outro lugar e copiadas como uma etapa de construção após adicionar uma plataforma.
tishma
Eu prefiro essa resposta. Estou excluindo apenas o diretório de plataformas
realtebo
4

Só queria deixar aqui minha experiência com esse problema e a abordagem que finalmente seguimos.

Em nosso projeto phonegap, começamos a comprometer todos os arquivos menos a pasta / plataforma usando o arquivo .gitignore. Pensamos assim, quando o desenvolvedor clonou o repositório, a única ação que resta a fazer seria executar:

phonegap / cordova adicionar plataforma

Mas não foi. Assim que a plataforma foi adicionada e tentamos compilar, apareceu um erro e o aplicativo não foi instalado no dispositivo.

Olhando os logs, recebemos alguns resultados de que esse erro era devido a plug-ins. Então decidimos reinstalar todos os plugins que estávamos usando no projeto e voilá o app rodar corretamente.

Portanto, meu conselho é salvar no repositório todo o conteúdo menos a plataforma de pastas e plug-ins. Crie e carregue para o repositório um arquivo README com uma lista de plug-ins usados ​​no projeto.

Dessa forma, quando um desenvolvedor clonar o repositório, ele deverá:

1.- Adicionar as plataformas: phonegap / cordova adicionar plataforma "plataforma"

2.- Adicionar os plugins: plugin phonegap / cordova adicionar "plugin"

Espero que isto ajude!

Saudações.

Nespapu
fonte
1

Muitas dessas coisas são antigas e realmente não se aplicam à versão mais recente do Apache Cordova. Estou usando o Apache Cordova 5.1.1 e este .gitignore me permite ainda personalizar com ícones personalizados, etc, enquanto bloqueia todas as coisas que não precisamos para versão para Android e IOS. Sim .gradle é usado, então não o remova!

www/
.gradle/
build/
.tmp/
.temp/
coverage/
*.log
node_modules/
bower_components/
Helzgate
fonte
Por que você incluiria a www/pasta lá? Em meu aplicativo, essa era a maior parte das coisas úteis da vida dos aplicativos da web.
vindia
2
@vindia Acho que minha lista pode ser um modelo para alguém começar. Achei que todos os descolados usavam a pasta www / como uma saída volátil para seu processo de construção automatizado. Foi mal!
Helzgate de
Excluo www/porque o conteúdo gerado por scripts de construção personalizados. Você realmente não quer arquivos de origem lá.
Kim3er
0

Embora seja uma preferência pessoal, optei por isso (para um projeto apenas com Android). Removendo a maioria, mas mantendo o que é personalizado

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