Git'teki belirli dosyalar nasıl yoksayılır


731

Dosyalı bir havuzum var Hello.java. Derlediğimde, ek bir Hello.classdosya oluşturulur.

Hello.classBir .gitignoredosya için bir girdi oluşturdum . Ancak, dosya hala izleniyor gibi görünüyor.

Git'i nasıl görmezden gelebilirim Hello.class?


8
Ne demek "işe yaramıyor"? Belki de deponuza Hello.class eklediniz mi? gitignores'in zaten izlenen içerik üzerinde hiçbir etkisi yoktur. Örneğin, bkz. Stackoverflow.com/questions/1139762/gitignore-file-not-ignoring
Cascabel

Yanıtlar:


809

Sorun .gitignoresadece daha önce (tarafından git add) izlenmemiş dosyaları yok sayar . Run git reset name_of_filedosyayı unstage ve tutmak için. Belirli bir dosyayı depodan kaldırmak istediğinizde (ittikten sonra) kullanın git rm --cached name_of_file.


190
Komut git rm --cached name_of_filedosyayı git deponuzdan kaldıracaktır. Bunu .gitignore dosyanıza ekleseniz bile. Bu görmezden gelmek değil siliniyor.
OrwellHindenberg

4
Bu OP'nin istediği şey gibi görünüyor.
Ondrej Slinták

40
Çözümünüzün @ Kohan95 için çalıştığına sevindim! Yine de bu soru seçilen cevaba göre yeniden adlandırılmalıdır. Yorumlarım, komutun ne yaptığını bilmeyen devs için yalnızca bir uyarıdır.
OrwellHindenberg

91
git reset name_of_fileizlemeyi kaldırır ve dosyayı silmez.
Cees Timmerman

7
Denenmiş git rm --cached <name_of_file> Depodaki dosyayı sildi, ancak .gitignore dosyasında olduğu için yerel kopya silinmedi. Başka bir not olarak, bir dizin eklemek için, dizeyi sondaki eğik çizgi '/' ile koymanız gerekir. Birisinin teslim ettiği yakut bir projede, ".idea" olan Rubymine'nin yapılandırma dizinini kaldırıyordum. Dosyaya dizini ve altındaki her şeyi kaldırmak için ".idea /" ve sonra "git rm --cached -r .idea" koydum (çünkü git sadece dizinleri değil, sürümleri dosyaları.)
Doug Noel

222

Yeni dosyalar nasıl yoksayılır

Küresel

Dosyanıza yoksaymak istediğiniz .gitignoredosyaları dosyalarınıza ekleyin (ve bunları taahhüt edin). Bu dosya girişleri, depoyu kontrol eden diğer kullanıcılar için de geçerlidir.

lokal olarak

Dosyanıza yoksaymak istediğiniz .git/info/excludedosyaları dosyalarınıza ekleyin . Bu dosya girişleri yalnızca yerel çalışan kopyanız için geçerlidir.

Değiştirilen dosyalar nasıl yoksayılır (geçici olarak)

Değiştirilmiş dosyaları değiştirilmiş olarak listelemek için yok saymak için aşağıdaki git komutunu kullanabilirsiniz:

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

Bu cehaleti geri almak için aşağıdaki komutu kullanın:

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

Geçerli bir api anahtarını tutan bir dosyanın github'a itilmesini önlemek için mükemmel!
Jim In Texas

1
@Xman Neden geçici olduğunu söyledin? localGit yoksay için bahsettiğiniz adımları yaptım ve sistemimi yeniden başlattım, hala doğrudan temiz çalıştığını gösteriyor.
Vivek Vardhan

1
Yararlı update-indexnumara için teşekkürler , bir .gitignoredosyayı değiştirmekten kaçınmak için kesinlikle mükemmel , daha sonra Git tarafından izleniyor!
Thomas P.

@mcbjam Özel bir git ignore komutu yoktur. Çalışma kopyası içinde uygun yerde bulunan bir .gitignore dosyasını düzenleyin. Daha sonra bu .gitignore eklemeli ve taahhüt etmelisiniz. Bu repoyu klonlayan herkes bu dosyaları görmezden gelecektir.
Xman Classical

@Vivek Vardhan git update-index --assume-ungedged dizindeki geçici maske gibidir. Siz kapatana kadar yürürlükte kalacaktır. Demek istediğim daha açık bir şekilde ifade etmek gerekirse, başlangıçta dizin (yani, git okuma ağacından hemen sonra), "henüz okunmuş olan tree-ish içindeki tüm dosyaları" içerir. bir dizin girdisi gerçekten kaldırmaya eşit değildir.
Xman Classical

150

Aşağıdaki satırı .gitignore öğesine ekleyin:

/Hello.class

Bu, Hello.class dosyasını git'den hariç tutacaktır. Daha önce taahhüt ettiyseniz, aşağıdaki komutu çalıştırın:

git rm Hello.class

Tüm sınıf dosyalarını git dışında bırakmak istiyorsanız, aşağıdaki satırı .gitignore öğesine ekleyin:

*.class

32
Ekleme Hello.classiçin .gitignoredenilen herhangi bir dosyayı yok sayacak Hello.classherhangi alt dizininde. Yalnızca dosyayla Hello.classaynı dizindeki dosyayı yoksaymak istiyorsanız .gitignore, /Hello.classbunun yerine bir satır kullanın.
ndim

.gitignoreDosyayı nereye koydunuz ?
CodyBugstein

6
@Idray .gitignoregit projesinde herhangi bir yere koyabilirsiniz - bir yol başlarsa dosyanın /konumuna göre değişir .gitignore; aksi takdirde, geçerli dizindeki ve onun alt dizinlerindeki dosyaları yinelemeli olarak ifade eder.
Armand

109

1) Bir .gitignoredosya oluşturun . Bunu yapmak için, sadece bir .txtdosya oluşturun ve uzantıyı aşağıdaki gibi değiştirin:

Resim açıklamasını buraya girin

Ardından, bir cmd penceresinde aşağıdaki satırı yazarak adı değiştirmeniz gerekir:

 rename git.txt .gitignore

git.txtAz önce oluşturduğunuz dosyanın adı nerede .

Daha sonra dosyayı açabilir ve depoya eklemek istemediğiniz tüm dosyaları yazabilirsiniz. Örneğin, benimki şöyle:

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

Bunu elde ettikten sonra, Git deponuza eklemeniz gerekir. Dosyayı deponuzun olduğu yere kaydetmeniz gerekir.

Sonra Git Bash'de aşağıdaki satırı yazmalısınız:

git config --global core.excludesfile ~/.gitignore_global

Depo zaten varsa, aşağıdakileri yapmanız gerekir:

  1. git rm -r --cached .
  2. git add .
  3. git commit -m ".gitignore is now working"

2. adım işe yaramazsa, eklemek istediğiniz dosyaların tüm yolunu yazmalısınız.


Komut isteminde "copy con .gitignore" komutunu kullanabilir ve ardından dosyayı doğrudan Windows Gezgini olmadan oluşturmak için CTRL + Z tuşlarına basabilirsiniz.
heringer

61

Yoksaymak:

git update-index --assume-unchanged <path/to/file>

Yoksaymayı geri almak için:

git update-index --no-assume-unchanged <path/to/file>

6
Sorunun çözümü olarak bu grafiğin en üstünde olmak istiyorum .... Çok basit ve zarif
user1457958

"Çok basit ve zarif" - gerçekten değil : 'Varsay-değişmedi bir yoksay mekanizması kötüye kullanılmamalıdır. Sanki, "Benim dosya sistemi işlemleri yavaştır biliyoruz. Edilmektedir ben o Git söz edeceğiz olmaz bu yolları değiştirmek ..." Özellikle, öyle değil Git her zaman bu yolları değiştirilmemiş-eğer vardır Git bir yol belirleyebilir ele alacağız ... bir söz ... ekstra ödemeden değişti lstat(2)maliyeti, bu yolun olduğunu rapor etme hakkını saklı tutar olmuştur (... modifiye git commit -abu değişikliği işlemek serbesttir).'
Chris

47

İzlenen dosyalardaki değişiklikleri yok saymak / yoksaymak için aşağıdaki yöntemleri kullanabilirsiniz.

  1. Görmezden gelmek için: git update-index --assume-unchanged <file>
  2. Yok sayılan dosyaları geri almak için: git update-index --no-assume-unchanged <file>

4
Bu tüm dosyalar için geçerli mi? Bu komutları yoksaymak / atmak için tek bir dosyaya nasıl uygulanabileceği belirsizdir.
javadba

@kapil sonunda !! bir trilyon git komut varyasyonu arasında çalışan bir şey! Her derlemeden sonra görünmeye devam eden bazı aptal build.xml dosyalarını yoksaymak için her cevabı denedim ... teşekkür ederim!
killjoy

1
Lütfen şunları yapmayın : 'Varsay-değişmeden bir yoksay mekanizması için kötüye kullanılmamalıdır. Sanki, "Benim dosya sistemi işlemleri yavaştır biliyoruz. Edilmektedir ben o Git söz edeceğiz olmaz bu yolları değiştirmek ..." Özellikle, öyle değil Git her zaman bu yolları değiştirilmemiş-eğer vardır Git bir yol belirleyebilir ele alacağız ... bir söz ... ekstra ödemeden değişti lstat(2)maliyeti, bu yolun olduğunu rapor etme hakkını saklı tutar olmuştur (... modifiye git commit -abu değişikliği işlemek serbesttir).'
Chris

22

.gitignore.Git dizininde bir dizin oluşturun . İçindeki dosyaları yeni satırla ayırarak listeleyebilirsiniz. Ayrıca joker karakterler de kullanabilirsiniz:

*.o
.*.swp

3
Alete özgü kalıpları (yani geçici Vim dosyalarınızı) dosyalara koymaktan kaçınmak iyi bir uygulamadır .gitignore(bu araç proje tarafından zorunlu kılınmadıkça). Kullanıcı başına hariç tutulan dosya (set core.excludesFile) içine en sevdiğiniz araçlar için desenler koyabilirsiniz ; tüm depolarınızda çalışırlar. Örneğin git config --global core.excludesFile "$HOME/.git-user-excludes", onları bu dosyaya koyun.
Chris Johnsen

@Chris: Bahşiş için teşekkürler. Ama sadece orada yazdım çünkü aklıma daha iyi bir şey gelmedi :)
terminus

1
@ChrisJohnsen 'araca özgü?' vim için ?? Ben vim takas dosyaları hariç tutmak güvenli olduğunu düşünüyorum ..
javadba

16

Resmi GitHub sitesinden:

Zaten teslim edilmiş bir dosyanız varsa ve yoksaymak istiyorsanız, daha sonra bir kural eklerseniz Git dosyayı görmezden gelmez. Bu durumlarda, terminalinizde aşağıdaki komutu çalıştırarak önce dosyayı kaldırmalısınız:

git rm --cached FILENAME

veya

git rm --cached .

12

Gibi bir şey yazmalısın

*.class

içine yerleştirin .gitignore.


4
@AgentZebra Bir giriş eklemek gerekir *.classadresinden Müşteri .gitignorebiten tüm dosyaları görmezden git yapmak .class.
KingCrunch

7

Yoksaymak istediğiniz dosyaları dosyaya ekleyin .gitignore:

*.sınıf

* .projects

* .prefs

* .project



5

Dosyayı zaten taahhüt ettiyseniz ve dosyaya ekleyerek yoksaymaya çalışıyorsanız .gitignore, Git dosyayı yok saymaz. Bunun için önce aşağıdakileri yapmanız gerekir:

git rm --cached FILENAME

Projeye yeni bir şekilde başlıyorsanız ve Git yoksaymasına bazı dosyalar eklemek istiyorsanız, Git yoksayma dosyası oluşturmak için aşağıdaki adımları izleyin:

  1. Git deponuza gidin.
  2. Bir .gitignoredosya oluşturacak "dokunmatik .gitignore" girin .

3

Ayrıca tüm dosya türlerini hariç tutmak için .gitattributes (.gitignore yerine) kullanabilirsiniz. Dosya oldukça açıklayıcıdır, ancak içeriği referans olarak buraya yapıştırıyorum. Son satıra dikkat edin (* .class binary):

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.mo binary
*.pdf binary
*.phar binary
*.class binary

2

Aşağıdaki satırı .git / info / exclude
dizinine ekleyin : Hello.class


Klasörün içindeki dosyaları değiştirmeniz gerekiyor .gitmu?
Peter Mortensen

Belki .git altındaki bu dosyalara el ile dokunmak iyi bir fikir değildir.
mgyky


2

Bu web sayfası , aşağıdakilerle çalışırken yararlı ve zaman tasarrufu sağlayabilir.gitignore .

Genellikle Git deponuza (örneğin, IDE'ye özgü klasörler ve yapılandırma dosyaları) çekmek istemediğiniz belirli dosyalara / klasörlere sahip farklı IDE'ler ve işletim sistemleri için .gitignore dosyaları otomatik olarak oluşturur.


1

Bunu denedim -

  1. yok saymak istediğimiz dosyaları listele

git status .idea/xyz.xml .idea/pqr.iml Output .DS_Store

  1. 1. adımın içeriğini kopyalayın ve .gitignore dosyasına ekleyin.

echo " .idea/xyz.xml .idea/pqr.iml Output .DS_Store" >> .gitignore

  1. Doğrulama

git status .gitignore

benzer şekilde git durumunu kullanarak yoksaymak istediğimiz dizin ve tüm alt dizinlerini / dosyalarını ekleyebiliriz ve directoryname/*bu komutu dizinden yürüttüm src.


1
  1. .Gitignore dosyasına gidin ve yoksaymak istediğiniz dosyaların girişini ekleyin
  2. Çalıştırmak git rm -r --cached .
  3. Şimdi koş git add .

0

Ben denedim --assume-unchangedve aynı zamanda .gitignoreama ikisi de iyi çalıştı. Şube değiştirmeyi zorlaştırır ve diğerlerinden gelen değişiklikleri birleştirmeyi zorlaştırırlar. Bu benim çözümüm:

Ne zaman işlemek , el ile listeden dosyaları kaldırmak değişikliklerin

Ben önce çekin , ben saklamak değiştirilen dosyalar. Ve çekildikten sonra, bir saklamak pop yaparım .

  1. git stash
  2. git çekme
  3. git stash pop

Adım 3 bazen bir birleştirmeyi tetikler ve çözmeniz gereken çakışmalara neden olabilir, bu da iyi bir şeydir.

Bu, ekipteki diğer kişilerle paylaşılmayan yerel değişiklikleri korumamı sağlar.

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.