.Gitignore'un izlenmeyen dosyalar listesinde görünmesini nasıl durdurabilirim?


971

Sadece git inityeni projemin kökünde bir tane yaptım .

Sonra bir .gitignoredosya oluşturdum .

Şimdi, yazarken git status, .gitignore dosya izlenmeyen dosyaların listesinde görünür. Neden?


13
git add self && git commit -m "-1 for reverting existential depression" && git remote rm HEAD
Alastair

1
.Git / klasörünü yok sayabilir ve ".gitignore" içine koyabilir miyim?
Timo

2
Linux altında ana klasörünüzde global bir "gitignore" oluşturabilir ve orada saklayabilirsiniz: git config --global core.excludesfile ~ / .gitignore_global
Timo

14
Buraya arayarak geldim how to gitignore .gitinore fileve soru ve kabul edilen cevap gerçekten unvanla ilgili değil. Başlık geliştirilebilir.
m.rufca

6
.İgnignore'u yoksaymak için kullanım durumları vardır. Ekibimin iş akışı, yerel geliştirme ortamım için bir dizi dosyayı değiştirmemi gerektiriyor, ancak bunlar taahhüt edilmemeli. İş akışı daha iyi mimari ile geliştirilebilir, ancak bu benim elimde değil. Bu arada, git bu dosyalara dikkat etmek bir yükümlülüktür. Bu yüzden onları sadece yerel olarak gitignore etmek istiyorum ve .gitignore'umla takımla paylaşılmaması gerektiği için risk almak istemiyorum.
Mark

Yanıtlar:


959

.gitignoreGibi gerçekten de eklenmiş ve işlenen edilmelidir böylece dosya, senin depoda olmalıdır git statusöneriyor. Depo ağacının bir parçası olmalıdır, böylece üzerindeki değişiklikler birleştirilebilir vb.

Yani, deponuza ekleyin, gitignored olmamalıdır.

Eğer gerçekten istiyorsanız .gitignore, .gitignoredosyanın işlenmesini istemiyorsanız dosyaya ekleyebilirsiniz . Ancak, bu durumda .git/info/excludeyoksaymaları eklemek daha iyi olur , sadece .gitignore gibi çalışan ancak .gitklasörde olduğu için "git status" da görünmeyen özel bir çıkış yerel dosyası .

Ayrıca bkz. Https://help.github.com/articles/ignoring-files


17
Bu, izlenen bir dosya yerine deponun meta verilerinin bir parçası olmamalı mı?
Mart'ta endolith

13
Havuz meta verileri, havuz için yereldir. Reponuza bir taahhüt kancası eklerseniz ve biri repo'nuzu klonlarsa, örneğin taahhüt kancasını alamazlar.
Ağustos Lilleaas

91
@wukong, eğer bir ekip üzerinde çalışıyorsanız, herkes aynı dosya grubunu görmezden gelmemeli mi? Bu nedenle .gitignore dosyası veri havuzuna eklenir. Kimse bunu projenizin bir parçası olarak dağıtmanız gerektiğini söylemiyor.
Ryan Lundy

13
@endolith and wukong Reponuzda bir dosya olması gerekmez. Yoksayma ayarlarınızı birçok farklı yerde yapabilirsiniz. GitHub üzerinde harika bir makale var help.github.com/ignore-files Küresel yok sayma ayarlarınızı her yerde yapabilir ve repo için .git meta verilerinde repo özel ayarlarına sahip olabilirsiniz.
46

6
@ deed02392 Bu yoksayma dosyalarını kullanırken, kesinlikle onlara koyduğunuz şeyde yargı kullanmanız gerekir, ancak yine de bazı harika kullanımları vardır. Örneğin Vim kullanıyorum ve global gitignore'umda yok sayılmış olarak işaretlenmiş * .swp dosyaları var. Bu şekilde projelerimin her birine eklemek zorunda değilim ve hiç vim kullanmayan adamlar için endişelenmenize gerek yok.
Boushley

282

Yok sayılan dosyaların listesini Git ağacınızın dışında saklamak istiyorsanız, .git / info / exclude dosyasını kullanabilirsiniz. Sadece repo ödeme için uygulanır.


19
+1, bu, emacs * ~ backup dosyaları, OS X'ten .DS_Store ve benzeri gibi proje ile ilgili olmayan görmezden gelmeler için mükemmeldir.
Ağustos Lilleaas

38
@AugustLilleaas Ben şahsen bu tip {editör, platform} -belirli dosyaları koymayı tercih ederim, ~/.gitignoreböylece üzerinde çalıştığım herhangi bir depo için yok sayılırlar.
Michael Mior

22
Bir dosya izlendikten sonra, depoyu git update-index --assume-unchanged <file>değiştirmeden değişiklikleri izlemeyi durdurmak için kullanabilirsiniz . Bu, yerel değişiklikler yapmanız gereken büyük paylaşılan projelerde çok yararlıdır, ancak hiç kimse malzemelerinizin repoya bağlı olduğunu görmek istemez. Bkz. Blog.pagebakers.nl
Chris Esplin

6
@AugustLilleaas: Kullanıcı başına gitignore bu kullanım durumu için daha iyidir.
Mekanik salyangoz

3
Bu ipucu için teşekkürler, git-svn kullanıyorum, bu yüzden sunucudaki svn deposunun diğer kullanıcıları tam olarak istemezler .gitignore check-in yaptı.
enorl76

74

Aslında bir çizgi koyabilirsiniz .gitignoresenin içine .gitignoredosyası. Bu, .gitignoredosyanın git tarafından yok sayılmasına neden olur . Aslında bunun iyi bir fikir olduğunu düşünmüyorum. Yoksayılan dosyanın sürüm kontrollü ve izlenmiş olması gerektiğini düşünüyorum. Bunu tamlık için ortaya koyuyorum.


7
Benim için çalıştı! sürüm 1.5.6.5. Ayrıca 1800 BİLGİSİ ile iyi bir fikir değil, ama bazı bağlamlarda iyi olabilir düşünüyorum (git-svn deposu kullanın ve git-ish dosyaları svn gitmek istemiyorum). Dışlanan dosya muhtemelen daha iyidir.
J. Polfer

4
@ehsanul - dosya izlenmemelidir (eklememeli veya işlememelisiniz). İzini kaldırabilirsiniz. Bu sadece bir git-git ortamında harika bir fikir değildir, ancak git'i bir yıkım deposu için akıllı bir istemci olarak kullanmak istiyorsanız (geri kalanı bilmeden, <manyak kahkahaları>) - böyle bir hile harika.
Tomasz Gandor

2
@IshanSrivastava Muhtemelen dosyayı zaten izlemişsinizdir. git rm --cached .gitignore
Gideon

51

Ayrıca, tüm depolarınıza .gitignoreotomatik olarak uygulanacak bir genel kullanıcı git dosyasına da sahip olabilirsiniz . Bu IDE ve editör dosyaları (örn için yararlıdır ve Vim için dosyalar). Dizin konumlarını işletim sisteminize uyacak şekilde değiştirin.swp*~

  1. ~/.gitconfigDosyanıza ekleyin :

    [core]
    excludesfile = /home/username/.gitignore
    
  2. Yok ~/.gitignoresayılacak dosya desenlerine sahip bir dosya oluşturun .

  3. Nokta dosyalarınızı başka bir depoya kaydedin, böylece bir yedeğiniz olsun (isteğe bağlı).

Bir repoyu her kopyaladığınızda, başlattığınızda veya kopyaladığınızda, global gitignore dosyanız da kullanılacaktır.


6
Bunun editörlerinizin geçici dosyaların (ör. *. Swp (VIM) ve ._ * (TM)) geride bıraktığı durumlar için en iyi çözüm olduğuna inanıyorum, çünkü bu kuralları her git deposuna sürekli olarak eklemek mantıklı olmaz, ve farklı IDE'leri olan diğer kullanıcıları bu dosyaları kontrol etmeye zorlamak.
Thomas Hunter II

1
Bu, herhangi bir şubeye itilmemesi gereken ihmaller için mükemmel bir şekilde çalışır. 'Username' yerine elbette gerçek kullanıcı adınızı yazın ve zaten sahipseniz .gitconfig dosyasına ikinci bir [core] bölümü eklemeyin; yalnızca excludesfile satırını mevcut [core] bölümünüz altına yerleştirin.
emery

47

Birisi deponuza zaten bir eklediyse .gitignore, ancak üzerinde bazı değişiklikler yapmak ve bu değişikliklerin yoksayılmasını istiyorsanız aşağıdakileri yapın:

git update-index --assume-unchanged .gitignore

Kaynak .


5
Kötü fikir, bir sebep .git/info/excludesvar.
Arrowmaster

6
Sanırım da bir sebep --assume-unchangedvar. Neden biri diğerinden daha iyi?
Leif Gruenwoldt

9
Ve .git/info/excludesdosya zaten izlenmişse btw çalışmaz.
Leif Gruenwoldt

Bu gerçekten zaten taahhüt edilmiş olan ve değişiklik yapmak istemediğim bir .gitignore ile bana yardımcı oldu. Ubuntu 11.04 depolarından git 1.7.4.1 çalıştırıyorum ve yardım sayfaları bunu güncelleme dizinine ekliyor. "Bu seçenek, izlenen dosyalarda (.gitignore'un izlenmeyen dosyalar için ne yaptığına benzer) değişiklikleri kabul etmemek için kaba dosya düzeyinde bir mekanizma olarak da kullanılabilir. Git, dizinde bu dosyayı değiştirmesi gerektiğinde başarısız olur örneğin bir taahhütte birleştirilirken, varsayılan olarak izlenmeyen dosyanın yukarı yönde değiştirilmesi durumunda, durumu manuel olarak ele almanız gerekir. "
YonahW

Bu cevaba oy veriyorum çünkü genellikle ana repo başlangıç ​​durumunuz için bu eyleme ihtiyacınız olacak ve git işlevinin avantajlarını koruyacaksınız. Bu dosyayı (dönem) görmezden gelmek için iyi bir neden yok
Lazaros Kosmidis

37

Dosyayı ekledikten ve yükledikten sonra .gitignoreartık "izlenmeyen dosyalar" listesinde görünmez.

git add .gitignore
git commit -m "add .gitignore file"
git status

20

Sadece bir başkasının sahip olduğumuz aynı acıya sahip olması durumunda. Daha önce taahhüt edilmiş olan bir dosyayı hariç tutmak istedik.

Bu yayın çok daha yararlı oldu: .git / info / exclude ile çok geç çalışmak

Özellikle bir dosyayı görmezden gelmeniz gereken şey aslında git remove komutunu kullanmaktır. Git git rm ( http://www.kernel.org/pub/software/scm/git/docs/git-rm.html )

giderek test edersin

git rm --dry-run *.log
(tüm günlük dosyalarını hariç tutmak istediğinizi söylüyorsanız)

bu ne irade çıktı olurdu bunu yapıp yapmadığını hatırlayın hariç.

sonra

gidip koşuyorsun

git rm *.log
(veya istediğiniz dosya adı yolu / ifadesi)

Ardından dosyanıza bir *.logsatır ekleyin .gitignore.


4
Tabii ki, bunu .gitignore'unuza ilgili kalıpları (yani, * .log) ekleyerek takip etmek isteyebilirsiniz, böylece git statusileride gösterileceklerse sizi rahatsız etmezler .
Patrick O'Leary

2
Sorunum OP ile aynı olmasa da: .gitignore üzerinde değişiklikler yaptıktan sonra repo'yu "temizlemek" için RM kullanmam gerektiğini bildirdiğiniz için teşekkürler (dosyalar zaten birleştirilmişse) Noob hatası , Biliyorum, ama bu şahsen kimsenin bahsettiğini gördüğüm ilk yerdi.
Mike

Geri dönüşünüz için teşekkür ederiz. Evet, bu yüzden yazdım, buraya geldim ve sonra bunu çözmek için uzun bir yol kat ettim, yazmanın iyi olacağını düşündüm. :)
Evolve

16

Tabii ki .gitignore dosyası durum üzerinde görünüyor, çünkü izlenmedi ve git yemek için yeni ve lezzetli bir dosya olarak görüyor!

Ancak .gitignore izlenmeyen bir dosya olduğundan, .gitignore içine koyduğunuzda git tarafından yoksayılması gereken bir adaydır!

Yani, cevap basit: sadece satırı ekleyin:

.gitignore # Ignore the hand that feeds!

.gitignore dosyanıza!

Ve, Ağustos ayında cevabın aksine, ben .gitignore dosyası bu değil söylemek gerekir gerektiğini sizin depoda olmak. Sadece olabiliyor , ki bu genellikle uygun. Ve muhtemelen .gitignore'un .git / info / exclude'a alternatif olarak oluşturulmuş olmasının nedeni de budur. Her durumda, .gitignore dosyanızı nasıl kullanacağınız tamamen size bağlıdır.

Referans için kernel.org adresindeki gitignore (5) kılavuzuna bakın .


15

Fikir, projenize özgü dosyaları dosyaya koymak .gitignoreve (daha önce de belirtildiği gibi) depoya eklemektir. Örneğin .pycve .odosyaları, bazı eşyalar vb testsuite oluşturur kaydeder

Kendi kurulumunuzun oluşturduğu ancak her kullanıcı için zorunlu olarak görünmeyecek .swpdosyalar için ( vim kullanıyorsanız dosyalar, gizli ek dizinler vb.), .git/info/exclude(Daha önce de belirtildiği gibi) kullanmalısınız .


14

Her şeyden önce, daha önce de söylediği gibi, .gitignoreGit tarafından izlenmeli (ve bu nedenle göz ardı edilmemelidir). Nedenini açıklayayım.

(TL; DR: .gitignoredosyayı teslim edin ve IDE veya işletim sisteminiz tarafından oluşturulan dosyaları yok saymak için genel bir.gitignore kullanın)

Git, muhtemelen bildiğiniz gibi dağıtılmış bir sürüm kontrol sistemidir . Bu, farklı sürümler arasında (geliştirme farklı dallara ayrılsa bile) geçiş yapmanıza ve birden fazla geliştiricinin aynı proje üzerinde çalışmasına izin verdiği anlamına gelir.

.gitignoreAnlık görüntüler arasında geçiş yaparken izlemenin de faydaları olmasına rağmen , bunu yapmanın en önemli nedeni, dosyayı aynı proje üzerinde çalışan diğer geliştiricilerle paylaşmak isteyeceğinizdir. Dosyayı Git'e kaydederek, diğer katılımcılar .gitignoredepoyu klonladıklarında dosyayı otomatik olarak alacaktır , bu nedenle yanlışlıkla kaydedilmemesi gereken bir dosyayı (günlük dosyaları, önbellek dizinleri, veritabanı kimlik bilgileri gibi) yürütme konusunda endişelenmeleri gerekmez. , vb.). Ve bir noktada proje .gitignoregüncellenirse, dosyayı manuel olarak düzenlemek zorunda kalmadan bu değişiklikleri alabilirler.

Elbette, yoksaymak isteyeceğiniz, ancak sizin için özel olan ve diğer geliştiriciler için geçerli olmayan bazı dosya ve klasörler olacaktır. Ancak, bunlar projenin içinde olmamalıdır .gitignore. Dosya ve klasörleri yok sayabileceğiniz iki yer daha vardır:

  • İşletim sisteminiz veya IDE'niz tarafından oluşturulan dosyalar ve klasörler genel.gitignore olarak yerleştirilmelidir . Bunun yararı, .gitignorebilgisayarınızdaki tüm depolara uygulanmasıdır, bu nedenle bunu her depo için tekrarlamanız gerekmez. Farklı bir işletim sistemi ve / veya IDE kullanıyor olabileceği için diğer geliştiricilerle paylaşılmaz.
  • Projenin .gitignoreya da globalde yer almayan dosyalar, içindeki açık depo hariç tutularak.gitignore yok sayılabilir . Bu dosya diğer geliştiricilerle paylaşılmayacak ve bu tek depo için özel olacakyour_project_directory/.git/info/exclude

Global için güzel söz.gitignore
Gruber

İlk kurulumdan sonra .gitignore dosyasının göz ardı edilmesi gerektiğini düşünüyorum, bu yüzden yanlışlıkla değişiklik yok. Bu artık değiştirilemeyeceği anlamına gelmez, ancak bir şekilde kazalardan korunur. Bu dosyadaki kazalar karışıklığa neden olabilir ve hatta bazı çalışmaları tehlikeye sokabilir, bu nedenle "sızdırmazlık" (yoksayma) da dikkate alınmalıdır.
Sasa

@Sasa .gitignoreyalnızca Git tarafından izlenmeyen dosyaları yok saymak için çalışır. Şimdiye kadar izlenmiş bir dosyayı eklemek .gitignore, o dosyada değişiklik yapmanızı engellemez. Bu mümkün olsa bile, .gitignoreGit'e kendini görmezden gelmesini söylemesi halinde bu değişikliği nasıl yaparsınız ?
Nic Wortel

@Nic - Ayrıntılı açıklamayı bu konunun altındaki ayrı cevapta @ bakış açımdan geçtim.
Sasa

12

Aşağıdaki "sorun" için dikkat edin Bazen dizin eklemek istiyorum, ancak bu dizinlerin içinde dosya yok. Basit çözüm, aşağıdaki içeriğe sahip bir .gitignore oluşturmaktır:

*

Bu, dizinin eklenmediğini (deponuza beklendiği gibi. :

*
!.gitignore

9

Bu, yalnızca geçerli dizininizin Git depodaki tüm dosyaları yoksayması .

bu dosyayı güncelle

.git/info/exclude 

joker veya dosya adınızla

*pyc
*swp
*~

5

.Gitignore'a daha önce check-in yaptıysanız ve üzerinde yapılan değişiklikleri yoksaymak istiyorsanız, şu cevaba göz atın :

Bu komutu kullanmayı deneyin:

git update-index --assume-unchanged FILENAME_TO_IGNORE

Tersine çevirmek için (değişiklik yapmak istiyorsanız) şunu kullanın:

git update-index --no-assume-unchanged

GÜNCELLEME :

Geçerli dizinin altındaki 'değişmemiş olduğunu varsay' dosyalarını nasıl listeleyeceğiniz aşağıda açıklanmıştır :

git ls-files -v | grep -E "^[a-z]"

As -vseçeneği için küçük harfleri kullanacak dosyaları 'değişmeden varsayalım.'


4

Benim durumumda, varolan bir dosyayı hariç tutmak istiyorum. Sadece .gitignore üzerinde değişiklik yapmak işe yaramaz. Şu adımları izledim:

git rm --cached dirToFile/file.php
vim .gitignore
git commit -a

Bu şekilde, hariç tutmak istediğim dosyayı önbellekten temizledim ve .gitignore'a ekledikten sonra .


benim için en iyi çözüm. git add komutunu da kullanabilirsiniz. ikinci sırada, ondan sonra git taahhüt -m "sabitleme .gitignore"
brainray

3

Git repo'nuzun temel dizinine gidin ve aşağıdaki komutu yürütün:

echo '\\.*' >> .gitignore

Mac kullanıyorsanız, bu sinir bozucu .DS_Store dahil olmak üzere tüm nokta dosyaları yok sayılır.


4
Bunu yapmam. İhtiyacınız olan nokta dosyaları olabilir. Bunun yerine, kelimenin tam anlamıyla .gitignore ve .DS_Store ekleyebilirim.
Edward Falk

2

Son kullanıcının Git'in ".gitignore" dosyasını yoksaymasını istemesi oldukça mümkündür, çünkü Eclipse tarafından oluşturulan IDE'ye özgü klasörler muhtemelen NetBeans veya başka bir IDE ile aynı değildir. Bu nedenle, kaynak kodu IDE karşıtlığını korumak için, bireysel geliştiriciler farklı IDE'ler kullanıyor olabileceğinden, tüm ekiple paylaşılmayan özel bir yoksaymayı göz ardı etmek hayatı kolaylaştırır.


1

.gitignorediğer dosyaları yok saymakla ilgilidir . git dosyalar hakkındadır, bu yüzden dosyaları yok saymakla ilgilidir. Ancak git dosyalar üzerinde çalıştıkça, bu dosyanın diğer dosya adlarını listeleme mekanizması olarak bulunması gerekir.

Eğer çağrıldıysa .the_list_of_ignored_files biraz daha belirgin olabilir.

Benzetme yapmak istemediğiniz yapılacak işlerin listesidir. Onları bir yerde listelemedikçe, onlar hakkında bilmeyeceğiniz bir tür 'yapılacaklar' listesi olmaz.


1

.Gitignore'u görmezden gelmenin çok faydalı olduğu durumlar olduğunu düşünüyorum. Örneğin, aynı kod tabanında çalışan birden çok ekibiniz veya büyük bir ekibiniz olduğunda. Bu durumda, bazı sözleşmelere sahip olmanız gerekir, bu sözleşmelerden biri git repo'sunda nelerin göz ardı edildiği ile ilgilidir. Genellikle IDE veya OS tarafından oluşturulan dosya ve dizinleri, oluşturulan günlükleri vb. Yok saymakla ilgilidir.

Ancak, .gitignoredosyaya konvansiyonel olmayan değişiklikler getirme eğilimi olan bir kuvvet vardır . .gitignoreDosya ayrıca kullanılan veya başka durumlarda bir araç tarafından, yanlışlıkla, sorumsuz kişi tarafından değiştirilebilir.

Buna karşı bir kuvvet oluşturmak için aşağıdaki gibi yapabiliriz:

  1. İlk .gitignore ekip (ler) deki sözleşmeyi yansıtmalıdır,
  2. Aktarıldıktan sonra .gitignore, .gitignore girdisi eklenerek güvenli hale getirilmeli ve bu değişikliği yeniden aktarılmalıdır. .gitignoreDosya bu şekilde " mühürlendi ".

" Mühürlü " .gitignoredosya, bu değiştiricileri diğer ekip üyelerine yaymadan sadece yerel olarak değiştirilebilir. Bununla birlikte, bir değişiklik tüm ekip (ler) boyunca, onu "açığa çıkarmak", değiştirmek ve tekrar "mühürlemek" mümkün olduğundan daha geniş bir şekilde kabul edilirse. Bu yanlışlıkla yapılamaz, sadece kasıtlı olarak.

Ne yazık ki, aptallıktan% 100 korunamazsınız, ancak bu şekilde aptal şeylerin olmasını önlemek için elinizden gelen her şeyi yaptınız.

Çok iyi profesyonellere sahip nispeten küçük bir ekibiniz varsa, bundan daha önemli olmazdı, ancak bu adamlar bile endişelenecek bir şey daha az takdir ederler.

.git/info/excludeAltyapı ayarları hakkında hiçbir şey yapamadığınızda kullanmak iyidir, sadece kendinizinkini kapsayan bir hata yapmayın.

Neyin doğru ve neyin yanlış olduğuna dair bir bakış açısıyla .gitignore, dosyaya .gitignore girişine sahip olmak için oy veriyorum, herkese istedikleri gibi yerel olarak yapma özgürlüğü veriyorum, ancak başkalarını istila etmiyorum.


0

Sinir bozucu .DS_Storedosyalara aldırmamak için en iyi yerin .git/info/excludedosyada olduğunu gördüm .

IntelliJ, içinde bir git deposu kurduğunuzda bunu otomatik olarak yapıyor gibi görünüyor.


1
Kullanıcının global yok sayma dosyası, yoksaymak için daha iyi bir yer olur .DS_Store
Max Nanasy
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.