Gitignore tidak berfungsi

276

.gitignoreFile saya tidak berfungsi karena suatu alasan, dan tidak ada jumlah Googling yang dapat memperbaikinya. Inilah yang saya miliki:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

Itu ada di direktori master, yang merupakan repositori git saya. Saya menjalankan Git 1.8.4.2 karena saya menggunakan MacBook yang menjalankan OSX 10.8.6.

pengguna3280133
sumber
4
1. file apa yang diindeks meskipun seharusnya tidak? 2. Apakah Anda menambahkan .gitignore setelah Anda menambahkan file-file ini ke repo?
Ahmad
2
@Ahmad Dalam beberapa proyek /bin/folder masih menunjukkan ketika saya melakukan git status. Saya belum mengubah file-file itu sejak saya menambahkan.gitignore
user3280133
1
"Sejak saya menambahkan .gitignore" - jadi Anda menambahkan .gitignore setelah menambahkan file?
Ahmad
3
kemungkinan duplikat .gitignore tidak berfungsi
Liam

Jawaban:

687

File / folder di kontrol versi Anda tidak akan hanya menghapus sendiri hanya karena Anda menambahkannya ke .gitignore. Mereka sudah ada di repositori dan Anda harus menghapusnya. Anda bisa melakukannya dengan ini:

( Ingatlah untuk melakukan semua yang telah Anda ubah sebelum Anda melakukan ini. )

git rm -rf --cached .
git add .

Ini menghapus semua file dari repositori dan menambahkannya kembali (kali ini menghormati aturan di Anda .gitignore).

Ahmad
sumber
2
atau Anda bisa mencoba mengembalikan file / folder yang Anda tambahkan ke .gitignore menggunakan git checkout folder_to_ignore / *
Zahra
1
@Greenish tetapi itu tidak akan berfungsi jika mereka sudah berkomitmen, hanya akan bekerja jika mereka telah dipentaskan, yang dalam kasus folder sudah ada di .gitignore tidak boleh terjadi (kecuali jika Anda memaksa menambahkan) :)
Ahmad
1
tidak berfungsi untuk saya ketika saya mendorong perubahan ke github. Mengatakan semuanya up to date !!!!
Dr. Younes Henni
1
Maaf Ahmed, saya memperbaiki masalah saya dengan menghapus file gitignore dan menarik dan mendorong lagi ke repo jarak jauh. Saya tidak lagi ingat apa yang dikatakan ketika saya mengetik status git. Masalah saya sudah diperbaiki. Terima kasih banyak.
Dr. Younes Henni
3
Saya pikir lebih baik git menambahkan perintah 'git abaikan' untuk menyederhanakan ini. Dengan demikian kita bisa menggunakannya git ignore path/filekapan saja.
Tiw
123

Untuk membuka kembali file tunggal yang telah ditambahkan / diinisialisasi ke repositori Anda, yaitu, berhenti melacak file tetapi tidak menghapusnya dari sistem Anda gunakan: git rm --cached filename

Untuk membuka kembali setiap file yang sekarang ada di Anda .gitignore:

Pertama komit setiap perubahan kode yang luar biasa, dan kemudian, jalankan perintah ini:

git rm -r --cached .

Ini menghapus semua file yang diubah dari indeks (area pementasan), kemudian jalankan:

git add .

Komit:

git commit -m ".gitignore is now working"
Nicolas
sumber
Pastikan untuk menggabungkan cabang Anda kembali untuk menguasai atau memindahkan pointer Anda karena ketika saya mencoba ini saya kehilangan kedua cabang fitur saya. Untungnya saya tidak kehilangan pekerjaan apa pun, semua pembaruan saya yang terbaru dari cabang kerja diatur ulang ke cabang utama tetapi tergantung pada pengaturan Anda, perilaku ini mungkin tidak diinginkan.
Sledge
Bagaimana Anda menggunakan perintah ini untuk menghapus folder dari cache alih-alih file?
RealMJDev
15

Setelah turun sedikit dari lubang kelinci mencoba mengikuti jawaban untuk pertanyaan ini (mungkin karena saya harus melakukan ini dalam proyek studio visual), saya menemukan jalan yang lebih mudah adalah dengan

  1. Potong dan tempel file yang tidak lagi ingin saya lacak ke lokasi sementara

  2. Lakukan "penghapusan" file-file itu

  3. Lakukan modifikasi .gitignoreuntuk mengecualikan file yang saya pindah sementara

  4. Pindahkan file kembali ke folder.

Saya menemukan ini menjadi cara yang paling lurus ke depan untuk melakukan hal itu (setidaknya di studio visual, atau saya akan menganggap lingkungan berbasis IDE heave lain seperti Android Studio), tanpa sengaja menembak kaki saya dengan kaki yang cukup luas git rm -rf --cached ., setelah itu proyek studio visual yang saya kerjakan tidak memuat.

Garrett Simpson
sumber
2
Saya cukup suka pendekatan ini - tampaknya kurang destruktif, bahkan jika itu tidak dianggap "tepat".
theyetiman
6

Dalam kasus saya itu adalah ruang kosong di awal file yang muncul dengan jelas ketika saya membuka file di Notepad, tidak jelas dalam Visual Studio Code.

S Saad
sumber
4

Saya menggunakan sesuatu untuk menghasilkan umum .gitignorebagi saya dan saya berlari ke ini. Setelah membaca @Ozesh, saya membuka kode VS karena memiliki indikator yang bagus di kanan bawah yang menunjukkan jenis akhir baris. Itu LF jadi saya dikonversi ke CRLF seperti yang disarankan tetapi tidak ada dadu.

Kemudian saya melihat di samping akhir baris dan memperhatikan bahwa itu disimpan menggunakan UTF16. Jadi saya res resize menggunakan UTF8 encoding voila, itu berhasil. Saya tidak berpikir CRLF itu penting jadi saya mengubahnya kembali ke LF untuk memastikan dan itu masih berfungsi.

Tentu saja ini bukan masalah OPs karena dia sudah melakukan file sehingga mereka sudah diindeks, tapi pikir saya akan berbagi kalau-kalau ada orang lain yang tersandung di sini.

TLDR ; Jika Anda belum mengkomit file dan .gitignore masih tidak dihormati maka periksa encoding file dan, pastikan UTF8-nya dan jika itu tidak berhasil maka mungkin coba main-main dengan akhiran baris.

DeezCashews
sumber
1
UTF16 adalah penyebabnya bagi saya. Kode VS yang dibuka> .gitignore dibuka> membuka prompt perintah> "Ubah file Encoding"> "UTF-8"> Simpan file
Michael
3

Dalam kasus saya spasi putih di akhir baris .gitignore adalah penyebabnya. Jadi hati-hati dengan spasi putih di .gitignore!

026
sumber
2

Saya memecahkan masalah saya dengan melakukan hal berikut:

Pertama-tama, saya adalah pengguna windows, tetapi saya telah menghadapi masalah serupa. Jadi, saya memposting solusi saya di sini.

Ada satu alasan sederhana mengapa terkadang .gitignore tidak berfungsi seperti yang seharusnya. Ini karena perilaku konversi EOL.

Ini adalah perbaikan cepat untuk itu

Edit> Konversi EOL> Format Windows> Simpan

Anda dapat menyalahkan pengaturan editor teks Anda untuk itu.

Sebagai contoh:

Karena saya seorang pengembang windows, saya biasanya menggunakan Notepad ++ untuk mengedit teks saya tidak seperti pengguna Vim.

Jadi yang terjadi adalah, ketika saya membuka file .gitignore saya menggunakan Notepad ++, tampilannya seperti ini:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Jika saya membuka file yang sama menggunakan Notepad default, inilah yang saya dapatkan

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

Jadi, Anda mungkin sudah menebak dengan melihat output. Segala sesuatu di .gitignore telah menjadi satu baris, dan karena ada ## pada awalnya, ia bertindak seolah-olah semuanya dikomentari.

Cara untuk memperbaikinya sederhana: Buka saja file .gitignore Anda dengan Notepad ++, lalu lakukan hal berikut

Edit> Konversi EOL> Format Windows> Simpan

Lain kali Anda membuka file yang sama dengan notepad default windows, semuanya harus diformat dengan benar. Cobalah dan lihat apakah ini cocok untuk Anda.

Ozesh
sumber
1

Juga, komentar harus sesuai dengan keinginan mereka. Mereka tidak dapat dimasukkan setelah entri. Jadi ini tidak akan berhasil:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

Tetapi ini akan berhasil:

# fine to comment here
/node_modules
Ben Pritchard
sumber
0

Apakah git reset --hardbekerja untuk siapa saja? Saya tidak mengatakan ini adalah solusi yang baik, sepertinya hanya berfungsi pertama kali saya mencoba.

pengguna1889992
sumber
Tolong abaikan komentar saya di atas. Seseorang di tempat kerja melakukan sesuatu yang sangat salah pada Git, itu menyebabkan folder duplikat dan saya tidak sadar untuk beberapa saat. Terima kasih.
user1889992
0

Saya melakukan kesalahan besar dengan mengedit dockerignore saya, bekerja dengan baik setelah saya menemukan file abaikan yang tepat: p


sumber
0

Menambahkan bit saya karena ini adalah pertanyaan yang populer.

Saya tidak dapat menempatkan direktori .history di dalam .gitignore karena apa pun kombo yang saya coba, itu tidak berhasil. Windows terus menghasilkan file baru di setiap penyimpanan dan saya tidak ingin melihatnya sama sekali.

masukkan deskripsi gambar di sini

Tetapi kemudian saya menyadari, ini hanyalah lingkungan pengembangan pribadi saya di mesin saya. Hal-hal seperti .history atau .vscode khusus untuk saya sehingga akan aneh jika semua orang memasukkan entri .gitignore mereka sendiri berdasarkan pada IDE atau OS apa yang mereka gunakan.

Jadi ini bekerja untuk saya, cukup tambahkan ".history" ke .git / info / kecualikan

echo ".history" >> .git/info/exclude
Daniel Katz
sumber