.gitignore taahhütten sonra


210

Github'da barındırılan bir git depom var. Birçok dosyayı işledikten sonra , dosyaları oluşturup .gitignorehariç tutmam gerektiğini anlıyorum ..exe.obj

Ancak, bu taahhütlü dosyaları depodan otomatik olarak kaldıracak mı? Bunu zorlamanın bir yolu var mı?


6
Gelecekteki Google çalışanları bunu son derece yararlı bulabilir. Kısa ve öz: git-tower.com/learn/git/faq/ignore-tracked-files-in-git
Austin Dean

Yanıtlar:


331

Hayır, repo'da zaten taahhüt edilmiş olan bir dosyayı, yalnızca .gitignore

git rm --cachedDepoda istemediğiniz dosyaları kaldırmanız gerekir . (- muhtemelen yerel kopyayı tutmak, ancak depodan çıkarmak istediğiniz için önbelleğe alınır.) Yani tüm exe'leri depodan kaldırmak istiyorsanız

git rm --cached /\*.exe

(Yıldız işaretinin * kabuktan alıntılandığına dikkat edin - bu, kabuk yerine dosya ve alt dizinlerin yol adlarını genişletmenize izin verir)


6
@Madhur Ahuja Aslında bunu yaparsanız repodaki git rm /\*.exetüm
exe'leri siler

4
/ \ 'Ne içindir?
Costa

5
@Costa, kabuğun amaçlandığı gibi yorumlanmasını önlemek için yıldız işaretinden kaçmak için oradalar git.
Lambart

2
Uyarı: Dosyalar yerel olarak tutulur, doğrudur ... Ancak bir çalışan diğer kullanıcılar git pulldosyalarının silindiğini görür.
ByScripts

42

Ancak, bu taahhütlü dosyaları depodan otomatik olarak kaldıracak mı?

Hayır. Var olan bir .gitignoredosyada bile "yoksayılan" dosyaları -f(force) bayrağıyla sahne alabilirsiniz . Dosyaları zaten işlenmişse, otomatik olarak kaldırılmazlar.

git rm --cached path/to/ignored.exe

Bu ayrı ayrı her .exe kaldırmak zorunda mı
Madhur Ahuja

Muhtemelen bunu toplu yapabilirsiniz, ancak bunun pencereler altında nasıl çalıştığını bilmiyorum
KingCrunch

30

Değişiklikleri daha önce yapmadıysanız:

git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push

15

.İdea ve hedef klasörleri kaldırmak zorunda kaldı ve tüm yorumları okuduktan sonra bu benim için çalıştı:

git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'

ve sonra ustalaşmak için


.ideabenim sorunumdu sanırım senin de oldu:)
Olivier Pons

5

Ancak, bu taahhütlü dosyaları depodan otomatik olarak kaldıracak mı?

Hayır.

Bunu yapmak için 'en iyi' tarif git filter-branchburada hakkında yazıldığı gibi kullanıyor :

Git-filter-branch kılavuz sayfası kapsamlı örnekler içermektedir.

Not Geçmişi yeniden yazacaksınız. Yanlışlıkla eklenen dosyaları içeren herhangi bir düzeltme yayınladıysanız, bu, bu genel şubelerin kullanıcıları için sorun yaratabilir. Onları bilgilendirin veya dosyaları kaldırmanın ne kadar kötü olduğunu düşünün.

Not Etiketlerin varlığında her zaman için --tag-name-filter catseçeneğini kullanın git filter-branch. Asla acıtmaz ve daha sonra ihtiyacınız olduğunu fark ettiğinizde baş ağrınızı kurtaracaktır.


Bu komutu çalıştırdım, yeniden yazım 57c1f1f04a3ed01f50c3260714cfc82c973ac816 (3/3) UYARI: Ref 'refs / heads / master' değişmedi ve hiçbir şey olmadı
Madhur Ahuja

Bu bir uyarıdır ve büyük olasılıkla ana dalın kaldırılacak dosyalarla herhangi bir düzeltme içermediğini (henüz) içermediği anlamına gelir. Bunu kolayca kontrol edebilirsiniz. Bir sorun varsa, lütfen soruyu güncelleyin. PS: kullanın - --alltüm (yerel) şubeleri bir kerede yeniden yazmak için -
46'da sehe

1

Dosyaları sildikten ve tamamladıktan sonra bile, geçmişte bu dosyalara sahip olursunuz. Bunları silmek için BFG Repo-Cleaner kullanın . Git-filtre-dalına bir alternatiftir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.