Git deposundaki .pyc dosyalarını yoksay


107

Git'teki .pycdosyaları nasıl yok sayabilirim ?

Eğer içine koyarsam .gitignoreişe yaramaz. İzlenmemelerine ve taahhütler için kontrol edilmemelerine ihtiyacım var.


4
.gitignore çalışmalıdır. Bu sorunu çözmeye çalışmak için .gitignore'a koyduğunuz satırların bir kopyasını sağlayabilir misiniz?
Al Riddoch

Yanıtlar:


41

Yerine koy .gitignore. Ama gitignore(5)man 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".

Bu nedenle, ya uygun *.pycgirişin tam yolunu belirtin ya .gitignoreda depo kök dizininden (dahil) gelen herhangi bir dizindeki bir dosyaya koyun .


6
Başkalarının kafasının karışmasını önlemek için, Ignacio'nun man sayfasını yorumlaması yanlış. * .Pyc'i aynı dizine koymanıza gerek yoktur, onu bir ana dizine (veya büyük ebeveyn vb.) Koymanız yeterlidir.
Godsmith

@Godsmith: Düzeltildi.
Ignacio Vazquez-Abrams

242

Şunlarla bir satır eklemelisiniz:

*.pyc 

için .gitignoredoğru depo başlatmasından sonra senin git depo ağacın kök klasöründe dosyanın.

As ralphtheninja sözü size sadece hattı eklerseniz, önceden bunu unutursanız, .gitignoredosyanın, önceden işlenen .pycdepodan bunları kaldırmak gerekir böylece dosyalar hala izlenir.

Bir Linux sistemindeyseniz (veya bir MacOSX gibi "ebeveynler ve oğullar"), bunu deponun kökünden yürütmeniz gereken tek satırlık komutla hızlı bir şekilde yapabilirsiniz:

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

Bu sadece şu anlama gelir:

şu anda bulunduğum dizinden başlayarak, adı uzantı ile biten tüm dosyaları bulun .pycve dosya adını komuta iletingit rm -f

*.pycDosyaların git'ten izlenen dosyalar olarak silinmesinden sonra , bu değişikliği arşive işleyin ve sonunda *.pycsatırı .gitignoredosyaya ekleyebilirsiniz .

( http://yuji.wordpress.com/2010/10/29/git-remove-all-pyc/ adresinden uyarlanmıştır )


3
Alternatif olarak, dosyaları git'ten ve yerel makinenizden kaldırmak için, bunu sadece git rm --cached *.pycüst düzey dizinden yapabilirsiniz . Buradan
Anupam

Bende var ama .pyc dosyalarını işledikten sonra git tarafından izleniyor, önce onları
silmeli

84

Muhtemelen koymadan önce depoya ekleyen *.pyciçinde .gitignore.
Önce onları havuzdan çıkarın.


3

Önceki bir gönderinin cümlesini kullanmaya çalışıyorum ve yinelemeli çalışmıyorum, sonra biraz yardım okuyup şu satırı alıyorum:

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

git'i temiz tutmak için .gitignore dosyasına * .pyc eklemek için pd gereklidir

echo "*.pyc" >> .gitignore

Zevk almak.


2

Genel olarak '.pyc' dosyalarını yok saymak istiyorsanız (yani satırı her git dizinindeki .gitignore dosyasına eklemek istemiyorsanız), aşağıdakileri deneyin:

$ cat ~/.gitconfig 
[core]
    excludesFile = ~/.gitignore
$ cat ~/.gitignore
**/*.pyc

[Referans]
https://git-scm.com/docs/gitignore

  • Bir kullanıcının Git'in her durumda göz ardı etmesini istediği modeller (örneğin, kullanıcının tercih ettiği düzenleyici tarafından oluşturulan yedekleme veya geçici dosyalar) genellikle kullanıcının ~ / .gitconfig dosyasında core.excludesFile ile belirtilen bir dosyaya gider.

  • Başında bir "**" ve ardından gelen eğik çizgi, tüm dizinlerde eşleşme anlamına gelir. Örneğin, "** / foo" dosya veya "foo" dizini herhangi bir yerde, "foo" kalıbıyla aynı şekilde eşleşir. "** / foo / bar", doğrudan "foo" dizini altındaki herhangi bir yerde dosya veya "bar" dizini ile eşleşir.


0

Cevap için teşekkürler @Enrico.

Eğer virtualenv kullanıyorsanız .pyc, o anda bulunduğunuz dizinde birkaç dosyanızın daha olacağını ve bu dosyanın find komutuyla yakalanacağını unutmayın.

Ö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

Sanırım tüm dosyaları kaldırmak zararsızdır, ancak yalnızca .pycana dizininizdeki dosyaları kaldırmak istiyorsanız ,

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

Bu sadece app.pycdosyayı git deposundan kaldıracaktır .

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.