Gitignore çalışmıyor


275

Benim .gitignoredosya nedense çalışmıyor ve Googling hiçbir miktarı bunu düzeltmek mümkün olmuştur. İşte ne var:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

masterBenim git repo olan dizinde . Git 1.8.4.2'yi çalıştırıyorum çünkü OSX 10.8.6 çalıştıran bir MacBook'tayım.


4
1. olmamasına rağmen hangi dosyalar dizine eklenir? 2. bu dosyaları depoya ekledikten sonra .gitignore eklediniz mi?
Ahmad

2
@Ahmad Birden fazla projede, /bin/klasörde bir ne zaman ı gösteririm git status. .gitignore
User3280133

1
".gitignore eklediğimden beri" - dosyaları ekledikten sonra .gitignore eklediniz mi?
Ahmed


Yanıtlar:


686

Sürüm kontrolünüzdeki dosyalar / klasör yalnızca onları eklediğiniz için kendilerini silmez .gitignore. Zaten depodalar ve onları kaldırmanız gerekiyor. Bunu sadece bununla yapabilirsiniz:

( Bunu yapmadan önce değiştirdiğiniz her şeyi yapmayı unutmayın. )

git rm -rf --cached .
git add .

Bu, tüm dosyaları depodan kaldırır ve geri ekler (bu kez içinizdeki kurallara uyar .gitignore).


2
veya git checkout folder_to_ignore / * kullanarak .gitignore'a eklediğiniz dosyaları / klasörleri geri almayı deneyebilirsiniz.
Zahra

1
@Greenish, ancak zaten taahhüt edilmişlerse işe yaramaz, yalnızca sahnelendiyse işe yarardı, klasör zaten .gitignore'da olması durumunda (eklemeye zorlamadığınız sürece) :)
Ahmad

1
değişiklikleri github'a ittiğimde benim için çalışmıyor. Her şey güncel olduğunu söylüyor !!!!
Dr.Younes Henni

1
Maalesef Ahmed Gitignore dosyasını silip uzaktan çekime tekrar çekerek sorunumu çözdüm. Git durumunu yazdığımda artık ne söylediğini hatırlamıyorum. Sorunum düzeltildi. Çok teşekkürler.
Dr.Younes Henni

3
Bunu basitleştirmek için 'git ignore' komutunu eklemenin daha iyi olacağını düşünüyorum. Böylece git ignore path/fileher an kullanabiliriz .
Şubat'ta Tiw

123

Deponuza zaten eklenmiş / başlatılmış tek bir dosyayı kaldırmak için, yani dosyayı izlemeyi bırakın ancak sistem kullanımınızdan silmeyin: git rm --cached filename

Şu anda içinde bulunduğunuz tüm dosyaları kaldırmak için .gitignore:

Önce bekleyen kod değişikliklerini gerçekleştirin ve ardından şu komutu çalıştırın:

git rm -r --cached .

Bu, değiştirilen dosyaları dizinden (hazırlama alanı) kaldırır, ardından sadece çalıştırın:

git add .

Taahhüt et:

git commit -m ".gitignore is now working"

Şubelerinizi ustalaşmak için yeniden birleştirdiğinizden veya işaretçinizi hareket ettirdiğinizden emin olun çünkü bunu denediğimde her iki özellik dalımı da kaybettim. Neyse ki herhangi bir iş kaybetmedim, çalışma dalındaki en son güncellemelerimin tümü ana şubeye sıfırlandı, ancak kurulumunuza bağlı olarak bu davranış istenmeyen olabilir.
Kızak

Bir klasörü dosya yerine önbellekten kaldırmak için bu komutu nasıl kullanırsınız?
RealMJDev

15

Bu sorunun cevabını takip etmeye çalışan bir tavşan deliğinden biraz aşağı intikten sonra (belki de bunu bir görsel stüdyo projesinde yapmak zorunda kaldım),

  1. Artık izlemek istemediğim dosyaları kesin ve yapıştırın

  2. Bu dosyaların "silinmesini" gerçekleştirin

  3. .gitignoreGeçici olarak taşıdığım dosyaları hariç tutmak için bir değişiklik yap

  4. Dosyaları klasöre geri taşıyın.

Bu konuda gitmek için en düz yol olması (en azından görsel bir stüdyoda, yoksa Android Studio gibi diğer IDE kabarması bazlı ortam varsayılabilir) yanlışlıkla oldukça yaygın olan kendimi ayak çekim olmadan buldum git rm -rf --cached ., bundan sonra üzerinde çalıştığım görsel stüdyo projesi yüklenmedi.


2
Bu yaklaşımı oldukça seviyorum - "uygun" olarak düşünülmese bile daha az yıkıcı görünüyor.
theyetiman

6

Benim durumumda , dosyanın başlangıcında, Not Defteri'nde dosyayı açtığımda açıkça görünen boş bir alan vardı, Visual Studio Code'da belirgin değildi.


4

Benim için ortak bir şeyler üretmek .gitignoreiçin kullandım ve bununla karşılaştım . @Ozesh cevabını okuduktan sonra sağ altta satır sonlarını gösteren güzel bir gösterge olduğu için VS Code'da açtım. LF oldu, bu yüzden önerilen ama hiçbir zar CRLF dönüştürüldü.

Sonra satır sonlarının yanına baktım ve UTF16 kullanılarak kaydedildiğini fark ettim. Bu yüzden bir voila kodlayan UTF8 kullanarak kurtardı, işe yaradı. CRLF önemli olduğunu düşünmüyordu, bu yüzden emin olmak için LF'ye geri döndüm ve hala çalıştı.

Tabii ki bu zaten OPs sorunu değildi, çünkü zaten dosyaları indekslenmişti, bu yüzden zaten endekslenmişlerdi, ancak başka birinin bunun üzerinde tökezlemesi durumunda paylaşacağımı düşündüm.

TLDR ; Dosyaları henüz taahhüt etmediyseniz ve .gitignore hala saygı görmüyorsa, dosya kodlamasını kontrol edin ve UTF8'inden emin olun ve eğer işe yaramazsa, satır sonlarıyla uğraşmayı deneyin.


1
UTF16 benim için suçluydu. Açık VS kodu> açıldı .gitignore> komut istemini açtı> "Dosya Kodlamasını Değiştir"> "UTF-8"> Dosyayı kaydet
Michael

3

Benim durumumda .gitignore çizgilerinin sonundaki boşluklar neden oldu. Yani .gitignore'daki boşluklara dikkat edin!


2

Sorunumu aşağıdakileri yaparak çözdüm:

Her şeyden önce, ben bir windows kullanıcısıyım, ama benzer bir sorunla karşı karşıya kaldım. Ben de çözümümü buraya gönderiyorum.

Bazen .gitignore'un olması gerektiği gibi çalışmamasının basit bir nedeni vardır. EOL dönüşüm davranışından kaynaklanmaktadır.

İşte bunun için hızlı bir düzeltme

Düzen> EOL Dönüştürme> Windows Biçimi> Kaydet

Bunun için metin düzenleyici ayarlarınızı suçlayabilirsiniz .

Örneğin:

Windows geliştiricisi olduğum için Vim kullanıcılarının aksine metnimi düzenlemek için genellikle Notepad ++ kullanıyorum .

Ne olur, ben .gitignore dosyamı Notepad ++ kullanarak açtığımda şöyle görünüyor:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Aynı dosyayı varsayılan Not Defteri'ni kullanarak açarsam, aldığım şey budur

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

Yani, çıktıya bakarak zaten tahmin etmiş olabilirsiniz. .Gitignore'daki her şey tek bir astar haline geldi ve başlangıçta ## olduğundan, her şey yorumlanmış gibi davranıyor.

Bunu düzeltmenin yolu basittir: .gitignore dosyanızı Notepad ++ ile açın, ardından aşağıdakileri yapın

Düzen> EOL Dönüştürme> Windows Biçimi> Kaydet

Aynı dosyayı Windows varsayılan not defteri ile bir sonraki açışınızda, her şey düzgün biçimlendirilmelidir. Deneyin ve bunun sizin için işe yarayıp yaramadığını görün.


1

Ayrıca, yorumlar kendi satırlarında olmalıdır. Bir girişten sonra konamazlar. Yani bu işe yaramaz:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

Ancak bu işe yarayacaktır:

# fine to comment here
/node_modules

0

Herkes için git reset --hardçalışır mı ? Bunun iyi bir çözüm olduğunu söylemiyorum, ilk denediğimde işe yarıyor gibiydi.


Lütfen yukarıdaki yorumumu görmezden gelin. İş yerinde biri Git'te çok yanlış bir şey yaptı, yinelenen klasörlere neden oldu ve bir süredir farkında değildim. Teşekkürler.
user1889992

0

Dockerignore'umu düzenlemede büyük hatayı yaptım, doğru yoksayma dosyasını bulduktan sonra harika çalıştı: p


0

Biraz eklemek bu popüler bir soru.

.History dizinini .gitignore içine yerleştiremedim çünkü hangi combo'yu denediğim önemli değil, sadece işe yaramadı. Windows her kayıtta yeni dosyalar oluşturmaya devam ediyor ve bunları hiç görmek istemiyorum.

resim açıklamasını buraya girin

Ama sonra fark ettim ki, bu benim makinemdeki kişisel gelişim ortamım. .History veya .vscode gibi şeyler benim için özeldir, bu nedenle herkesin kullandıkları IDE veya OS'ye göre kendi .gitignore girişlerini içermesi garip olurdu.

Bu benim için çalıştı, sadece .git / info / exclude ".history"

echo ".history" >> .git/info/exclude
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.