Abaikan file .pyc di repositori git

107

Bagaimana cara mengabaikan .pycfile di git?

Jika saya memasukkannya ke .gitignoredalamnya tidak akan berhasil. Saya ingin mereka tidak terlacak dan tidak diperiksa komitnya.

enfix
sumber
4
.gitignore seharusnya berfungsi. Dapatkah Anda memberikan salinan baris yang telah Anda masukkan ke dalam .gitignore untuk mencoba memecahkan masalah ini?
Al Riddoch

Jawaban:

41

Masukkan .gitignore. Tapi dari gitignore(5)halaman manual:

  ·   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".

Jadi, tentukan path lengkap ke *.pycentri yang sesuai , atau letakkan di .gitignorefile di direktori mana pun yang mengarah dari root repositori (inklusif).

Ignacio Vazquez-Abrams
sumber
6
Hanya untuk menghindari orang lain menjadi bingung, interpretasi Ignacio terhadap halaman manual salah. Anda tidak perlu meletakkan * .pyc di direktori yang sama, cukup dengan meletakkannya di direktori induk (atau kakek, dll).
Godsmith
@Godith: Dikoreksi.
Ignacio Vazquez-Abrams
241

Anda harus menambahkan baris dengan:

*.pyc 

ke .gitignorefile di folder root pohon repositori git Anda tepat setelah inisialisasi repositori.

Seperti yang dikatakan ralphtheninja , jika Anda lupa melakukannya sebelumnya, jika Anda hanya menambahkan baris ke .gitignorefile, semua .pycfile yang dikomit sebelumnya masih akan dilacak, jadi Anda harus menghapusnya dari repositori.

Jika Anda menggunakan sistem Linux (atau "orang tua & anak" seperti MacOSX), Anda dapat melakukannya dengan cepat hanya dengan satu baris perintah yang perlu Anda jalankan dari root repositori:

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

Ini hanya berarti:

mulai dari direktori saya saat ini, temukan semua file yang namanya diakhiri dengan ekstensi .pyc, dan berikan nama file ke perintahgit rm -f

Setelah *.pycfile dihapus dari git sebagai file yang dilacak, lakukan perubahan ini ke repositori, dan akhirnya Anda bisa menambahkan *.pycbaris ke .gitignorefile.

(diadaptasi dari http://yuji.wordpress.com/2010/10/29/git-remove-all-pyc/ )

Enrico M.
sumber
3
Alternatifnya, hanya untuk menghapus file dari git dan dari mesin lokal Anda, Anda dapat melakukannya git rm --cached *.pycdari direktori tingkat atas. Dapatkan dari sini
Anupam
Saya memilikinya, tetapi setelah Anda memasukkan file .pyc, ia tetap dilacak oleh git, Anda harus menghapusnya terlebih dahulu dan berkomitmen jika Anda memilikinya di repositori
Mahmoud Hboubati
84

Anda mungkin telah menambahkan mereka ke repositori sebelum meletakkan *.pycdi .gitignore.
Hapus terlebih dahulu dari repositori.

ralphtheninja
sumber
3

saya mencoba menggunakan kalimat dari posting sebelumnya dan tidak berfungsi secara rekursif, kemudian membaca beberapa bantuan dan mendapatkan baris ini:

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

pd perlu menambahkan * .pyc dalam file .gitignore untuk menjaga kebersihan git

echo "*.pyc" >> .gitignore

Nikmati.

Dario Roman Garcia Gonzalez
sumber
1

Jika Anda ingin mengabaikan file '.pyc' secara global (yaitu jika Anda tidak ingin menambahkan baris ke file .gitignore di setiap direktori git), coba yang berikut ini:

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

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

  • Pola yang diinginkan oleh pengguna untuk diabaikan oleh Git dalam semua situasi (misalnya, file cadangan atau file sementara yang dibuat oleh editor pilihan pengguna) umumnya masuk ke file yang ditentukan oleh core.excludesFile di ~ / .gitconfig pengguna.

  • Sebuah "**" di depan diikuti dengan garis miring berarti cocok di semua direktori. Misalnya, "** / foo" cocok dengan file atau direktori "foo" di mana saja, sama seperti pola "foo". "** / foo / bar" cocok dengan file atau direktori "bar" di mana saja yang berada langsung di bawah direktori "foo".

Tae Kim
sumber
0

Terima kasih @Enrico atas jawabannya.

Perhatikan jika Anda menggunakan virtualenv, Anda akan memiliki beberapa .pycfile lagi di dalam direktori Anda saat ini, yang akan ditangkap oleh perintah find-nya.

Sebagai contoh:

./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

Saya rasa tidak ada salahnya untuk menghapus semua file, tetapi jika Anda hanya ingin menghapus file .pyc file di direktori utama Anda, maka lakukan saja

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

Ini hanya akan menghapus app.pycfile dari repositori git.

Andy G
sumber