มีตัวเลือกในการ จำกัดgit diff
ชุดนามสกุลไฟล์ที่กำหนดหรือไม่?
มีตัวเลือกในการ จำกัดgit diff
ชุดนามสกุลไฟล์ที่กำหนดหรือไม่?
คำตอบ:
ใช่ถ้าคุณมั่นใจว่า git นั้นขยายวงกว้างมากกว่าที่เปลือกของคุณมันจะจับคู่กับทุกระดับดังนั้นบางสิ่งเช่นนี้ (คำพูดสำคัญ) ควรจะทำงานได้ดี
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
ยังมีประโยชน์คือgit diff master HEAD --name-only
''
) ก็มีความสำคัญเช่นกัน! git diff -- src/*.js
ควรเป็นgit diff -- 'src/*.js'
หากต้องการรวมไฟล์แบบเรียกซ้ำ (รวมถึง dir ปัจจุบัน) สิ่งนี้ใช้ได้สำหรับฉัน:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
ใช้ globstar ของเชลล์ (ซึ่งจะทำการค้นหาแบบเรียกซ้ำ) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
หรือใช้ค้นหา:
find -name '*.py' -print0 | xargs -0 git diff --
ทั้งสองนี้เป็นชื่อพิเศษและการพิสูจน์ช่องว่าง แม้ว่าคุณอาจต้องการกรองสำหรับไดเรกทอรีที่มีนามสกุล. py :)
1 ฉันชอบทำตามgit diff -- {.,**}/*.py
ปกติ
2 เมื่อเปิดใช้งาน globstar อยู่git diff -- **/*.py
แล้วรวมอยู่./*.py
ด้วย ใน manpage ของ Bash: 'ถ้าตามด้วย a /, * s สองอันที่อยู่ติดกันจะจับคู่เฉพาะไดเรกทอรีและไดเรกทอรีย่อย'
สำหรับรูปแบบไฟล์ธรรมดาสิ่งนี้ดูเหมือนจะใช้ได้:
$ git ls-files -zm '*.txt' | xargs --null git diff
ช่องว่างที่ปลอดภัยและคุณสามารถมีส่วนขยายได้หลายรายการเช่นกัน:
$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff
อาร์กิวเมนต์บรรทัดคำสั่งสำหรับส่วนขยาย
git diff *.py
ในอีกทางหนึ่งคุณสามารถfind
ไปที่git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
และไม่มีการตะโกนหัว
เมื่อทดสอบกับ git เวอร์ชั่น 2.18.0 แล้วควรทำการอ้างอิงนามสกุลของไฟล์ด้วยเครื่องหมายคำพูดคู่ หากคุณต้องการหาความแตกต่างล่าสุดระหว่างที่เก็บข้อมูลโลคัลและรีโมตหนึ่งหลังจากดึงคุณสามารถใช้:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
ตัวอย่างเช่น:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
ดูเหมือนว่าคำตอบข้างต้นจะไม่เหมาะกับฉันgit bash
ที่ใช้ Windows ฉันไม่แน่ใจว่ามันเป็นรุ่น (ฉันใช้ 1.8.4) หรือ Windows / bash สิ่ง; ในกรณีของฉันฉันต้องการแยกสองสาขาซึ่งแต่ละสาขามีไฟล์เพิ่มเติมที่ไม่ปรากฏในสาขาอื่น
อย่างไรก็ตามสิ่งนี้ใช้ได้สำหรับฉัน (ในตัวอย่างของฉันกำลังมองหาส่วนต่างระหว่างไฟล์ไพ ธ อน):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
จะแสดงความแตกต่างในไฟล์ที่ไม่มีการกำหนดสถานะเท่านั้น
ผมพบว่าคำถามนี้เพราะผมอยากที่จะไม่รวมไฟล์จาก.info
git diff
ฉันทำสิ่งนี้ได้ด้วยการจัดเตรียมgit add *.info
ไฟล์ซึ่งจะช่วยลดไฟล์ที่เหลือ
ฉันกระทบกับสิ่งนี้:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
สิ่งนี้แสดงให้เห็นถึงความแตกต่างสำหรับการคอมมิทที่ระบุเฉพาะในกรณีที่ชื่อไฟล์มีคำว่า 'test' (case insensitive) และไม่สิ้นสุด.sql
ให้แก้ไขไปป์ไลน์ตามความจำเป็นสำหรับกรณีของคุณ