Taahhütlü dosyalara .gitignore uygulama


436

Şu anda yoksaymak istediğim bir sürü dosya yaptım. Git'e bu dosyaları gelecekteki taahhütlerden yoksaymasını nasıl söyleyebilirim?

EDIT: Onları depodan da kaldırmak istiyorum. Oluşturulduktan sonra veya kullanıcıya özel takım desteği için oluşturulan dosyalardır.



8
@Wooble Cevap benzer olabilir, ancak bu soru karşılaştığım ve çözmem gereken sorunu tam olarak anlatıyor.
rjmunro

1
Bu, başlık sorusuna doğrudan git
repo'nuzda

Yanıtlar:


471
  1. Yoksaymak .gitignoreistediğiniz dosyayla eşleşecek şekilde düzenleyin
  2. git rm --cached /path/to/file

Ayrıca bakınız:


12
Yine de çok fazla dosya var. Bunu her biri için yapmak istemiyorum
user880954

1
Dosyalar herhangi bir ortak dizinde mi? Değilse, sorun git sorusuna değil kabuk kullanım sorusuna dönüşür.
Matt Ball

12
Bir '.gitignore'umu ilk işlemime kadar eklemeyi unuttum' moduna ihtiyacım var.
Luke Puplett

9
Cevap bunun altında.
Lopsided

3
Benden bayrak -r eklememi istedi.
Vishal Gulati

600

Yok .gitignoresayılan dosyalarla eşleşecek şekilde düzenledikten sonra git ls-files -ci --exclude-standard, hariç tutma listelerinde bulunan dosyaları görmek için yapabilirsiniz ; sonra yapabilirsin

//On Linux:
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
//On Windows:
for /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
//On mac
alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached"

bunları depodan kaldırmak (diskten silmeden).

Düzenleme : Ayrıca, bunu istediğiniz zaman çalıştırabilmeniz için .gitconfig dosyanıza bir takma ad olarak ekleyebilirsiniz. [Takma ad] bölümünün altına aşağıdaki satırı ekleyin (Windows veya Mac için gerektiği gibi değiştirin):

apply-gitignore = !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached

(İçindeki -rbayrak boş bir sonuçla çalışmasını ve kullanım mesajının yazdırılmasını xargsengeller git rm, ancak yalnızca GNU bulucuları tarafından desteklenebilir. Diğer sürümleri de xargsbenzer bir seçeneğe sahip olabilir veya olmayabilir.)

Şimdi git apply-gitignorerepo yazabilirsiniz ve iş sizin için yapacak!


10
Mac için xargs hiçbir -r ... ya da benim buggy / eski, bilmiyorum ... ve neden !önce git git düşünüyorum? Şey ... benimki gibi çalıştı alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached". tks!
Felipe Sabino

18
Windows'tafor /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
Luke Puplett

Bu sadece .gitignore dosyalarımı sildi, yoksaymak istediğim dosyaları .gitignore dosyalarında listeledi - değil mi?
21:14, Hippyjim

@Hippyjim dosyalar zaten işlenmişse (.gitignore'da listelenmiş olsalar bile) ve .gitignore henüz taahhüt edilmediyse , bu beklenen sonuç olacaktır, aksi takdirde, durumunuzda neler olduğundan emin değilim.
Jonathan Callen

1
Mac kullanıcıları için, -rvarsayılan değerdir ve BSD sürümleri tarafından kabul edilmez. Yani kaldır -r.
Weishi Zeng

136

dosyayı depoda bırakmak, ancak dosyada gelecekteki değişiklikleri yok saymak için:

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

ve bunu geri almak için:

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

hangi dosyaların bu şekilde ayarlandığını bulmak için:

git ls-files -v|grep '^h'

http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/ adresine verilen orijinal yanıtın kredisi


1
Chronial'ın bunu bir dizin için yinelemeli olarak yapmak için harika bir cevabı var: stackoverflow.com/a/16346756/1101076
jordan314

Bir IDE yapılandırması yapmak istedim ancak gereksiz değişiklikleri izlemedim. Depoyu kontrol eden başkaları için işe yarayıp yaramayacağından emin değilim. Bu git ls-files -ci --exclude-standard -z | xargs -0 git update-index --assume-unchangedyardımcı olursa ile birleştirilebilir .
dlamblin

7
Bu sadece başlık soru sorar kesin gelmez Ne cevap. MÜKEMMEL! Bu diğer cevapların çoğu gereksiz yere dosyalarla uğraşıyordu.
17'de

1
Bu soru için tam olarak doğru cevap. Gibi komutları kullanmak git rm --cached, quizzer ihtiyacını karşılamayan dosyayı depoda kaldıracaktır. Teşekkür ederim. Gerçekten onu takdir ederim. Cevabınız bana çok yardımcı oluyor.
ramwin

88

Gerçek deponuzun en son sürüm olduğundan emin olun

  1. Düzen .gitignoreistediğiniz gibi
  2. git rm -r --cached .
  3. git add .

sonra her zamanki gibi çalış


14
Soru, özellikle kaldırılacak çok fazla dosya olduğunu söylediğinden, bu kabul edilen cevap olmalıdır.
nbeuchat

3
Büyük bir deponuz varsa, bu adım 2'nin biraz zaman alabileceğini unutmayın.
brainbag

Bu, tüm dosyaların dizinden kaldırılmasına neden oldu ! Bu beni kurtardı: git reset HEAD(Herhangi bir değişikliği
saklamayı

2
Adım 2 her şeyi kaldırır, evet, ancak 3. adım .gitignore nedeniyle başarısız olanlar hariç hepsini okumalıdır.
19:19

11

Eski soru, ama bazılarımız içerisindeyiz git-posh(powershell). Bunun çözümü:

git ls-files -ci --exclude-standard | foreach { git rm --cached $_ }

0

Bu adımları takip et:

  1. gitignoreDosyaya yol ekle

  2. Bu komutu çalıştır

    git rm -r --cached foldername
    
  3. değişiklikleri genellikle uygulayın.

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.