Git izlemeden bir klasörü kaldırma


404

Bir klasörü (ad yüklemeleri) izleme dışında bırakmam gerekiyor. Koşmaya çalıştım

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

ve bundan sonra .gitignore yolunu ekledim

/wordpress/wp-content/uploads

ama koştuğumda git statussilinmiş olarak görünürler. Değişiklikleri yapmaya çalışırsam, dosyalar yalnızca izlemeden kaldırılmaz, silinir.

Neyi yanlış yapıyorum?

Ben de denedim

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

ancak bu yalnızca dosyaları kaldırıyor gibi görünüyor. Ancak tüm klasörü (alt klasörler dahil) izlemeden kaldırmam gerekiyor.


Silindi, git'in dosyalarınızı sileceği anlamına gelmez. Ancak, kullanırsanız reset --hard, kullanacaktır.
keltar

2
@Keltar'ın belirttiği gibi, işlem yapmak dosyalarınızın silinmesine neden olmaz. Git'ten silinmelerini yapacak , ancak çalışan kopyanız yine de onları içerecektir. Eğer Ama eğer pullbaşka bir yerde taahhüt olanlar dosyalar edilecek yeni sistemden silinecek.
Chris

Yanıtlar:


867

Google'da "git klasörü klasörden kaldır" için bu soruya rastladım. OP'nin sorusu beni cevaba götürüyor. Gelecek nesiller için burada özetliyorum.

Soru

Bir klasörü yerel makinemden silmeden (yani geliştirme ortamı) git depomdan nasıl kaldırabilirim?

Cevap

Adım 1. Klasör yolunu deponuzun kök .gitignoredosyasına ekleyin .

path_to_your_folder/

Adım 2. Klasörü yerel git izlemenizden kaldırın, ancak diskinizde tutun.

git rm -r --cached path_to_your_folder/

Adım 3. Değişikliklerinizi git repo'nuza aktarın.

Klasör Git'in bakış açısından "silinmiş" olarak kabul edilecektir (yani geçmişte, ancak en son taahhütte değiller ve bu repodan çeken dosyalar ağaçlarından kaldırılır), ancak çalışma dizininizde kalır çünkü kullandın --cached.


2
Hızlı soru, klasör yolu tam yol olmalı mı? veya sadece git deposu üssü olan yol mu?
HMSCelestia

Tam yol olduğuna inanıyorum, ama kesin olarak hatırlamıyorum.
Tod Birdsall

7
"ve bu repodan çekilen insanlar dosyaları ağaçlarından alır" Bunu önleyebilir miyim?
Leo Gasparrini

bu, dosyalarımın bir şubedeki izlemesini doğru bir şekilde kaldırdı, ancak birleştirme işleminden sonra onları sildi!
Harold

1
benim için hala duruyor. Ayrıca - klasörde olanları işlerken bu dosyaların seçimini kaldırmalı mıyım? Her iki yolu denedim. Seçimi kaldırırsa, itmeye izin vermez, ancak daha sonra izlenmesi gereken başka bir dosyada bir karakter değiştirdim. Hala yardımcı olmuyor
Darius.V 13:17

44

Bu benim için çalışıyor:

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

--ignore-unmatch burada önemlidir, bu seçenek olmadan git dizinde olmayan ilk dosyada hata ile çıkacaktır.


unknown option 'ignore unmatched'
Inigo

Bu dizin boşsa önemli bir işarettir, teşekkür ederim!
MNN

bazı dosya uzantılarını bir git rm -r --cached --ignore-unmatch .idea/*.xml
dizinden


8

Bu eski bir iş parçacığı olduğunu biliyorum ama işaretli çözüm benim için sorunu çözmedi gibi biraz eklemek istedim (birçok kez denedim rağmen).

Aslında git formu klasör izleme durdurabilir tek yolu aşağıdakileri yapmak oldu:

  1. Yerel klasörün yedeğini alın ve güvenli bir yere koyun.
  2. Yerel repodan klasörü sil
  3. Önbelleğin temizlendiğinden emin olun git rm -r --cached your_folder/
  4. your_folder/.Gitignore'a ekle
  5. Değişiklikleri yap
  6. Yedeklemeyi tekrar deponuza ekleyin

Artık klasörün artık izlenmediğini görmelisiniz.

Neden önbelleği temizlemenin benim için işe yaramadığını sorma, Git süper sihirbazı değilim ama sorunu bu şekilde çözdüm.


Teşekkür ederim!!! Git beni tutulma .metadata klasörünü görmezden gelmemeye deli ediyordu. Eclipse .metadata klasörü ile adımlarınızı takip etti ve sonunda çalıştı.
MasterN8

5

Git belgelerinden:

Yapmak isteyebileceğiniz bir diğer yararlı şey, dosyayı çalışma ağacınızda tutmak, ancak hazırlama alanınızdan kaldırmaktır. Başka bir deyişle, dosyayı sabit diskinizde tutmak isteyebilirsiniz, ancak Git'in artık izlemesini istemeyebilirsiniz. Bu, özellikle .gitignore dosyanıza bir şey eklemeyi unuttuysanız ve büyük bir günlük dosyası veya bir grup .a derlenmiş dosya gibi yanlışlıkla sahnelenirse yararlıdır. Bunu yapmak için --cached seçeneğini kullanın:

$ git rm --cached readme.txt

Yani belki "-r" eklemeyin?


1
OP zaten denedi --cached. Bu -rseçenek, bu örneğe dahil edilmesi gereken "özyinelemeli" içindir.
Chris

Bunu faydalı buldum. Bir klasörde nasıl yapılacağını araştırıyordum ve sonra bunu bir dosyada yapmanın yolunu görüyordum. Bu yorumu işaretliyorum.
ışık
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.