ละเว้นไฟล์. pyc ในที่เก็บ git


107

ฉันจะละเว้น.pycไฟล์ใน git ได้อย่างไร

ถ้าใส่.gitignoreแล้วไม่ได้ผล ฉันต้องการให้พวกเขาไม่ถูกติดตามและไม่ถูกตรวจสอบการกระทำ


4
.gitignore ควรใช้งานได้ คุณสามารถให้สำเนาของบรรทัดที่คุณใส่ไว้ใน. gitignore เพื่อพยายามแก้ไขปัญหานี้ได้หรือไม่?
Al Riddoch

คำตอบ:


41

.gitignoreใส่ไว้ใน แต่จากgitignore(5)หน้าคน:

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

ดังนั้นให้ระบุพา ธ แบบเต็มไปยัง*.pycรายการที่เหมาะสมหรือวางไว้ใน.gitignoreไฟล์ในไดเร็กทอรีใด ๆ ที่นำมาจากรูทที่เก็บ (รวม)


6
เพื่อหลีกเลี่ยงไม่ให้คนอื่นสับสนการตีความหน้าคนของอิกนาซิโอนั้นไม่ถูกต้อง คุณไม่จำเป็นต้องใส่ * .pyc ในไดเร็กทอรีเดียวกัน แต่ก็เพียงพอที่จะวางไว้ในไดเร็กทอรีหลัก (หรือปู่ย่าตายาย ฯลฯ )
Godsmith

@Godsmith: แก้ไขแล้ว
Ignacio Vazquez-Abrams

242

คุณควรเพิ่มบรรทัดด้วย:

*.pyc 

ไปยัง.gitignoreไฟล์ในโฟลเดอร์รูทของโครงสร้างที่เก็บ git ของคุณทันทีหลังจากการเริ่มต้นที่เก็บข้อมูล

ดังที่ralphtheninjaกล่าวไว้หากคุณลืมทำไว้ล่วงหน้าหากคุณเพิ่งเพิ่มบรรทัดลงใน.gitignoreไฟล์ไฟล์ที่ผูกมัดก่อนหน้านี้.pycทั้งหมดจะยังคงถูกติดตามดังนั้นคุณจะต้องลบออกจากที่เก็บ

หากคุณใช้ระบบ Linux (หรือ "ผู้ปกครองและบุตรชาย" เช่น MacOSX) คุณสามารถทำได้อย่างรวดเร็วด้วยคำสั่งบรรทัดเดียวที่คุณต้องดำเนินการจากรากของที่เก็บ:

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

นี่หมายความว่า:

เริ่มต้นจากไดเร็กทอรีที่ฉันอยู่ในปัจจุบันค้นหาไฟล์ทั้งหมดที่มีชื่อลงท้ายด้วยนามสกุล.pycและส่งชื่อไฟล์ไปยังคำสั่งgit rm -f

หลังจาก*.pycลบไฟล์จาก git เป็นไฟล์ที่ติดตามแล้วให้ทำการเปลี่ยนแปลงนี้กับที่เก็บจากนั้นคุณสามารถเพิ่ม*.pycบรรทัดลงใน.gitignoreไฟล์ได้ในที่สุด

(ดัดแปลงจากhttp://yuji.wordpress.com/2010/10/29/git-remove-all-pyc/ )


3
หรือหากต้องการลบไฟล์ออกจากคอมไพล์และจากเครื่องภายในของคุณคุณสามารถทำได้git rm --cached *.pycจากไดเร็กทอรีระดับบนสุด ได้มาจากที่นี่
Anupam

ฉันมีอยู่ แต่เมื่อคุณยอมรับไฟล์. pyc มันจะถูกติดตามโดย git ต่อไปคุณควรลบออกก่อนและยอมรับในกรณีที่คุณมีในที่เก็บ
Mahmoud Hboubati


3

ฉันพยายามใช้ประโยคของโพสต์ก่อนหน้าและไม่ทำงานซ้ำจากนั้นอ่านความช่วยเหลือและรับบรรทัดนี้:

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

pd จำเป็นต้องเพิ่ม * .pyc ในไฟล์. gitignore เพื่อรักษา git ให้สะอาด

echo "*.pyc" >> .gitignore

สนุก.


2

หากคุณต้องการละเว้นไฟล์ ".pyc" ทั่วโลก (เช่นหากคุณไม่ต้องการเพิ่มบรรทัดในไฟล์. gitignore ในทุกไดเร็กทอรี git) ให้ลองทำดังต่อไปนี้:

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

[อ้างอิง]
https://git-scm.com/docs/gitignore

  • รูปแบบที่ผู้ใช้ต้องการให้ Git ละเว้นในทุกสถานการณ์ (เช่นการสำรองข้อมูลหรือไฟล์ชั่วคราวที่สร้างโดยตัวแก้ไขที่ผู้ใช้เลือก) โดยทั่วไปจะอยู่ในไฟล์ที่ระบุโดย core.excludesFile ใน ~ / .gitconfig ของผู้ใช้

  • "**" นำหน้าตามด้วยเครื่องหมายทับหมายถึงการจับคู่ในไดเรกทอรีทั้งหมด ตัวอย่างเช่น "** / foo" จะจับคู่ไฟล์หรือไดเรกทอรี "foo" ที่ใดก็ได้เช่นเดียวกับรูปแบบ "foo" "** / foo / bar" จับคู่ไฟล์หรือไดเร็กทอรี "bar" ที่ใดก็ได้ที่อยู่ภายใต้ไดเร็กทอรี "foo" โดยตรง


0

ขอบคุณ @Enrico สำหรับคำตอบ

โปรดทราบว่าคุณใช้ Virtualenv หรือไม่คุณจะมี.pycไฟล์อีกหลายไฟล์ภายในไดเร็กทอรีที่คุณกำลังอยู่ซึ่งจะถูกจับโดยคำสั่ง find ของเขา

ตัวอย่างเช่น:

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

ฉันคิดว่าการลบไฟล์ทั้งหมดนั้นไม่เป็นอันตราย แต่ถ้าคุณต้องการลบ.pycไฟล์ในไดเร็กทอรีหลักของคุณเพียงแค่ทำ

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

สิ่งนี้จะลบเฉพาะapp.pycไฟล์ออกจากที่เก็บ git

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.