.gitignore untuk proyek PhoneGap / Cordova 3.0 - apa yang harus saya lakukan?

105

Saya baru saja mencoba membuat proyek phonegap 3.0 baru ... Catatan: Saya baru mengenal phonegap. Bagaimanapun, saya melihat folder proyek berisi:

  • .cordova
  • merges
  • platforms
  • plugins
  • www

Dan setelah mencoba, phonegap local run androidsaya melihat banyak file biner / yang dihasilkan di platforms/android. Ini membuat saya bertanya-tanya, bagian mana dari struktur folder ini yang harus saya tambahkan ke repositori git saya. Biasanya, saya akan menganggap praktik yang sangat buruk untuk melakukan file biner. Oleh karena itu, saya biasanya akan menambahkan pola seperti bin/, obj/, *.o, *.pycdll untuk .gitignoremenghindari polusi repositori git saya dengan hal-hal yang hanya berfungsi untuk membuat menggabungkan konflik.

Tentunya, wwwharus ditambahkan ke git, tapi bagaimana dengan bagian lain dari proyek tersebut. Sampai sejauh mana mereka merupakan produk dari kode sumber, dan sejauh mana mereka konfigurasi proyek?

Apa yang kamu kerjakan? Memang saya baru jadi saya hampir tidak mengerti apa yang masuk akal di sini ...

jonasfj
sumber
1
Saya tidak tahu tentang PhoneGap / Cordova tetapi, jika ragu, lakukan saja semuanya. Anda selalu dapat menghapusnya nanti ketika mengetahui bahwa ada sesuatu yang tidak berguna :)
Leif

Jawaban:

43

Jawabannya bergantung pada platform mana yang Anda kembangkan aplikasi phongap, dan apakah Anda mengikuti struktur direktori standar.

Jika struktur direktori proyek Anda standar, maka Anda dapat memulai dari gitignore ini dan memodifikasinya sesuai kebutuhan Anda.

Prinsipnya, Anda harus mengecualikan semua file yang dihasilkan seperti direktori bin/dan gen/. Jika Anda mengembangkan versi Android dari aplikasi Anda, Anda juga harus mengecualikan file build *.apk.

Semua file yang dihasilkan di androidsubdirektori harus dikecualikan juga:

Android/bin/
Android/gen/
Android/assets/
Atropo
sumber
1
Tidak masalah platform apa yang Anda kembangkan. Tidak ada salahnya mengabaikan hal-hal yang hanya berlaku untuk platform yang belum Anda kembangkan. Dia menyiratkan bahwa dia menggunakan struktur direktori standar.
rjmunro
Steker tak tahu malu untuk Cordova gitignore saya: gist.github.com/elliot-labs/c92b3e52053906816074170ada511962
Elliot Labs LLC
49

Memperluas jawaban @Jake Moshenko:

Saya suka ide untuk menghilangkan platformsdirektori. Bahkan, saya bisa mengecualikan direktori pluginsdan platforms. Titik awal yang baik untuk .gitignore:

platforms/
plugins/

Masalah dengan ini adalah salinan repo yang bersih harus dimulai sebelum Anda benar-benar dapat bekerja dengannya. Mungkin masuk akal untuk membuat skrip init seperti:

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

Peringatan untuk pendekatan ini adalah bahwa hal itu membuatnya sedikit lebih menantang untuk menyesuaikan kode / konfigurasi aplikasi khusus platform di luar apa yang didukung oleh phonegap / cordova (yaitu dukungan orientasi layar).

Pembaruan: Bash Gist

Inti ini berisi skrip yang lebih lengkap untuk menangani proyek yang tidak menjalankan direktori pluginsdan platforms. Ini menyediakan mekanisme untuk menyalin ikon dan gambar splashscreen dari www ke direktori platform (untuk iOS dan Android), menginstal plugin, dan menangani file spesifik platform yang harus ditambahkan ke kontrol versi.

Pembaruan: Grunt Gist

Berikut adalah inti lain yang merupakan port Grunt dari skrip bash yang disebutkan di atas. (Terima kasih kepada @obie karena menyarankan mendengus).

Jonathan Dixon
sumber
2
Bagaimana cara saya menangani penambahan plugin / kode asli yang dipesan lebih dahulu atau membuat perubahan AndroidManifest.xml untuk mengakomodasi pengembangan plugin menggunakan pendekatan ini? Apakah ada tempat lain di mana perubahan AndroidManifest.xml dapat ditambahkan?
obie
Lihat inti terkait, khususnya di sini . Itu menimpa / menambahkan file apa pun dari platform-mergesdirektori. Misalnya, Anda bisa berkomitmen platform-merges/android/AndroidManifest.xml. Pendekatan ini bekerja dengan baik untuk proyek sederhana, tetapi dapat memperumit proyek yang lebih besar.
Jonathan Dixon
terima kasih atas bantuan Anda :) Saya akhirnya menggunakan grunt untuk melakukan hal yang sama (dengan github.com/gruntjs/grunt-contrib-copy )
obie
3
Anda dapat menghindari langkah membuat plugin dan folder platform dengan menambahkan file .gitkeep di masing-masing file dan meletakkannya di .gitignore: platforms / *! Platforms / .gitkeep plugins / *! Plugins / .gitkeep
aharris88
1
@ aharris88 Poin yang bagus, tapi saya yakin saya menghindarinya untuk memudahkan pembersihan proyek. mis rm -rf platforms plugins.
Jonathan Dixon
7

Jadi saya menemukan ini melalui trial and error. The platformsdirektori dapat dihilangkan jika Anda menggunakan phonegap membangun lokal atau remote, seperti yang dihasilkan dengan cepat. Semua folder lain, termasuk folder tersembunyi .cordovadiperlukan.

Jake Moshenko
sumber
4
Hai, bagaimana jika saya menggunakan beberapa file jar pihak ketiga atau file sumber objektif-c untuk menyesuaikan baik android atau ios build, misalnya, integrasi Parse Notification. Pasti perlu menulis beberapa kode java, lalu bagaimana cara mengelola repositori git? akankah phonegap lokal membangun android menimpa file saya yang disesuaikan?
EthanZ
FYI bagi saya, sepertinya PhoneGap Build akan dibangun tanpa .cordovafolder - mengapa Anda mengatakan @Jake Moshenko diperlukan?
Matty J
7
Saran ini sepenuhnya salah. Anda tidak boleh mengabaikan direktori platform karena pada akhirnya Anda perlu menambahkan beberapa kode dan plugin khusus platform jika Anda melakukan sesuatu yang tidak sepele. Anda juga akan sering perlu memanipulasi manifes android dan ios plists.
Daniel Williams
3
Menurut saya, menghilangkan platform adalah awal yang baik. Jika ada dependensi, dependensi harus disimpan di tempat lain, dan disalin sebagai langkah build setelah menambahkan platform.
tishma
Saya lebih suka jawaban ini. Saya hanya mengecualikan direktori platform
realtebo
4

Saya hanya ingin meninggalkan pengalaman saya dengan masalah ini dan pendekatan yang akhirnya kami ikuti.

Dalam proyek phonegap kami, kami mulai melakukan semua file kecuali folder / platform menggunakan file .gitignore. Kami berpikir seperti ini, ketika pengembang mengkloning repositori, satu-satunya tindakan yang harus dilakukan adalah mengeksekusi:

phonegap / cordova menambahkan platform

Tapi ternyata tidak. Setelah platform ditambahkan dan kami mencoba mengompilasi, kesalahan muncul dan aplikasi tidak terpasang di perangkat.

Melihat log, kami mendapat beberapa klik bahwa kesalahan ini disebabkan oleh plugin. Jadi kami memutuskan untuk memasang ulang semua plugin yang kami gunakan dalam proyek dan agar aplikasinya berjalan dengan benar.

Jadi saran saya adalah simpan di repositori semua konten dikurangi platform folder dan plugin. Buat dan unggah ke repositori file README dengan daftar plugin yang digunakan dalam proyek.

Dengan cara ini, ketika pengembang mengkloning repositori, dia harus:

1.- Tambahkan platform: phonegap / cordova tambahkan platform "platform"

2.- Tambahkan plugin: plugin phonegap / cordova tambahkan "plugin"

Semoga ini membantu!

Salam.

nespapu
sumber
1

Banyak hal ini sudah tua dan tidak benar-benar berlaku untuk versi terbaru Apache Cordova. Saya menggunakan Apache Cordova 5.1.1 dan .gitignore ini memungkinkan saya untuk tetap menyesuaikan dengan ikon khusus dll sambil memblokir semua hal yang tidak perlu kami versi untuk Android dan iOS. Ya .gradle digunakan jadi jangan menghapusnya!

www/
.gradle/
build/
.tmp/
.temp/
coverage/
*.log
node_modules/
bower_components/
Helzgate
sumber
Mengapa Anda menyertakan www/folder di sana? Dalam aplikasi saya, itu sebenarnya adalah sebagian besar hal yang berguna dari kehidupan aplikasi web.
vindia
2
@vindia Saya rasa daftar saya bisa menjadi template untuk memulai seseorang. Saya pikir semua hipster menggunakan folder www / sebagai output yang mudah menguap untuk proses pembuatan otomatis mereka. Salahku!
Helzgate
Saya mengecualikan www/karena konten yang dihasilkan oleh skrip build kustom. Anda tidak benar-benar menginginkan file sumber di sana.
kim3er
0

Meskipun ini agak preferensi pribadi, saya menggunakan ini (untuk proyek khusus android). Menghapus sebagian besar, tetapi tetap mempertahankan apa yang biasa

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