gitignore tidak mengabaikan folder

135

Di root proyek saya, saya punya foofolder. Di dalam foofolder saya punya barfolder. Saya ingin mengabaikan semua perubahan pada semua file di dalam barfolder saya . Saya memiliki ini di gitignore:

/foo/bar

Folder dicentang: ada dan ada file yang harus diabaikan. gitignoreadalah committed. Namun, saya memiliki file tempat saya membuat moifikasi dan ada di dalam barfolder saya . Saat saya mengetik

git status

di dalam saya, git bashsaya melihat file yang seharusnya diabaikan. Apa yang bisa menjadi alasan dan bagaimana saya bisa berhasil mengabaikan semua file di dalam folder bar saya?

Perhatikan, bahwa file-file sebelumnya diabaikan dengan baris yang sama, tetapi saya harus sementara menghapus baris itu ke commitsesuatu di server. Setelah itu commit, saya memasukkan kembali garis ke dalam gitignore. Ini adalah saat yang lalu, tapi sekarang saya telah mengamati bahwa file akan di git status. Saya berharap dapat memodifikasi file yang diabaikan tanpa mereka muncul di git status.

Lajos Arpad
sumber
Di masa mendatang, Anda tidak perlu memodifikasi pengabaian Anda untuk menambahkan sesuatu yang diabaikan. git add -f ignored-fileakan menambahkan file bahkan jika Anda mengabaikannya.
Chris
Apa yang git status foo/bar/file-that-should-be-ignoredmemberi?
Chris
File yang harus diabaikan jika terjadi perubahan. Saya jelas kehilangan sesuatu, tetapi menurut pengetahuan saya, daftar status git harus kosong dalam kasus itu asalkan / foo / bar hadir di .gitignore
Lajos Arpad
4
Sepertinya file itu sebenarnya sedang dilacak oleh Git. Itu pasti telah ditambahkan ke repositori di beberapa titik. Anda dapat melihat riwayatnya bersama git log foo/bar/file-that-should-be-ignored. Jika tidak boleh menjadi bagian dari repositori Anda harus menghapusnya dengan git rm --cached foo/bar/file-that-should-be-ignoreddan kemudian komit seperti yang disarankan oleh Reck di bawah ini (meskipun saya hanya akan melakukannya pada file, bukan seluruh folder). Ini akan (a) menghapus file dari Git, (b) menyimpan file dalam salinan lokal Anda, dan (c) menyebabkan file dihapus ketika orang lain fetchatau pullyang baru melakukan.
Chris

Jawaban:

341

Saya menduga folder ini sudah diperiksa ke git sebelumnya?

Jalankan git rm -r --cached <folder>dan periksa lagi.

Diperhatikan
sumber
3
Ini sepenuhnya akan menghapus folder dari repo (versi saat ini). OP ingin folder ada di sana, tetapi perubahan baru tidak boleh dilacak
Gareth
Sayangnya saya harus menghapus penerimaan. Solusi ini menghapus versi jauh file ketika didorong. Saya ingin mengatur gitignore untuk mengabaikan semua file folder, bukan untuk menghapusnya dari jarak jauh. Apakah itu mungkin? Saya telah mengembalikan solusinya.
Lajos Arpad
12
git update-index --assume-unchanged <folder>mungkin?
Reck
3
@ Lajos tidakkah Anda baru saja memperbaiki bug-nya daripada menambahkan komentar "edit" yang membingungkan di sana?
cregox
2
@Cawas, karena situs ini membahas tentang berbagi pengetahuan, jawabannya adalah: tidak. Menyesatkan menerima jawaban yang berisi bug adalah menyesatkan. Itu -r bukan opsional.
Lajos Arpad
46

Bagi saya, jawaban yang diterima adalah bagian dari solusi, bukan keseluruhan solusi. Mungkin, langkah-langkah lain yang akan saya posting sudah jelas, tetapi saya melewatkannya terlebih dahulu. Inilah langkah-langkah yang saya ambil untuk memastikan .gitignorefile saya mengabaikan folder yang saya inginkan untuk diabaikan:

  1. Komit setiap perubahan yang perlu Anda perbaiki / ubah.
  2. Jalankan perintah ini: git rm -r --cached . (yang menghapus semuanya dari indeks git untuk menyegarkan repositori git Anda)
  3. Kemudian jalankan perintah ini: git add . (untuk menambahkan semuanya kembali ke repo)
  4. Akhirnya, komit perubahan ini menggunakan git commit -m ".gitignore Fixed"

Anda dapat menemukan tautan ke artikel dari mana saya menemukan solusinya di sini .

sikanderBabwani
sumber
1
Ini bukan solusi yang layak berdasarkan pertanyaan awal. @ lagos-arpad secara khusus bertanya tentang subdirektori dan bukan keseluruhan proyek. Solusi Anda menghapus semuanya dari tingkat dasar repositori git dan ini bukan pendekatan yang disarankan untuk menangani masalah ini.
justinhartman
Bahkan jika itu hanya subdirektori, solusi ini bekerja untuk saya karena saya hanya berurusan dengan satu file. Bisakah Anda jelaskan mengapa itu tidak dianjurkan?
sikanderBabwani
1
Apa yang Anda hadapi tidak penting. Ini bukan jawaban untuk pertanyaan dan berpotensi berbahaya seperti yang ditunjukkan oleh jawaban lain. Ini menghapus hal-hal pada repo jarak jauh yang tidak Anda inginkan.
RichieHH
8

Saya mengalami masalah ini dan saya menyadari bahwa git sebenarnya mengabaikan file / folder dengan benar, tetapi editor kode saya (Visual Studio Code) hanya buggy dan tidak "memutihkan mereka" dengan benar di sidebar UI. Saya restart VSCode dan mereka diklik seperti yang diharapkan.

Mark Jackson
sumber
Sama di sini: Kode VS v1.30.2 (pengguna)
xinthose
Sama untuk ku. Terima kasih banyak atas solusi ini! Saya bertanya-tanya mengapa .gitignore saya tidak berfungsi sampai saya mencoba me-restart VS Code. Saya menggunakan Visual Studio Code v1.44.2.
Fritz Lim
6

Sebagai tambahan untuk jawaban yang diterima

git rm -r --cached /foo/bar/
git status

Ketika saya melakukan itu, terminal menunjukkan banyak rmfile dalam direktori itu. Jadi untuk mencegah komit lain yang mungkin tidak perlu mempengaruhi remote, saya saya lakukan:

git reset HEAD *
git status

Setelah itu, tidak ada yang dikatakan untuk dikomit dan ketika saya memodifikasi file di dalam /foo/bar/dan melakukan git statussaya masih mendapatkan nothing to commit.

belajarsemore
sumber
1
Ini mengembalikan saya ke tempat saya mulai (masalahnya)
Shonubi Korede