.gitignore для проектов PhoneGap / Cordova 3.0 - что мне делать?

105

Я только что попытался создать новый проект телефонного разговора 3.0 ... Примечание: я новичок в телефонном разговоре. В любом случае, я вижу, что папка проекта содержит:

  • .cordova
  • merges
  • platforms
  • plugins
  • www

И, попробовав, phonegap local run androidя вижу много бинарных / сгенерированных файлов в platforms/android. Это заставляет меня задуматься, какие части этой структуры папок я должен добавить в свой репозиторий git. Обычно я считаю крайне плохой практикой фиксировать двоичные файлы. Поэтому я обычно добавлять шаблоны , как bin/, obj/, *.o, и *.pycт.д. , чтобы .gitignoreизбежать загрязнения моего GIT репозитория с вещами , которые только служит для создания слияния конфликтов.

Конечно, wwwнужно добавить в git, но как насчет других частей проекта. В какой степени они являются продуктами исходного кода и в какой степени они представляют собой конфигурацию проекта?

Чем ты занимаешься? Конечно, я новичок, поэтому едва понимаю, что здесь имеет смысл ...

jonasfj
источник
1
Я не знаю насчет PhoneGap / Cordova, но, если сомневаетесь, просто зафиксируйте все. Вы всегда можете удалить это позже, когда узнаете, что что-то было лишним :)
Лейф

Ответы:

43

Ответ зависит от того, на каких платформах вы разрабатываете приложение phongap, и от того, следуете ли вы стандартной структуре каталогов.

Если структура каталогов вашего проекта стандартная, вы можете начать с этого gitignore и изменить его для своих нужд.

На правиле вы , чтобы исключить все созданные файлы Понравились bin/и gen/каталоги. Если вы разрабатываете версию своего приложения для Android, вам также следует исключить файлы сборки, например *.apk.

Все сгенерированные файлы в androidподкаталоге также должны быть исключены:

Android/bin/
Android/gen/
Android/assets/
Атропо
источник
1
Неважно, какие платформы вы разрабатываете. Нет ничего плохого в игнорировании того, что относится только к платформам, на которых вы еще не разрабатываете. Он намекнул, что использует стандартную структуру каталогов.
rjmunro
Бесстыдный плагин для моего Cordova gitignore: gist.github.com/elliot-labs/c92b3e52053906816074170ada511962
Elliot Labs LLC
49

Расширяя ответ @Jake Moshenko:

Мне нравится идея опустить platformsкаталог. На самом деле, я могу исключить оба pluginsи platformsкаталоги. Хорошая отправная точка для .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

Эта сущность содержит более полный сценарий для обработки проекта , который не обязывает pluginsи platformsкаталоги. Он предоставляет механизм для копирования значков и изображений заставки с www в каталоги платформы (для iOS и Android), установки плагинов и обработки файлов, специфичных для платформы, которые следует добавить в систему контроля версий.

Обновление: Grunt Gist

Вот еще одна суть, которая является портом Grunt вышеупомянутого сценария bash. (Спасибо @obie за предложение ворчания).

Джонатан Диксон
источник
2
Как мне поступить с добавлением специальных плагинов / нативного кода или внесением изменений в AndroidManifest.xml для поддержки разработки плагинов с использованием этого подхода? Есть ли еще где-нибудь, где можно добавить изменения AndroidManifest.xml?
obie
См. Связанную суть, в частности здесь . Он перезаписывает / добавляет любые файлы из platform-mergesкаталога. Например, вы можете совершить platform-merges/android/AndroidManifest.xml. Этот подход хорошо работает для простых проектов, но может усложнить ситуацию в более крупных проектах.
Джонатан Диксон
спасибо за вашу помощь :) В итоге я использовал grunt, чтобы сделать то же самое (с github.com/gruntjs/grunt-contrib-copy )
obie
3
Вы можете избежать шага с созданием папки плагинов и платформ, добавив файл .gitkeep в каждый из них и поместив его в свой .gitignore: platform / *! Platform / .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? Будет ли локальная сборка Android-телефона перезаписывать мои настроенные файлы?
EthanZ
К вашему сведению, для меня похоже, что PhoneGap Build будет строиться без .cordovaпапки - почему вы говорите, что это требуется, @Jake Moshenko?
Matty J
7
Это предложение совершенно неверно. Вы не должны опускать каталог платформ, потому что в конечном итоге вам нужно будет добавить код и плагины для конкретной платформы, если вы делаете что-то нетривиальное. Вам также часто придется манипулировать манифестом android и списками ios.
Дэниел Уильямс
3
Я бы сказал, что отказ от платформ - хорошее начало. Если есть зависимости, их следует хранить в другом месте и копировать как шаг сборки после добавления платформы.
tishma
Я предпочитаю этот ответ. Я исключаю только каталог платформ
realtebo
4

Я просто хотел рассказать здесь о своем опыте решения этой проблемы и о подходе, которому мы в конце концов воспользовались.

В нашем проекте phonegap мы начали коммитить все файлы, кроме папки / платформы, используя файл .gitignore. Мы думали так, когда разработчик клонировал репозиторий, единственное, что осталось сделать, это выполнить:

телефонная связь / кордова добавить платформу

Но это было не так. После того, как платформа была добавлена ​​и мы попытались скомпилировать, появилась ошибка, и приложение не установилось на устройство.

Просматривая журналы, мы обнаружили, что эта ошибка связана с плагинами. Поэтому мы решили переустановить все плагины, которые мы использовали в проекте, и вуаля приложение запустилось правильно.

Поэтому я советую сохранять в репозитории весь контент, за исключением платформы папок и плагинов. Создайте и загрузите в репозиторий файл README со списком плагинов, используемых в проекте.

Таким образом, когда разработчик клонирует репозиторий, он / она должен будет:

1.- Добавить платформы: phonegap / cordova добавить платформу "platform"

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/
Helzgate
источник
Зачем вам включать www/туда папку? В моем приложении это были самые полезные вещи из жизни веб-приложений.
vindia
2
@vindia Думаю, мой список может быть шаблоном для кого-нибудь. Я думал, что все хипстеры использовали папку www / как временный выход для своего автоматизированного процесса сборки. Виноват!
Helzgate
Я исключаю, www/потому что содержимое создается пользовательскими сценариями сборки. Вам действительно не нужны исходные файлы.
kim3er
0

Хотя это несколько личные предпочтения, я выбрал это (для проекта только для Android). Удаление большинства, но сохранение того, что обычай

ToonPlane/platforms/android/*
!ToonPlane/platforms/android/AndroidManifest.xml
ToonPlane/plugins/*
!ToonPlane/plugins/android.json
!ToonPlane/plugins/fetch.json
Funkodebat
источник