Git'te değiştirilmiş (ancak kaydedilmemiş) dosyaları yoksay?


182

Git'e değiştirilmiş (silinmiş) ancak işlenmesi gerekmeyen dosyaları yoksaymasını söyleyebilir miyim?

Durum şu ki ben hiç ilgilenmiyorum şeyler içeren repo bir alt dizin var, bu yüzden otomatik tamamlama ve benzeri (IDE) görünmesini önlemek için sildi.

Ama şimdi, o klasörü .gitignore'a eklersem, hiçbir şey değişmezse, tüm şeyler git durumuna göre silindi olarak gösterilir.

Git'i her iki şekilde de yok saymanın bir yolu var mı?

(Alternatif olarak, git-svn kullandığım için, yerel git değişikliklerini yapabilir ve svn deposuna aktarılmadığından emin olabilir miyim?)


repo dizininde değiştirilmemiş olarak işaretlemek yerine, bunları dizinden tamamen kaldırmak isteyebilirsiniz. Bu nedenle, dosyayı çalışma dizininizde bulunmaya devam ederken, repo dizini tamamen silinebilir ve git, dosyanın var olduğunu bile görmez. Lütfen aşağıdaki cevabımdaki bağlantıya bakınız.
MaurerPower

Yanıtlar:


274

kontrol git-güncelleme-endeks adam sayfasını ve --assume-değişmeden bit ve ilgili.

senin sorunun olduğunda bunu yaparım

git update-index --assume-unchanged dir-im-removing/

veya belirli bir dosya

git update-index --assume-unchanged config/database.yml

3
Yok sayılan dosyalarınızı bir şekilde listeleyebilir misiniz?
Zitrax

21
Dosyaların ile geri alabilirsinizgit update-index --no-assume-unchanged config/database.yml
Denis Kniazhev

1
Bazı eksiklikleri olmayan daha yeni bir çözüm için Dave L'nin aşağıdaki cevabına bakın --assume-unchanged.
Ben Challenor

2
Bunu her seferinde bu komutu manuel olarak çalıştırmak yerine depo yapılandırma dosyasına eklemek mümkün müdür?
Tim Boland

1
Bir sonraki taahhüt için değiştirilmiş olarak görünecek mi? Sonsuza dek değişmeden varsayılmasını istemiyorum.
Pranav Nandan

41

git update-index --skip-worktreeDonanımdan sıfırlama veya çekme işleminden yeni bir değişiklikle kaybolmayacak daha yeni ve daha iyi bir seçenek .

Http://schacon.github.com/git/git-update-index.html adresindeki kılavuz sayfasına bakın.

Ve http://fallengamer.livejournal.com/93321.html adresinde bir karşılaştırma


9
Dikkat edilmesi gereken bir dezavantaj, bir dosyadaki değişiklikler gizlendikten sonra skip-worktree, bu dosyaları bulmak biraz hantaldır. Bilmemin tek yolu git ls-files -v |grep -v '^H'. Ayrıca, birçok GUI aracı bu özellik hakkında bilgi sahibi değildir ve örneğin checkout"gizli" değiştirilmiş dosyalar nedeniyle başarısız olursa komik hatalar üretebilir .
sleske

Git doc dosyalarının HERHANGİ BİRİNİ anlayamadım. Yani bu pek yardımcı değil. (Her doc dosyası, diğer tüm doc dosyalarının inceliklerini anladığınızı varsayar!)
Scott Biggs

7

Bu kodu kullan

git update-index --assume-unchanged file-name

1
Gerçekten ilginç. Maven projemde bir pasaport kullanmam gerekiyor, ancak bir git deposunda yayınlamak istemiyorum, bu yüzden yerel, mülklerde değeri olmadan yer tutucusu koyuyorum, taahhüt ediyorum, sonra şifreyi ekliyorum, ancak dosya önerilen komutunuzla değişmedi. Yani şifre yayınlanmıyor.
Stefano Scarpanti

6

İzlenen dosyalar göz ardı edilemez, bu yüzden önce bunları dizininizden kaldırmanız gerekir. .gitignoreİstemediğiniz dizinleri yok sayan bir ekleyin , ardından silin ve tüm katmanları kaldırın git rm --cached.


1
Hm, bunu deneyin, ama sonra silinmiş olarak listelenen tüm dosyaları var. Bunu taahhüt etmeli miyim ve --cached uzaktan kumandalara itilmeyecek mi? Yoksa sth mi aldım. yanlış? Benim için en önemlisi, uzak (svn) repoyu bozmamak.

1
Dizininizde başlamayan hiçbir şeyi işleme koyamazsınız. git rm - taahhüt etmek istemediğiniz her şeyi önbelleğe aldı, ardından yerel olarak "*" içeren bir .gitignore dosyası ekleyin. Şimdi, ne kadar fazla gittiğinize bakılmaksızın, bu dosyaları bir daha asla dizininizde görmeyeceksiniz.
John Feminella

Ah, sanırım anladım - şimdi önbelleğe alındı ​​.. Sadece dizindeki maddeleri kaldırıyor ve çalışma ağacını yalnız bırakıyor .. Bir şey eksik olup olmadığımdan emin değilim, ama AFAIS tam tersini arıyorum , dizine dokunmadan çalışma ağacından kaldırarak .. Veya bunun için bir şekilde kullanabilir miyim?

6

Genelde yaptığım şey

git stash

git ne olursa olsun

git stash uygula

git stash temizle


10
fwiw ayrıca bu son iki adımı bir kerede yapmak için 'git stash pop'u da yapabilirsiniz (' git stash clear 'isterseniz TÜM stash girişlerini temizler).
Groxx
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.