Gitignore dosyasını güncelledikten sonra bir git deposunu "yenilemek" mümkün müdür?
Gitignore'uma daha fazla cehalet (?) Ekledim ve yeni dosyayla eşleşen repodaki şeyleri kaldırmak istiyorum.
Gitignore dosyasını güncelledikten sonra bir git deposunu "yenilemek" mümkün müdür?
Gitignore'uma daha fazla cehalet (?) Ekledim ve yeni dosyayla eşleşen repodaki şeyleri kaldırmak istiyorum.
Yanıtlar:
" .Gitignore dosyası yoksayılmıyor " bölümünde belirtilen çözüm biraz aşırı, ama çalışması gerekir:
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( aşağıdaki jball037 yorumları olarak herhangi bir olaydan kaçınmak için önce saklamak istediğiniz değişiklikleri yaptığınızdan emin olun .
Bu seçenek, dosyalarınızı diskinizde olmasına rağmen tutacaktır.) --cached
Ayrıca " Git'in zaten izlenen dosyaları yoksaymasını sağlama " blog yazısında daha ayrıntılı bir çözüm var :
git rm --cached `git ls-files -i --exclude-standard`
Bassim anlaşılacağı onun düzenleyin :
Gibi bir hata mesajı alırsanız
fatal: path spec '...' did not match any files, yollarında boşluk bulunan dosyalar olabilir.Seçenek ile diğer tüm dosyaları kaldırabilirsiniz
--ignore-unmatch:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
ancak eşleşmeyen dosyalar deponuzda kalır ve yollarını çift tırnak işareti içine alarak eklentilerin kaldırılması gerekir:
git rm --cached "<path.to.remaining.file>"
Yanlış anlayabilirim, ancak yeni yok sayılan dosyaları silmeye mi çalışıyorsunuz yoksa bu dosyalarda yapılan yeni değişiklikleri yoksaymak mı istiyorsunuz? Bu durumda, şey çalışıyor.
Daha önce taahhüt edilen yok sayılan dosyaları silmek istiyorsanız,
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard git commit -m '' temizlemek
Bunun eski bir soru olduğunu biliyorum, ancak dosya adları boşluk içeriyorsa gracchus'un çözümü çalışmaz. VonC'nin boşluklu isimleri dosyalama çözümü, bunları kullanarak kaldırmak değil --ignore-unmatch, daha sonra manuel olarak kaldırmaktır, ancak çok varsa bu iyi çalışmaz.
İşte tüm dosyaları yakalamak için bash dizilerini kullanan bir çözüm.
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'