Apa yang seharusnya ada di .gitignore saya untuk proyek Android Studio?

1256

File apa yang seharusnya ada di saya .gitignoreuntuk proyek Android Studio?

Saya telah melihat beberapa contoh yang semuanya termasuk .imltetapi dokumen IntelliJ mengatakan bahwa .imlharus dimasukkan dalam kontrol sumber Anda.

hormatilah Kode
sumber
7
github.com/github/gitignore
Yousha Aleayoub

Jawaban:

1330

Diperbarui ke Android Studio 3.0 Silakan bagikan item yang hilang dalam komentar.

Jawaban yang terlambat tetapi tidak ada jawaban di sini dan di sini yang tepat untuk kita ...

Jadi, inilah file gitignore kami:

#built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# generated files
bin/
gen/

# Local configuration file (sdk path, etc)
local.properties

# Windows thumbnail db
Thumbs.db

# OSX files
.DS_Store

# Android Studio
*.iml
.idea
#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.
.gradle
build/
.navigation
captures/
output.json 

#NDK
obj/
.externalNativeBuild

Sejak Android Studio 2.2 dan hingga 3.0, proyek baru dibuat dengan file gitignore ini:

*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild

Tidak digunakan lagi - untuk format proyek yang lebih lama, tambahkan bagian ini ke file gitignore Anda:


/*/out
/*/*/build
/*/*/production
*.iws
*.ipr
*~
*.swp

File ini harus berada di folder root proyek dan bukan di dalam folder modul proyek.

Edit Catatan:

  1. Sejak versi 0.3+ sepertinya Anda dapat mengkomit dan menekan * .iml dan membangun.gradle file. Jika proyek Anda didasarkan pada Gradle: di dialog buka / impor yang baru, Anda harus mencentang "use auto import"kotak centang dan menandai "use default gradle wrapper (recommended)"tombol radio. Semua jalur sekarang relatif seperti yang disarankan @George.

  2. Jawaban yang diperbarui sesuai dengan sumber terlampir @ 128KB dan saran @Skela

Lior Iluz
sumber
8
Mengapa kita harus mengimpor proyek dan secara manual menambahkan lib dan dependensi modul? Apakah ada cara untuk melestarikan hal-hal di repo dan ketika kita mengkloning repo hanya melakukan proyek terbuka?
Justin
13
Cara yang tepat untuk melakukan ini adalah dengan memeriksa file * .iml dan * .ipr, dan cukup buka di IDE. Mengapa memaksa orang lain di tim Anda untuk membuat ulang file-file ini, dan mengapa memungkinkan mereka menggunakan pengaturan yang mungkin salah (seperti versi SDK)?
Sky Kelsey
26
@liorry, saya tidak setuju. Ini adalah jawaban pertama yang akan dilihat orang lain, dan ini dipilih secara besar-besaran. Karena semua hal yang perlu Anda lakukan untuk mendapatkan proyek dan menjalankan setelah klon baru dari git menggunakan gitignore khusus ini. Saya sangat merasa ini bukan apa yang dibutuhkan kebanyakan orang. Meskipun saya kira jumlah suara mengatakan sebaliknya, tapi saya masih tidak setuju. Paling tidak, mungkin beberapa informasi yang menyatakan bahwa Anda kemungkinan besar harus mengatur proyek lagi dan itu tidak akan berhasil.
Skela
10
@liorry, saya tidak bermaksud kasar atau sobat, tolong jangan tersinggung. Masalahnya adalah, hal-hal ini perlu bekerja dengan pengaturan minimal untuk penggunaan praktis. Ketika Anda perlu Mengimpor proyek, dan secara manual menambahkan ketergantungan modul, segera memasuki bidang kegilaan. Ketika Anda terbiasa dengan suatu proyek, dan mengetahui hal-hal ini dari dalam, maka tidak ada masalah dengan pendekatan Anda. Tetapi untuk pengembang yang mengkloning proyek untuk pertama kalinya, itu tidak praktis. Saya benar-benar hanya berusaha memastikan bahwa pendekatan Anda tidak menjadi norma itu saja.
Skela
14
Anda tidak boleh membuat versi .imlfile kecuali Anda tidak ingin berurusan dengan gangguan yang tidak perlu jika pengguna lain memberi nama proyek berbeda ketika mereka check out.
theblang
151

Membangun Android normal .gitignore , dan setelah membaca dokumentasi di situs web Intellij IDEA dan membaca posting di StackOverflow, saya telah membuat file berikut:

# built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# built native files (uncomment if you build your own)
# *.o
# *.so

# generated files
bin/
gen/

# Ignore gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Eclipse Metadata
.metadata/

# Mac OS X clutter
*.DS_Store

# Windows clutter
Thumbs.db

# Intellij IDEA (see https://intellij-support.jetbrains.com/entries/23393067)
.idea/workspace.xml
.idea/tasks.xml
.idea/datasources.xml
.idea/dataSources.ids

Juga perhatikan bahwa seperti yang ditunjukkan, bagian file asli yang dibangun terutama berguna ketika Anda sedang membangun kode asli Anda sendiri dengan Android NDK. Jika, di sisi lain, Anda menggunakan perpustakaan pihak ketiga yang menyertakan file-file ini, Anda mungkin ingin menghapus baris-baris ini (* .o dan * .so) dari .gitignore Anda.

Phil
sumber
10
Hampir benar. Saya tidak berpikir itu ide yang baik untuk mengabaikan *. Jadi karena Anda tidak akan dapat bekerja dengan proyek-proyek yang menghubungkan ketergantungan pada perpustakaan NDK. Tapi titik awal yang sangat bagus dari semua akun!
Skela
@Skela poin bagus. Saya punya ini di sana dari ketika saya sedang membangun file asli saya sendiri - tetapi saya juga telah bekerja pada proyek-proyek yang memerlukan salinan dan tempel sederhana file pra-dibangun. Saya menambahkan catatan tentang ini ke jawaban di atas.
Phil
@ Phil Apakah Anda memiliki pendapat tentang file XML .idea/libraries? Haruskah mereka dibagikan atau dikecualikan menurut pendapat Anda?
Alex Lockwood
1
@ AlexLockwood Saya pikir file-file ini harus dimasukkan jika proyek tidak tergantung pada proyek atau modul lain. Namun, jika proyek tergantung pada modul yang berisi perpustakaan, maka file ini harus diabaikan di tingkat proyek, tetapi tidak oleh modul.
Phil
@Phil sangat keren dan saya telah menggunakan ini sejauh ini tetapi file dex menyelinap melalui celah: /moduledirectory/build/intermediates/dex-cache/cache.xml - tidak masuk akal untuk menambahkan ** / build untuk menambahkan mengecualikan folder build di modul juga?
Oliver Hausler
82

Diperbarui 7/2015:

Berikut adalah sumber definitif dari JetBrains


Format proyek berbasis direktori (direktori .idea)

Format ini digunakan oleh semua versi IDE terbaru secara default. Inilah yang perlu Anda bagikan:

  • Semua file di bawah .ideadirektori di root proyek kecuali yang workspace.xmldan tasks.xmlfile yang pengaturan khusus user menyimpan
  • Semua .imlfile modul yang dapat ditemukan di direktori modul yang berbeda (berlaku untuk IntelliJ IDEA)

Hati-hati berbagi:

  • Artefak Android yang menghasilkan bangunan yang ditandatangani (akan berisi kata sandi keystore)
  • Di IDEA 13 dan sebelumnya dataSources.ids, datasources.xmldapat berisi kata sandi basis data. IDEA 14 memecahkan masalah ini .

Anda dapat mempertimbangkan untuk tidak membagikan yang berikut:

  • file gradle.xml, lihat diskusi ini
  • folder kamus pengguna (untuk menghindari konflik jika pengembang lain memiliki nama yang sama)
  • File XML .idea/librariesdi bawah dalam kasus mereka dihasilkan dari proyek Gradle

Format proyek lawas ( .ipr/ .iml/ .iwsfile)

  • Bagi proyek .iprberkas dan semua .imlfile modul, tidak berbagi dengan .iwsfile seperti menyimpan pengaturan khusus pengguna

Meskipun instruksi ini untuk IntelliJ IDEA, mereka memegang 100% benar untuk Android Studio.


Berikut ini .gitignorecuplikan yang menggabungkan semua aturan di atas:

# Android Studio / IntelliJ IDEA 
*.iws
.idea/libraries
.idea/tasks.xml
.idea/vcs.xml
.idea/workspace.xml
Sky Kelsey
sumber
SDK mana yang didukung didefinisikan dalam AndroidManifest.xml (dan juga oleh Gradle). SDK apa pun yang diizinkan oleh pengaturan itu harus ok untuk pengembangan. Mengenai gaya kode: ini bukan sesuatu yang harus dipertahankan dalam setiap proyek secara terpisah, dan terlebih lagi harus diklarifikasi secara independen dari IDE. Header hak cipta: semoga ini ada dalam basis kode Anda dan tidak ada dalam file proyek IDE apa pun Kalau tidak, membangun di atas perintah tidak akan memasukkan mereka ...
Risadinha
@Risadinha 1) SDK juga didefinisikan di tingkat IDE. Mereka dirujuk dalam Manifest, tetapi file proyek berisi definisi SDK yang sebenarnya. 2) Gaya kode harus dipertahankan SETIDAKNYA di tingkat proyek. Idealnya, semua orang akan menulis Java standar, tapi oh well. 3) Header hak cipta disimpan dalam proyek. Mereka digunakan untuk pembuatan file baru, dan dapat berisi makro untuk nama, nama perusahaan, proyek, tanggal, dll. Saya sarankan Anda memeriksanya! Singkatnya, file proyek berisi informasi meta penting tentang proyek yang perlu dibagikan dan dikendalikan di seluruh tim.
Sky Kelsey
3
Seorang pengelola telah menarik perubahan ke repo sendiri . Mungkin akan segera ditarik menjadi master.
FalconC
5
JetBrains telah mencabut DOC-1186 dan memasukkan rekomendasi mereka yang diperbarui dalam posting baru : LAKUKAN TERMASUK: Semua file di dalam direktori .idea di root proyek kecuali workspace.xml dan task.xml, dan semua file .iml. HATI-HATI saat berbagi artefak Android yang menghasilkan bangunan bertanda tangan (akan berisi kata sandi keystore), dataSources.ids, dan dataources.xml (mungkin berisi kata sandi). PERTIMBANGKAN PENGECUALIAN: gradle.xml, folder kamus pengguna, dan file XML di bawah .idea / libraries (seandainya dihasilkan dari proyek Gradle).
JSmitty
2
Itu teori yang bagus tapi ini tidak berhasil untuk kita. Kami secara konsisten berakhir dengan file .iml dengan entri seperti ini: <orderEntry type="jdk" jdkName="1.6 (38)" jdkType="JavaSDK" />Perhatikan angka 38 yang tampaknya terus bertambah. (file misc.xml juga memiliki masalah ini).
Sam
41

Saya tidak setuju dengan semua jawaban ini. Konfigurasi berikut berfungsi baik untuk aplikasi organisasi kami.

Saya mengabaikan:

  • /build
  • /.idea(dengan kemungkinan pengecualian, lihat komentar dalam jawaban dalewking )
  • *.iml
  • local.properties

Saya pikir hampir semua orang setuju /build.

Saya muak melihat pesan tentang berbagai library.xmlfile yang dibuat atau dihapus oleh Gradle /.idea. Ini build.gradleakan berjalan di pengembang lokal ketika mereka pertama kali memeriksa proyek, jadi mengapa file XML perlu diversi? Android Studio juga akan menghasilkan sisanya /.ideaketika pengembang membuat proyek menggunakan Check out from Version Control, jadi mengapa apa pun dalam folder itu perlu diversi?

Jika *.imldiversi, pengguna baru harus memberi nama proyek sama persis seperti ketika dilakukan. Karena ini juga merupakan file yang dibuat, mengapa versi itu di tempat pertama?

The local.propertiesfile poin untuk path absolut pada sistem file untuk SDK, jadi pasti tidak harus berversi.

Sunting 1 : Ditambahkan .gradleuntuk mengabaikan hal-hal caching gradle yang seharusnya tidak diversi (terima kasih Vasily Makarov ).

Sunting 2 : Menambahkan .DS_Storesekarang saya menggunakan Mac. Folder ini khusus untuk Mac dan tidak boleh diversi.

Catatan tambahan : Anda mungkin juga ingin menambahkan direktori untuk memasukkan kunci masuk Anda ketika membangun versi rilis.

Untuk kenyamanan salin / tempel :

.gradle
/build
/.idea
*.iml
local.properties
.DS_Store 
theblang
sumber
4
Saya setuju dengan jawaban Anda. Saya juga percaya bahwa file * .iml atau .idea tidak harus diversi: stackoverflow.com/a/26290130/2948212
diegosasw
7
Pilihan saya untuk gitignore Anda karena sangat mirip dengan gitignore saya. Saran pasangan: Gunakan build/sebagai ganti /builduntuk mencocokkan seperti membangun modul seperti app/build. Gunakan .gradleuntuk mencocokkan direktori caching gradle.
Vasily Makarov
Saya juga mempertanyakan mengapa daftar default gitignore / build bukan build / Saya berakhir dengan semua file di app / build dalam repositori saya jika saya menggunakan / build
guyland123
@ guyland123 Saya baru saja memperhatikan bahwa saya memiliki .gitignorefile lain di direktori aplikasi saya yang juga berisi /build. Apakah ini dibuat otomatis, saya tidak ingat? Jadi build/akan berlaku untuk subfolder?
theblang
@mattblang yes .gitignore dibuat secara otomatis saat Anda membuat proyek baru. Namun itu tidak dibuat ketika Anda mengimpor proyek dari katakanlah Eclipse. build / akan cocok dengan semua direktori bernama "build" di bawah lokasi file .gitignore. Misalnya. aplikasi / build akan diabaikan.
guyland123
37

Saya menggunakan .gitignore ini. Saya menemukannya di: http://th4t.net/android-studio-gitignore.html

*.iml
*.iws
*.ipr
.idea/
.gradle/
local.properties

*/build/

*~
*.swp
helbaroudy
sumber
1
* / build / tidak mengabaikan file yang tidak berubah di direktori build saya. ada ide? @Solved: saya harus menambahkan * / * / build / karena folder build saya sedalam beberapa direktori.
speedynomads
35

Dalam kasus Android Studio, satu-satunya file yang harus disimpan dalam kontrol versi adalah file yang diperlukan untuk membangun aplikasi dari baris perintah menggunakan gradle. Jadi Anda bisa mengabaikan:

  • * .iml
  • .ide
  • membangun

Namun, jika Anda menyimpan pengaturan IDE, seperti pengaturan gaya kode kustom, mereka disimpan di folder .idea. Jika Anda ingin perubahan itu dalam kontrol versi, maka Anda juga akan menyimpan file IDEA (* .iml dan .idea).

Siva Velusamy
sumber
3
Terima kasih telah menjelaskannya. Dari apa yang saya baca jika Anda ingin memasukkan .idea dalam proyek Anda, Anda harus mengabaikan * /. Idea / workspace.xml dan * /. Idea /ugas.xml
respectTheCode
15
jangan abaikan folder .idea untuk saat ini. Plugin Gradle belum memiliki tugas 'ide gradle' dan proyek impor di Android Studio masih jauh dari sempurna sekarang.
robotoaster
2
Juga jika Anda bekerja dalam tim pertimbangkan untuk mengabaikan properti local.prop karena berisi jalur sdk hardcoded.
Calin
@robotoaster, apakah Anda masih merekomendasikan untuk tidak mengabaikan folder .idea?
loeschg
@Ioeschg tidak lagi diperlukan. jika Anda checkout bersih git repo gunakan Impor Proyek Baru dan itu akan berfungsi dengan baik selama membangun file.
robotoaster
20

Android Studio 3.4

Jika Anda membuat proyek Gradle menggunakan Android Studio .gitignorefile tersebut akan berisi yang berikut:

.gitignore

*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild

Saya akan merekomendasikan mengabaikan direktori ".idea" yang lengkap karena berisi konfigurasi khusus pengguna, tidak ada yang penting untuk proses pembangunan.

Folder proyek Gradle

Satu-satunya hal yang harus ada dalam folder proyek (Gradle) Anda setelah kloning repositori adalah struktur ini (setidaknya untuk kasus penggunaan yang saya temui sejauh ini):

app/
.git/
gradle/
build.gradle
.gitignore
gradle.properties
gradlew
gradle.bat
settings.gradle

Dianjurkan untuk check-in skrip pembungkus gradle (lihat di sini ).

Untuk membuat file Wrapper tersedia untuk pengembang lain dan lingkungan eksekusi Anda harus memeriksanya ke dalam kontrol versi.

Willi Mentzel
sumber
1
Mengapa Anda harus menyimpan biner seperti gradlew dan gradle.bat?
Bilthon
2
@Bilthon Mereka bukan binari. Mereka adalah skrip start-up gradle untuk Windows (gradle.bat) dan Linux (gradlew).
Willi Mentzel
Ohh .. Saya melihat Anda benar, tetapi bukankah mereka di-autogenerasi?
Bilthon
2
@Bilthon Memang, mereka! Mereka dihasilkan dengan opsi default. Jika Anda mengubah sesuatu, mereka harus dimasukkan dalam repositori Anda untuk membangunnya dengan benar saat memeriksanya. Mereka begitu kecil, tidak ada salahnya untuk selalu menjaga mereka.
Willi Mentzel
2
Periksa juga sumber resmi ini di sini yang secara eksplisit merekomendasikan untuk mengkomit skrip pembungkus Gradle ke kontrol sumber: docs.gradle.org/current/userguide/…
friederbluemle
19

Saran saya adalah juga untuk tidak mengabaikan folder .idea.

Saya telah mengimpor proyek Eclipse berbasis Git ke Android Studio dan itu berjalan dengan baik. Kemudian, saya ingin mengimpor proyek ini dengan Git (seperti yang pertama kali) ke komputer lain dengan Android Studio, tetapi itu tidak berhasil. Android Studio memang memuat semua file tetapi tidak dapat "melihat" proyek sebagai proyek. Saya hanya bisa membuka file Git.

Saat mengimpor proyek untuk pertama kalinya (dari Eclipse ke Android Studio) .gitignore lama saya ditimpa dan yang baru terlihat seperti ini:

  • .idea / .name
  • .idea / compiler.xml
  • .idea / copyright / profiles_settings.xml
  • .idea / encodings.xml
  • .idea / libraries / libs.xml
  • .idea / misc.xml
  • .idea / modules.xml
  • .idea / scopes / scope_settings.xml
  • .idea / vcs.xml
  • .idea / workspace.xml

Jadi, saya mencoba menggunakan gitignore kosong dan sekarang berhasil. Studio Android lainnya dapat memuat file dan Proyek. Saya kira beberapa file tidak penting (profiles_settings.xml)untuk Git dan mengimpor tetapi saya senang itu berhasil.

Ingo
sumber
Dari github.com/joeblau/gitignore.io/issues/… : erge Baranov (IntelliJ) 26 Sep 14, 14:23 CEST Tergantung pada proyek. Jika proyek diimpor dari Maven atau Gradle, file .iml dihasilkan secara otomatis dan mungkin tidak dibagikan, jika tidak file ini penting untuk proyek dan harus dibagikan sehingga pengguna lain dapat membuka proyek setelah checkout. File .iml berisi semua informasi tentang konfigurasi modul (root, folder sumber, dependensi, dll).
Adrian Romanelli
9

Ini cara terbaik untuk menghasilkan .gitignorevia sini

Jacky
sumber
1
Sepertinya saya tidak bisa membuat ini bekerja untuk Android Studio. Jika saya hanya memilih "android" sepertinya ini merupakan implementasi Eclipse. Apakah saya salah?
zipzit
Satu-satunya penyebutan Eclipse ada pada satu baris: "folder Proguard dihasilkan oleh Eclipse". Sisanya tampaknya OK untuk AS
Jose_GD
@zipzit, mungkin Anda benar. Tampaknya situs ini membuat .gitignore bukan untuk Android Studio karena tidak mengandung .idea /.
CoolMind
1
Ada juga Opsi Android Studio
Daniyal Javaid
8

Tidak perlu untuk menambah kontrol sumber salah satu dari berikut ini:

.idea/
.gradle/
*.iml
build/
local.properties

Jadi, Anda dapat mengkonfigurasi hgignore atau gitignore.

Pertama kali pengembang mengkloning kontrol sumber bisa:

  1. Buka Android Studio
  2. Proyek Impor
  3. Jelajahi build.gradle di dalam repositori hasil kloning dan buka

Itu saja

PS: Android Studio kemudian, melalui pakar, akan mendapatkan plugin gradle dengan anggapan build.gradle Anda mirip dengan ini:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

Android studio akan menghasilkan konten folder .idea (termasuk workspace.xml, yang seharusnya tidak ada dalam kontrol sumber karena dihasilkan ) dan folder .gradle.

Pendekatan ini ramah Eclipse karena kontrol sumbernya tidak benar-benar tahu apa-apa tentang Android Studio. Android Studio hanya perlu build.gradle untuk mengimpor proyek dan menghasilkan sisanya.

diegosasw
sumber
5
Guys, mereka yang memberikan suara negatif harus memberikan alasan yang sah untuk melakukannya. Mungkin bermanfaat untuk memberi tahu kita semua jika kita salah dengan jawaban kita.
diegosasw
1
There is NO NEEDya ada beberapa kasus: template hak cipta yang perlu dibagikan kepada anggota tim, misalnya.
Henrique de Sousa
8

Saya mendukung pembuatan folder .idea (tidak termasuk workspace.xmldan tasks.xml). Tapi saya mulai sampai pada kesimpulan bahwa file .iml harus diabaikan.

Inilah masalahnya:

Buka proyek di direktori bernama "foo" misalnya dan Anda akan mendapatkan foo.iml dan itu semua tampak baik dan bagus. Masalahnya adalah jika saya cukup mengganti nama direktori menjadi foo2 (atau mengkloningnya menjadi nama direktori lain) ketika Anda mencoba membuka proyek di Android Studio, Anda akan mendapatkan tiga hal:

  • File iml baru bernama foo2.iml
  • File iml untuk proyek Android Anda akan diubah untuk menunjuk sekarang ke foo2 sebagai induknya
  • .idea / modules.xml akan memiliki baris yang ditambahkan untuk foo2.iml sehingga ia memiliki file iml lama dan yang untuk direktori baru

Saya tidak dapat menemukan cara untuk mencegah Android Studio melakukan pembuatan file iml ini ketika proyek disimpan di direktori yang berbeda. Menambahkannya ke kontrol sumber akan menyebabkan masalah. Karena itu saya pikir mungkin kita harus mengabaikan file * .iml dan.idea/modules.xml

linquize
sumber
Saya mengabaikan keduanya /.ideadan .imlfile. Saya ingin mendengar mengapa .ideafolder tersebut harus dikomit.
theblang
Melihat proyek saya saat ini, saya kira hanya ada 2 hal yang saya periksa dari .idea /: pengaturan gaya kode untuk memberlakukan bagi tim dan kamus pengguna yang berisi kata-kata khusus untuk proyek yang bukan kata-kata nyata. Saya mulai dengan banyak file di .idea yang dikomit, tetapi ketika file mulai muncul karena diubah tanpa alasan yang baik, file itu akan ditambahkan ke .gitignore. Maksud saya bukan begitu banyak .idea harus diperiksa seperti yang dikatakan file .iml dan modules.xml seharusnya tidak.
Maaf, SANGAT mengambil komentar saya sebelum saya selesai (harus ingat bahwa komentar tidak menerima jeda baris). Diedit dengan sisa pikiranku.
Terima kasih! Ya, file-file yang Anda sebutkan itu masuk akal. Saya setuju, sakit kepala terbesar adalah library.xmlfile yang terus memicu pesan. Juga, saya tidak mengerti mengapa saya terus melihat orang mengatakan bahwa file * .iml harus dimasukkan, sangat bagus di sana.
theblang
8

Diuji dengan Android Studio 3.0

Anda mungkin perlu menginstal .ignore plugin.

Anda dapat membuat file .gitignore secara otomatis untuk Android. Klik kanan pada folder dan ikuti

Tambahkan file .gitignore

Kemudian Pilih Android dari panel kiri dan klik Hasilkan

Hasilkan file .gitignore

Android Studio akan menghasilkan file .gitignore yang berisi semua file yang perlu diabaikan.

Diambil dari http://menukanows.com/how-to-add-gitignore-file-in-android-project/

Menuka Ishan
sumber
7

Tergantung pada bagaimana format proyek Anda dipertahankan:

Anda memiliki dua opsi:

  1. Format berbasis direktori (Anda akan memiliki .ideafolder yang berisi file spesifik proyek)
  2. Format berbasis file (file konfigurasi adalah .iwsdan .ipr)

Ref: http://www.jetbrains.com/idea/webhelp/project.html

File yang berkomitmen untuk kontrol versi tergantung pada hal di atas:

  1. Sertakan folder .idea ke kontrol versi, kecualikan workspace.xmldan tasks.xml
  2. .iprFile kontrol versi dan semua .imlfile modul, mengecualikan .iwsfile karena menyimpan pengaturan spesifik pengguna.

Ref: https://intellij-support.jetbrains.com/entries/23393067

ramk
sumber
1
semua proyek saya tampaknya memiliki kedua folder .idea dan file
.iws
1
Secara pribadi saya mencoba mengikuti saran dari JetBrains tetapi tidak berhasil untuk saya. Saya dan pengembang lain menggunakan Android Studio dan kami memiliki file .idea dan .iml di git. Saya segera mengetahui bahwa setelah Anda mulai menggabungkan komit dan mendapatkan semua jenis masalah ketika alat gabungan gagal untuk menggabungkan salah satu file di bawah jalur .idea. Sebagai hasilnya saya menambahkan semua imls dan .idea ke gitignore. Bagaimanapun, Studio melakukan pekerjaan yang sangat baik untuk membuat struktur proyek ketika mengimpor proyek Gradle. Jadi sekarang saya hanya memperhatikan apa yang saya miliki di file gradle saya.
zmicer
5

Pada dasarnya setiap file yang secara otomatis dibuat ulang.

Tes yang bagus adalah mengkloning repo Anda dan melihat apakah Android Studio dapat menafsirkan dan menjalankan proyek Anda segera (menghasilkan apa yang hilang).
Jika tidak, cari yang hilang, dan pastikan tidak diabaikan, tetapi ditambahkan ke repo.

Yang sedang berkata, Anda dapat mengambil contoh pada .gitignorefile yang ada , seperti yang Android .

# built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# generated files
bin/
gen/

# Local configuration file (sdk path, etc)
local.properties

# Eclipse project files
.classpath
.project

# Proguard folder generated by Eclipse
proguard/

# Intellij project files
*.iml
*.ipr
*.iws
.idea/
VonC
sumber
11
Ini salah. Anda harus memeriksa file * .iml Anda, dan kemungkinan besar .idea dan * .ipr juga. Bagian "apa pun yang dihasilkan secara otomatis" sangat salah. Kebanyakan proyek Android dihasilkan secara otomatis.
Sky Kelsey
6
* .Iml, * .idea dan * .ipr khusus untuk Android-Studio / IntelliJ. Mereka tidak diperlukan untuk membangun proyek. Karena mereka adalah IDE-spesifik, dan bukan rantai-spesifik, mereka mungkin tidak boleh diperiksa. Semua orang dapat menggunakan IDE apa pun, tidak ada alasan untuk memeriksa file proyek IntelliJ dan bukan yang Eclipse, misalnya.
Marc Plano-Lesay
2
Jika Anda ingin bekerja pada beberapa fork dari proyek yang sama, atau dengan tim di mana setiap orang menggunakan IDE yang sama, atau memiliki kontrol versi pengaturan rumit yang Anda gunakan untuk IDE Anda, maka ya, Anda harus memeriksa file di. File proyek untuk IntelliJ lebih dari sekadar bulu halus yang digunakan untuk membuka kode Anda di editor.
Sky Kelsey
2
mengapa file iml saya terus ditampilkan seperti yang diubah antara saya dan rekan saya? khususnya external.root.project.path terus berubah di bawah tag <module />
Sam
Menggunakan Android Studio 0.8.12 pada Windows 8.1 dan pada OS X Mavericks dengan proyek yang sama, saya perhatikan bahwa dua file berikut dapat dimodifikasi dan ditandai sebagai diubah oleh Git ketika saya membuka proyek: <project name> .iml dan .idea \ misc.xml. Secara khusus: <excludeFolder url = "file: // $ MODULE_DIR $ / build / tmp" /> ditambahkan atau dihapus ke / dari <nama proyek> .iml dan .idea \ misc.xml diubah karena JDK menginstal perbedaan antara OS.
jkwuc89
4

Saya halal dengan menambahkan file .iml dan Intellij sez untuk menambahkan folder .idea tetapi abaikan .idea / workspace.xml dan .idea / task.xml, tetapi bagaimana dengan .idea / libraries /?

Saya tidak mengerti bagaimana menambahkan ini. Ini memiliki daftar file XML yang berisi daftar pustaka yang seharusnya diketahui oleh proyek Android Studio. Ini seharusnya berasal dari dependensi yang ditentukan build.gradle - bukan file proyek IDE.

Juga isi dari salah satu file ini terlihat seperti ini:

<component name="libraryTable">
    <CLASSES>
       <root url="jar://$USER_HOME$/.gradle/caches/artifacts-26/filestore/com.example/example/etc...jar!"/>

Tidak masuk akal untuk melakukan ini. Bagaimana jika pengguna menentukan direktori home yang berbeda untuk gradle, atau jika mereka menggunakan versi gradle yang berbeda, jalur di bawahnya .gradle/caches/artifacts-xxxakan berbeda untuk mereka (yaitu artifacts-angka yang ditambahkan di akhir akan berhubungan dengan rilis versi gradle yang Anda gunakan. ) Jalur ini tidak universal, namun sarannya adalah memeriksa semua ini?

zenocon
sumber
4

Pada Android Studio 0.8.4 .gitignorefile dihasilkan secara otomatis ketika memulai proyek baru. Secara default itu berisi:

.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
Johnny Doe
sumber
3

Saya tahu ini adalah topik lama dan tentu saja ada banyak pilihan, tetapi saya lebih suka gibooleh Simon Whitaker. Sangat mudah digunakan, lintas platform (mac, * nix, dan windows), dan menggunakan gitignorerepo github sehingga (pada dasarnya) selalu terbarui.

Pastikan cache lokal Anda terbaru:

    $ gibo --upgrade
    From https://github.com/github/gitignore
     * branch            master     -> FETCH_HEAD
    Current branch master is up to date.

Cari bahasa / teknologi yang Anda butuhkan:

    $ gibo --search android
    Android

Tampilkan file .gitignore:

    $ gibo Android
    ### Android

    # Built application files
    *.apk
    *.ap_

    # Files for the Dalvik VM
    *.dex

    # Java class files
    *.class

    # Generated files
    bin/
    gen/

    # Gradle files
    .gradle/
    build/

    # Local configuration file (sdk path, etc)
    local.properties

    # Proguard folder generated by Eclipse
    proguard/

    # Log Files
    *.log

Sekarang, tambahkan ke file .gitignore proyek Anda:

    $ gibo Android >> .gitignore

(Pastikan Anda menggunakan >>untuk menambahkan file .gitignore proyek Anda; orang >akan menimpanya - seperti yang telah saya lakukan berkali-kali secara tidak sengaja!)

Saya tahu ini bukan menjawab pertanyaan persis OP, tetapi menggunakan gibo membuatnya jadi Anda tidak perlu memikirkan 'pertanyaan' lagi! .. ini bagus! ;)

wasatchwizard
sumber
3

Untuk mendapatkan ide yang lebih baik, yang Anda butuhkan hanyalah file-file berikut

  • aplikasi
  • build.gradle
  • settings.gradle

Struktur proyek Android dasar

Anda dapat memasukkan yang lainnya di file .gitignore. Semua perubahan aplikasi Anda sebagian besar terletak di file dan folder ini. Sisanya yang Anda lihat di proyek dasar adalah file gradle build atau file konfigurasi Android Studio.

Jika Anda menggunakan Android Studio, Anda dapat menggunakan "Impor proyek" untuk berhasil membangun proyek. Atau Anda dapat membangun menggunakan baris perintah, ikuti Membangun Proyek Android dengan Gradle .

kalan nawarathne
sumber
3

Yang terbaik adalah menambahkan daftar .gitignore melalui waktu pengembangan untuk mencegah efek samping yang tidak diketahui ketika Kontrol Versi tidak akan berfungsi karena beberapa alasan karena daftar yang telah ditentukan (salin / tempel) dari suatu tempat. Untuk salah satu proyek saya, daftar abaikan hanya dari:

.gradle
.idea
libs
obj
build
*.log
Tim Long
sumber
3

Github memelihara item gitignore yang berguna untuk berbagai jenis proyek. Berikut adalah daftar item gitignore yang berguna untuk proyek android.

# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# Intellij
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/libraries

# Keystore files
*.jks

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# Google Services (e.g. APIs or Firebase)
google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json

Android Gitignore di github

Sudip Bhandari
sumber
3
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah. - Dari Ulasan
imtheman
@imtheman masuk akal .. Saya telah memperbarui jawabannya dan meletakkan tautan sebagai referensi
Sudip Bhandari
2

Saya menggabungkan file Github .gitignore

### Github Android.gitignore ### 

# Built application files
*.apk
*.ap_

# Files for the Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

### Github JetBrains.gitignore ### 

# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio

*.iml

## Directory-based project format:
.idea/
# if you remove the above rule, at least ignore the following:

# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries

# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml

# Gradle:
# .idea/gradle.xml
# .idea/libraries

# Mongo Explorer plugin:
# .idea/mongoSettings.xml

## File-based project format:
*.ipr
*.iws

## Plugin-specific files:

# IntelliJ
/out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties

Harap baca: Dukungan JetBrains: Cara mengelola proyek di bawah Sistem Kontrol Versi

d.danailov
sumber
2
Pada 2016, saya mengikuti jawaban ini sebagai yang paling dekat dengan kebutuhan kita. Terima kasih
Henrique de Sousa
2

Menggunakan api yang disediakan oleh gitignore.io , Anda bisa dapatkan secara otomatis. Berikut adalah tautan langsungnya juga gitignore.io/api/androidstudio

### AndroidStudio ###
# Covers files to be ignored for android development using Android Studio.

# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle
.gradle/
build/

# Signing files
.signing/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio
/*/build/
/*/local.properties
/*/out
/*/*/build
/*/*/production
captures/
.navigation/
*.ipr
*~
*.swp

# Android Patch
gen-external-apklibs

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# NDK
obj/

# IntelliJ IDEA
*.iml
*.iws
/out/

# User-specific configurations
.idea/caches/
.idea/libraries/
.idea/shelf/
.idea/workspace.xml
.idea/tasks.xml
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml
.idea/datasources.xml
.idea/dataSources.ids
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
.idea/assetWizardSettings.xml

# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Legacy Eclipse project files
.classpath
.project
.cproject
.settings/

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.war
*.ear

# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml)
hs_err_pid*

## Plugin-specific files:

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Mongo Explorer plugin
.idea/mongoSettings.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

### AndroidStudio Patch ###

!/gradle/wrapper/gradle-wrapper.jar

# End of https://www.gitignore.io/api/androidstudio
Daniyal Javaid
sumber
1

Pada Android Studio 0.8.4 .gitignore file dihasilkan secara otomatis ketika memulai proyek baru. Secara default itu berisi:

.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
build/
/captures

Saya setuju dengan pernyataan ini, namun saya memodifikasi file ini untuk mengubah / membangun menjadi / (Ini akan mencakup / membangun dan / app / build) Jadi saya tidak berakhir dengan semua file di app / build dalam repositori saya.

Perhatikan juga bahwa jika Anda mengimpor proyek dari Eclipse, .gitignore tidak akan disalin, atau "secara otomatis" dibuat untuk Anda.

guyland123
sumber
0

Kompilasi:

#built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# generated files
bin/
gen/

# Gradle files
.gradle/
build/
/*/build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Windows thumbnail db
Thumbs.db

# OSX files
.DS_Store

# Eclipse project files
.classpath
.project

# Android Studio
*.iml
.idea
#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.
.gradle
build/

# Intellij project files
*.iml
*.ipr
*.iws
.idea/
Aqib Mumtaz
sumber
0

Untuk menghindari impor semua file, di mana Android Studio mengabaikan daftar "File yang Diabaikan", tetapi masih memanfaatkan Android Studio VCS, saya melakukan hal berikut: Ini akan menggunakan daftar "File yang Diabaikan" dari Android Studio (setelah impor! Tidak selama) DAN menghindari harus menggunakan cara rumit Tortoise SVN menetapkan svn: daftar abaikan.

  1. Gunakan browser repositori Tortoise SVN untuk membuat folder proyek baru secara langsung di repositori.
  2. Gunakan Tortoise SVN untuk checkout folder baru di atas folder yang ingin Anda impor. Anda akan mendapat peringatan bahwa folder lokal tidak kosong. Abaikan peringatan itu. Sekarang Anda memiliki folder tingkat atas versi dengan konten tidak berversi.
  3. Buka proyek Anda dari direktori kerja lokal. VCS sekarang harus diaktifkan secara otomatis
  4. Atur pengecualian file Anda di File -> Pengaturan -> Kontrol Versi -> File yang Diabaikan
  5. Tambahkan file ke SVN dari Android Studio: pilih 'Aplikasi' dalam Struktur Proyek -> VCS -> Tambahkan ke VCS (ini akan menambahkan semua file, kecuali "File yang Diabaikan")
  6. Perubahan Komit

Ke depan, "File yang Diabaikan" akan diabaikan dan Anda masih dapat mengelola VCS dari Android Studio.

Ceria, -Joost

Joost
sumber
0

Android Studio 3.5.3

Saya menggunakan ini untuk perpustakaan dan proyek saya dan itu mencakup sebagian besar file yang dihasilkan oleh android studio dan alat-alat terkenal lainnya:

# Built application files
*.apk
*.ap_
*.aab

# Files for the ART/Dalvik VM
*.dex

# Generated files
bin/
gen/
out/
app/release/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# IntelliJ
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
.idea/caches

# Keystore files
# Uncomment the following lines if you do not want to check your keystore files in.
#*.jks
#*.keystore

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# Freeline
freeline.py
freeline/
freeline_project_description.json

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md

#NDK
*.so
Squti
sumber
0

Ini dibuat menggunakan referensi http://gitignore.io/ Di mana Anda dapat membuat file gitignore terbaru yang diperbarui untuk proyek apa pun. Untuk Android http://gitignore.io/api/androidstudio . Semoga ini membantu. Saat ini saya menggunakan Android Studio 3.6.3

# Created by https://www.gitignore.io/api/androidstudio
# Edit at https://www.gitignore.io/?templates=androidstudio

### AndroidStudio ###
# Covers files to be ignored for android development using Android Studio.

# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle
.gradle/
build/

# Signing files
.signing/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio
/*/build/
/*/local.properties
/*/out
/*/*/build
/*/*/production
captures/
.navigation/
*.ipr
*~
*.swp

# Android Patch
gen-external-apklibs

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# NDK
obj/

# IntelliJ IDEA
*.iml
*.iws
/out/

# User-specific configurations
.idea/caches/
.idea/libraries/
.idea/shelf/
.idea/workspace.xml
.idea/tasks.xml
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml
.idea/datasources.xml
.idea/dataSources.ids
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
.idea/assetWizardSettings.xml

# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Legacy Eclipse project files
.classpath
.project
.cproject
.settings/

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.war
*.ear

# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml)
hs_err_pid*

## Plugin-specific files:

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Mongo Explorer plugin
.idea/mongoSettings.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

### AndroidStudio Patch ###

!/gradle/wrapper/gradle-wrapper.jar

# End of https://www.gitignore.io/api/androidstudio
Vinodh Ram
sumber
-1

Ini dokumentasi resmi dari JetBrains Dukungan mengatakan berikut harus dimasukkan:

All files under .idea directory except workspace.xml and tasks.xml because
    they store specific user settings
All the *.iml files that can be located in different module directories

Ini juga memberikan rekomendasi lain tentang hal-hal yang harus diperhatikan.

derek
sumber
1
Mengapa ini ditolak? Vote downs tanpa penjelasan adalah hal terburuk tentang SO.
derek
-1

.gitignore dari perpustakaan AndroidRate

# Copyright 2017 - 2018 Vorlonsoft LLC
#
# Licensed under The MIT License (MIT)

# Built application files
*.ap_
*.apk

# Built library files
*.aar
*.jar

# Built native files
*.o
*.so

# Files for the Dalvik/Android Runtime (ART)
*.dex
*.odex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

# Local configuration file (sdk/ndk path, etc)
local.properties

# Windows thumbnail cache
Thumbs.db

# macOS
.DS_Store/

# Log Files
*.log

# Android Studio
.navigation/
captures/
output.json

# NDK
.externalNativeBuild/
obj/

# IntelliJ
## User-specific stuff
.idea/**/tasks.xml
.idea/**/workspace.xml
.idea/dictionaries
## Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/dynamic.xml
.idea/**/sqlDataSources.xml
.idea/**/uiDesigner.xml
## Gradle
.idea/**/gradle.xml
.idea/**/libraries
## VCS
.idea/vcs.xml
## Module files
*.iml
## File-based project format
*.iws
Alexander Savin
sumber
-1

https://github.com/github/gitignore adalah koleksi yang mengagumkan

Android.gitignore

# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# IntelliJ
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
.idea/caches

# Keystore files
# Uncomment the following line if you do not want to check your keystore files in.
#*.jks

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# Google Services (e.g. APIs or Firebase)
google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md
shellhub
sumber