Saya memiliki repositori git yang hanya digunakan untuk menyimpan file grafik dan suara yang digunakan dalam beberapa proyek. Mereka semua berada dalam satu direktori tanpa sub-direktori. Sekarang saya baru saja membuat skrip untuk menyalin aset-aset ini dari direktori terstruktur lain, dengan beberapa tingkat sub-direktori.
Sekarang saya hanya ingin struktur file hierarki (sumber) dilacak oleh git, dan direktori datar (target) (dengan semua file dalam satu tumpukan) harus diabaikan.
Saya telah menambahkan direktori target ke .gitignore, tetapi git masih melacak perubahan di dalamnya. Saya pikir jika saya melakukan penghapusan file lama di direktori target, git mungkin berhenti melacak konten baru (disalin oleh skrip), tetapi tidak.
Bagaimana cara membuat git melupakan direktori target?
sumber
Jawaban:
Perintah ini akan menyebabkan git membuka direktori Anda dan semua file di bawahnya tanpa benar-benar menghapusnya:
git rm -r --cached <your directory>
The
-r
pilihan menyebabkan penghapusan semua file di bawah direktori Anda.The
--cached
pilihan menyebabkan file hanya dihapus dari indeks git, bukan copy pekerjaan Anda. Secara defaultgit rm <file>
akan menghapus<file>
.sumber
add -f
atau menjadi situasi Anda. Seperti yang dikatakan Gordon, ini membuat Anda tidak sengaja menghapus banyak file - repositori adalah daftar utama, bukan gitignore. Ini juga memungkinkan Anda melacak secara manual beberapa hal yang seharusnya diabaikan oleh aturan wildcard, sesuatu yang menurut saya berguna.-r
pilihan adalah tidak "menyebabkan penghapusan semua file di bawah direktori Anda" melainkan untuk recurse melalui subdirs.Jika Anda perlu memiliki file yang dilacak (check-in), tetapi tidak ingin melacak perubahan lebih lanjut dari file sambil menyimpannya di repositori lokal Anda dan juga di repositori jarak jauh, ini dapat dilakukan dengan:
Setelah itu segala perubahan pada file ini tidak akan lagi muncul di
git status
.sumber
git update-index --no-assume-unchanged dirname/**/*
Untuk subdirektori yang disebut
blah/
tambah ke git, kedua berikut tampaknya berfungsi untuk mengabaikan file baru diblah/
. Ditambahkan ke .gitignore:sumber
TL; DR untuk membersihkan repositori git Anda dan pastikan SEMUA item yang Anda abaikan memang diabaikan:
Catatan: Anda tidak perlu menentukan direktori, dengan cara ini Anda membersihkan seluruh repo jarak jauh .
Untuk lebih lanjut baca ini
sumber
Tidak yakin apakah ini penting atau membuat saya orang jahat, tapi begini saja.
*Generated*
ke file .gitignore rootdir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}
Saya merasa agak buruk tentang diri saya ... tetapi ternyata itu berhasil.
sumber
Ok, tampaknya Anda harus melakukan check-in terlebih dahulu dengan direktori yang benar-benar kosong (bukan file lama atau baru), dan semua file yang ditambahkan setelahnya akan diabaikan. Jika Anda menghapus file lama, tambahkan dan yang baru sebelum melakukan, yang baru ditambahkan ke repo meskipun mereka harus diabaikan.
Setidaknya, ini berhasil untuk saya dalam situasi ini. Akan tetap bagus jika ada yang bisa memberikan lebih banyak wawasan tentang apa yang terjadi.
sumber