2011-04-05 18 views
50

git. Dosyasında .pyc dosyasını nasıl yok sayabilirim. Eğer koyduysam .gitignore işe yaramıyor: onlar için bir sürtünmeye ihtiyaç duymazlar ve onun kontrolünü kontrol edemem.Git deposunda .pyc dosyasını yok say.

+4

.gitignore çalışmalıdır. Bu sorunu çözmeye çalıştığınız satırların bir kopyasını .gitignore sağlayabilir misiniz? –

cevap

27

.gitignore'a yerleştirin. Ama gitignore(5) adam sayfasından:

· If the pattern does not contain a slash /, git treats it as a shell 
     glob pattern and checks for a match against the pathname relative 
     to the location of the .gitignore file (relative to the toplevel of 
     the work tree if not from a .gitignore file). 

    · Otherwise, git treats the pattern as a shell glob suitable for 
     consumption by fnmatch(3) with the FNM_PATHNAME flag: wildcards in 
     the pattern will not match a/in the pathname. For example, 
     "Documentation/*.html" matches "Documentation/git.html" but not 
     "Documentation/ppc/ppc.html" or 
     "tools/perf/Documentation/perf.html". 

Yani, uygun *.pyc girişine tam yolu belirtin ya ya (depo kökünden gelen dizinleri herhangi bir .gitignore dosyada dahil koymak).

+3

Başkalarının kafasını karıştırmaktan başka sakınmak için, Ignacio'nun man sayfasını yorumlaması yanlış. * .pyc'yi aynı dizine koymanıza gerek yoktur, bunu ana dizine (veya büyükbabaya vb.) Koymanız yeterlidir. – Godsmith

+0

@Godsmith: Düzeltildi. –

62

*.pyc'u .gitignore numaralı telefona koymadan önce bunları muhtemelen depoya eklediniz.
İlk önce bunları depodan çıkarın.

+26

this gotcha her zaman bana yalvarıyor – ecoe

115

Sen içeren bir satır eklemek gerekir:

*.pyc 

senin git depo ağacının kök klasöründe .gitignore dosyaya sağ depo başlatmasından sonra. Eğer sadece .gitignore dosyasına satır eklerseniz, önceden bunu unutursanız

olarak ralphtheninja, önceden, .pyc dosyalar halen takip edilecektir kararlı dedi böylece bunları kaldırmak gerekir deposu.

find . -name "*.pyc" -exec git rm -f "{}" \; 
: Bir Linux sisteminin (veya MacOSX gibi "anne & oğulları") üzerinde ise

, size deposundan kökünden yürütmek için gereken sadece bu tek satır komutla bunu hızla yapabilirsiniz

Bu sadece şu anlama gelir:

i şu anda olduğum dizinden başlayarak kimin adı uzantısı .pyc biten tüm dosyaları bulmak ve komuta dosya adını geçirmek git rm -f

izlenen dosyaları olarak git den *.pyc dosyaları silme sonra havuzuna bu değişikliği işlemek ve sonra nihayet .gitignore dosyaya *.pyc satırı ekleyebilirsiniz. (http://yuji.wordpress.com/2010/10/29/git-remove-all-pyc/ uyarlanmıştır)

yanıt için

+0

Bu inanılmaz – Tunn

+0

Alternatif olarak, sadece dosyaları git ve yerel makineden kaldırmak için, sadece 'rm - cached * .pyc 'üst düzey dizininden yapabilirsiniz. Buradan aldım (https://coderwall.com/p/wrxwog/why-not-to-commit-pyc-files-into-git-and-how-to-fix-if-you-already-did) – Anupam

0

sayesinde @Enrico.

Eğer virtualenv kullanıyorsanız, şu an içinde bulunduğunuz dizinde birkaç tane daha .pyc dosyanız olacaktır, bu da onun bulma komutu tarafından yakalanacaktır.

Örneğin

:

./app.pyc 
./lib/python2.7/_weakrefset.pyc 
./lib/python2.7/abc.pyc 
./lib/python2.7/codecs.pyc 
./lib/python2.7/copy_reg.pyc 
./lib/python2.7/site-packages/alembic/__init__.pyc 
./lib/python2.7/site-packages/alembic/autogenerate/__init__.pyc 
./lib/python2.7/site-packages/alembic/autogenerate/api.pyc 

Ben tüm dosyaları kaldırmak için zararsız varsayalım, ancak bunları yalnızca ana dizinde .pyc dosyaları kaldırmak istiyorsanız, o zaman sadece

find "*.pyc" -exec git rm -f "{}" \;

do

Bu, git deposundan yalnızca app.pyc dosyasını kaldıracaktır.

İlgili konular