.gitignore cho các dự án PhoneGap / Cordova 3.0 - tôi nên cam kết những gì?


105

Tôi vừa cố gắng tạo một dự án phonegap 3.0 mới ... Lưu ý: Tôi mới sử dụng phonegap. Dù sao, tôi thấy thư mục dự án chứa:

  • .cordova
  • merges
  • platforms
  • plugins
  • www

Và sau khi thử, phonegap local run androidtôi thấy rất nhiều tệp nhị phân / được tạo trong platforms/android. Điều này khiến tôi tự hỏi, tôi nên thêm những phần nào của cấu trúc thư mục này vào kho lưu trữ git của mình. Thông thường, tôi sẽ coi việc thực hiện commit các tệp nhị phân là cực kỳ kém. Do đó, tôi thường sẽ thêm các mẫu như bin/, obj/, *.o, *.pycvv để .gitignoretránh gây ô nhiễm kho git của tôi với những điều mà chỉ phục vụ để tạo ra xung đột nhập.

Chắc chắn, wwwnên được thêm vào git, nhưng những gì về các phần khác của dự án. Chúng là sản phẩm của mã nguồn ở phạm vi nào, và chúng là cấu hình dự án ở phạm vi nào?

Bạn làm nghề gì? Cho rằng tôi là người mới nên tôi hầu như không hiểu điều gì có ý nghĩa ở đây ...


1
Tôi không biết về PhoneGap / Cordova nhưng, khi nghi ngờ, chỉ cần cam kết mọi thứ. Bạn luôn có thể loại bỏ nó sau khi bạn biết rằng có điều gì đó không cần thiết :)
Leif

Câu trả lời:


43

Câu trả lời phụ thuộc vào nền tảng bạn đang phát triển ứng dụng phongap và nếu bạn đang tuân theo cấu trúc thư mục tiêu chuẩn.

Nếu cấu trúc thư mục dự án của bạn là tiêu chuẩn, thì bạn có thể bắt đầu từ gitignore này và sửa đổi nó theo nhu cầu của mình.

Theo nguyên tắc chung, bạn phải loại trừ tất cả các tệp được tạo như thư mục bin/gen/. Nếu đang phát triển phiên bản Android của ứng dụng, bạn nên loại trừ các tệp xây dựng giống như vậy *.apk.

Tất cả các tệp được tạo trong androidthư mục con cũng nên bị loại trừ:

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

1
Không quan trọng bạn đang phát triển nền tảng nào. Không có hại gì khi bỏ qua những thứ chỉ áp dụng cho các nền tảng mà bạn chưa phát triển. Anh ta đã ngụ ý rằng anh ta đang sử dụng cấu trúc thư mục tiêu chuẩn.
rjmunro

Phích cắm Shameless cho Cordova gitignore của tôi: gist.github.com/elliot-labs/c92b3e52053906816074170ada511962
Elliot Labs LLC

49

Mở rộng câu trả lời @Jake Moshenko:

Tôi thích ý tưởng bỏ qua platformsthư mục. Trên thực tế, tôi có thể loại trừ cả thư mục pluginsplatformsthư mục. Một điểm khởi đầu tốt cho .gitignore:

platforms/
plugins/

Vấn đề với điều này là bản sao sạch của repo phải được khởi tạo trước khi bạn thực sự có thể làm việc với nó. Có thể có ý nghĩa khi tạo một tập lệnh init như:

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

Một lưu ý đối với cách tiếp cận này là nó khiến việc tùy chỉnh mã / cấu hình ứng dụng cụ thể của nền tảng trở nên khó khăn hơn một chút ngoài những gì được phonegap / cordova hỗ trợ (tức là hỗ trợ hướng màn hình).

Cập nhật: Bash Gist

Đây ý chính chứa một kịch bản hoàn chỉnh hơn để xử lý một dự án mà không cam kết pluginsplatformsthư mục. Nó cung cấp cơ chế sao chép các biểu tượng và hình ảnh màn hình giật gân từ www vào thư mục nền tảng (dành cho iOS và Android), cài đặt plugin và xử lý các tệp cụ thể của nền tảng cần được thêm vào kiểm soát phiên bản.

Cập nhật: Grunt Gist

Đây là một ý chính khác là một cổng Grunt của tập lệnh bash đã đề cập ở trên. (Cảm ơn @obie đã gợi ý grunt).


2
Tôi sẽ giải quyết như thế nào khi thêm các plugin / mã gốc riêng hoặc thực hiện các thay đổi AndroidManifest.xml để phù hợp với việc phát triển plugin bằng cách sử dụng phương pháp này? Có nơi nào khác mà các thay đổi AndroidManifest.xml có thể được thêm vào không?
obie

Xem ý chính được liên kết, cụ thể tại đây . Nó ghi đè / thêm bất kỳ tệp nào từ platform-mergesthư mục. Ví dụ, bạn có thể cam kết platform-merges/android/AndroidManifest.xml. Cách tiếp cận này hoạt động tốt cho các dự án đơn giản, nhưng nó có thể làm phức tạp mọi thứ trong các dự án lớn hơn.
Jonathan Dixon

cảm ơn sự giúp đỡ của bạn :) Tôi đã kết thúc bằng cách sử dụng grunt để làm điều tương tự (với github.com/gruntjs/grunt-contrib-copy )
obie

3
Bạn có thể tránh bước tạo thư mục plugin và nền tảng bằng cách thêm tệp .gitkeep vào mỗi tệp và đặt tệp này vào .gitignore: platform / *! Platform / .gitkeep plugins / *! Plugins / .gitkeep
aharris88

1
@ aharris88 Điểm tốt, nhưng tôi tin rằng tôi đã tránh điều đó để giúp việc dọn dẹp dự án dễ dàng hơn. tức là rm -rf platforms plugins.
Jonathan Dixon

7

Vì vậy, tôi chỉ tìm ra điều này thông qua thử và sai. Thư mục platformscó thể được bỏ qua nếu bạn đang sử dụng bản dựng cục bộ hoặc từ xa phonegap, vì nó được tạo nhanh chóng. Tất cả các thư mục khác, bao gồm cả thư mục ẩn .cordovalà bắt buộc.


4
Xin chào, điều gì sẽ xảy ra nếu tôi sử dụng một số tệp jar của bên thứ ba hoặc tệp nguồn target-c để tùy chỉnh bản dựng android hoặc ios, chẳng hạn như tích hợp Phân tích cú pháp Thông báo. Nó chắc chắn cần viết một số mã java, sau đó làm thế nào để quản lý kho lưu trữ git? phonegap local build android có ghi đè lên các tệp tùy chỉnh của tôi không?
EthanZ,

FYI đối với tôi, có vẻ như PhoneGap Build sẽ xây dựng mà không có .cordovathư mục - tại sao bạn nói nó là bắt buộc @Jake Moshenko?
Matty J

7
Đề xuất này hoàn toàn không chính xác. Bạn không nên bỏ qua thư mục nền tảng vì cuối cùng bạn sẽ cần thêm một số mã và plugin dành riêng cho nền tảng nếu bạn đang làm bất cứ điều gì không đáng kể. Bạn cũng sẽ cần phải thao tác với tệp kê khai android và bảng liệt kê ios.
Daniel Williams,

3
Tôi sẽ nói rằng việc bỏ qua các nền tảng là một khởi đầu tốt. Nếu có phụ thuộc, chúng nên được giữ ở một nơi khác và được sao chép như một bước xây dựng sau khi thêm nền tảng.
tishma

Tôi thích câu trả lời này hơn. Tôi chỉ loại trừ thư mục nền tảng
realtebo

4

Tôi chỉ muốn để lại ở đây kinh nghiệm của tôi về vấn đề này và cách tiếp cận cuối cùng chúng tôi đã làm theo.

Trong dự án phonegap của chúng tôi, chúng tôi bắt đầu cam kết tất cả các tệp trừ thư mục / nền tảng bằng cách sử dụng tệp .gitignore. Chúng tôi nghĩ theo cách này, khi nhà phát triển nhân bản kho lưu trữ, hành động duy nhất còn lại phải làm là thực thi:

phonegap / cordova thêm nền tảng

Nhưng nó không phải. Sau khi nền tảng được thêm vào và chúng tôi cố gắng biên dịch, một lỗi đã xuất hiện và ứng dụng không được cài đặt trong thiết bị.

Xem xét nhật ký, chúng tôi nhận được một số kết quả rằng lỗi này là do plugin. Vì vậy, chúng tôi quyết định cài đặt lại tất cả các plugin chúng tôi đang sử dụng trong dự án và voilá ứng dụng chạy chính xác.

Vì vậy, lời khuyên của tôi là lưu trong kho lưu trữ tất cả nội dung trừ đi các thư mục nền tảng và plugin. Tạo và tải lên kho lưu trữ một tệp README với danh sách các plugin được sử dụng trong dự án.

Bằng cách này, khi một nhà phát triển sao chép kho lưu trữ, họ sẽ phải:

1.- Thêm nền tảng: phonegap / cordova thêm nền tảng "nền tảng"

2.- Thêm các plugin: plugin phonegap / cordova thêm "plugin"

Hi vọng điêu nay co ich!

Trân trọng.


1

Rất nhiều nội dung này đã cũ và không thực sự áp dụng cho phiên bản Apache Cordova mới nhất. Tôi đang sử dụng Apache Cordova 5.1.1 và .gitignore này cho phép tôi vẫn tùy chỉnh với các biểu tượng tùy chỉnh, v.v. trong khi chặn tất cả những thứ chúng tôi không cần để phiên bản cho cả Android và IOS. Có .gradle được sử dụng vì vậy đừng xóa nó!

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

Tại sao bạn lại đưa www/thư mục vào đó? Trong ứng dụng của tôi, đó thực sự là hầu hết những thứ hữu ích từ các đời ứng dụng web.
vindia

2
@vindia Tôi đoán danh sách của tôi có thể là một mẫu để giúp ai đó bắt đầu. Tôi nghĩ rằng tất cả các hipster đều sử dụng thư mục www / như một đầu ra dễ bay hơi cho quy trình xây dựng tự động của họ. Lỗi của tôi!
Helzgate

Tôi loại trừ www/vì nội dung được tạo bởi các tập lệnh xây dựng tùy chỉnh. Bạn không thực sự muốn các tệp nguồn trong đó.
kim3er

0

Mặc dù đó là sở thích cá nhân, nhưng tôi đã chọn nó (cho một dự án chỉ dành cho Android). Loại bỏ hầu hết, nhưng vẫn giữ những gì tùy chỉnh

ToonPlane/platforms/android/*
!ToonPlane/platforms/android/AndroidManifest.xml
ToonPlane/plugins/*
!ToonPlane/plugins/android.json
!ToonPlane/plugins/fetch.json
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.