Hapus folder dari pelacakan git


404

Saya perlu mengecualikan folder (nama unggah) dari pelacakan. Saya mencoba lari

git rm -r --cached wordpress/wp-content/uploads

dan setelah itu saya menambahkan path ke .gitignore

/wordpress/wp-content/uploads

tetapi ketika saya berlari git statusmereka muncul sebagai dihapus. Jika saya mencoba melakukan perubahan, file akan dihapus, tidak hanya dihapus dari pelacakan.

Apa yang saya lakukan salah?

Saya juga sudah mencoba

git update-index --assume-unchanged <file>

tapi ini sepertinya hanya mengurai file. Tapi saya perlu menghapus seluruh folder (termasuk subfolder) dari pelacakan.


Dihapus tidak berarti git akan menghapus file Anda. Namun, jika Anda akan menggunakannya reset --hard, itu akan.
keltar

2
Seperti @keltar menyebutkan, melakukan tidak akan menyebabkan file Anda dihapus. Itu akan melakukan penghapusan mereka dari Git , tetapi copy pekerjaan Anda masih akan mengandung mereka. Tetapi jika Anda pullyang melakukan di tempat lain file-file itu akan dihapus dari sistem baru.
Chris

Jawaban:


868

Saya menemukan pertanyaan ini ketika mencari Google untuk "git remove folder from tracking". Pertanyaan OP membawa saya ke jawabannya. Saya merangkumnya di sini untuk generasi mendatang.

Pertanyaan

Bagaimana cara menghapus folder dari repositori git saya tanpa menghapusnya dari mesin lokal saya (yaitu, lingkungan pengembangan)?

Menjawab

Langkah 1. Tambahkan path folder ke .gitignorefile root repo Anda .

path_to_your_folder/

Langkah 2. Hapus folder dari pelacakan git lokal Anda, tetapi simpan di disk Anda.

git rm -r --cached path_to_your_folder/

Langkah 3. Dorong perubahan Anda ke repo git Anda.

Folder tersebut akan dianggap "dihapus" dari sudut pandang Git (yaitu mereka berada dalam sejarah masa lalu, tetapi tidak dalam komit terbaru, dan orang-orang yang menarik dari repo ini akan mendapatkan file dihapus dari pohon mereka), tetapi tetap di direktori kerja Anda karena kamu sudah menggunakan --cached.


2
Pertanyaan cepat, apakah path folder harus menjadi path lengkap? atau hanya path dengan repositori git yang bertindak sebagai basis?
HMSCelestia

Saya percaya itu adalah jalan penuh, tetapi tidak ingat pasti.
Tod Birdsall

7
"dan orang-orang yang menarik dari repo ini akan menghapus file dari pohon mereka" Bisakah saya mencegah ini?
Leo Gasparrini

ini menghapus file saya dengan benar dari pelacakan di cabang, tetapi menghapusnya setelah bergabung!
Harold

1
bagi saya masih ada. Juga - haruskah saya membatalkan pilihan file ketika melakukan yang ada di folder? Saya mencoba keduanya. Jika membatalkan pilihan, itu tidak memungkinkan untuk mendorong, tapi kemudian saya mengubah satu karakter di file lain yang harus dilacak. Masih tidak membantu
Darius.V

44

Ini bekerja untuk saya:

git rm -r --cached --ignore-unmatch folder_name

--ignore-unmatch penting di sini, tanpa opsi itu git akan keluar dengan kesalahan pada file pertama yang tidak ada dalam indeks.


unknown option 'ignore unmatched'
Inigo

Ini adalah bendera penting jika direktori itu kosong, terima kasih!
MNN

sangat berguna jika Anda hanya ingin menghapus ekstensi file tertentu dari direktori juga:git rm -r --cached --ignore-unmatch .idea/*.xml
takanuva15


8

Saya tahu ini adalah utas lama tetapi saya hanya ingin menambahkan sedikit karena solusi yang ditandai tidak menyelesaikan masalah bagi saya (walaupun saya mencoba berkali-kali).

Satu-satunya cara saya benar-benar bisa menghentikan git form melacak folder adalah dengan melakukan hal berikut:

  1. Buat cadangan folder lokal dan simpan di tempat yang aman.
  2. Hapus folder dari repo lokal Anda
  3. Pastikan cache dihapus git rm -r --cached your_folder/
  4. Tambahkan your_folder/ke .gitignore
  5. Komit perubahan
  6. Tambahkan cadangan kembali ke repo Anda

Anda seharusnya sekarang melihat bahwa folder tidak lagi dilacak.

Jangan tanya saya mengapa membersihkan cache saja tidak berhasil, saya bukan penyihir super Git, tetapi inilah cara saya memecahkan masalah.


Terima kasih!!! Git membuatku gila, tidak mengabaikan folder .metadata gerhana. Ikuti langkah-langkah Anda dengan folder .metadata eclipse, dan akhirnya berhasil.
MasterN8

5

Dari dokumentasi git:

Hal lain yang berguna yang mungkin ingin Anda lakukan adalah menyimpan file di pohon kerja Anda tetapi menghapusnya dari area pementasan Anda. Dengan kata lain, Anda mungkin ingin menyimpan file di hard drive Anda tetapi tidak memiliki Git melacaknya lagi. Ini sangat berguna jika Anda lupa menambahkan sesuatu ke file .gitignore Anda dan secara tidak sengaja mementaskannya, seperti file log besar atau sekelompok file .a yang dikompilasi. Untuk melakukan ini, gunakan opsi --cached:

$ git rm --cached readme.txt

Jadi mungkin tidak termasuk "-r"?


1
OP sudah mencoba --cached. The -rpilihan adalah untuk "recursive", yang harus dimasukkan dalam hal ini.
Chris

Saya menemukan ini berguna. Saya sedang mencari cara melakukannya di folder, dan kemudian melihat cara melakukannya pada file. Saya menandai komentar ini.
cahaya
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.