Câu trả lời:
Có, nếu bạn đảm bảo rằng git mở rộng một quả địa cầu chứ không phải vỏ của bạn thì nó sẽ phù hợp ở mọi cấp độ vì vậy một cái gì đó như thế này (trích dẫn rất quan trọng) sẽ hoạt động tốt.
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
cũng hữu ích làgit diff master HEAD --name-only
''
) cũng rất quan trọng! git diff -- src/*.js
nên làgit diff -- 'src/*.js'
Để bao gồm các tệp đệ quy (bao gồm cả thư mục hiện tại), điều này làm việc cho tôi:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
Sử dụng sao của shell của bạn (tìm kiếm đệ quy) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
hoặc sử dụng tìm:
find -name '*.py' -print0 | xargs -0 git diff --
Cả hai đều là tên đặc biệt và bằng chứng khoảng trắng. Mặc dù bạn có thể muốn lọc các thư mục có phần mở rộng .py :)
1 tôi thích làm git diff -- {.,**}/*.py
thường
2 Khi Glostar được bật, git diff -- **/*.py
đã bao gồm ./*.py
. Trong trang chủ của Bash: 'Nếu được theo sau bởi một /, hai * s liền kề sẽ chỉ khớp với các thư mục và thư mục con.'
Đối số dòng lệnh để mở rộng.
git diff *.py
Thay vào đó, bạn có thể dẫn find
vào git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
và không có tiêu đề la hét
Như đã thử nghiệm trên git phiên bản 2.18.0, phần mở rộng tệp nên được trích dẫn bằng dấu ngoặc kép. Nếu bạn muốn tìm sự khác biệt cuối cùng giữa kho lưu trữ cục bộ của bạn và kho lưu trữ từ xa, sau khi kéo, bạn có thể sử dụng:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Ví dụ:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
Không có câu trả lời nào ở trên có vẻ hiệu quả với tôi dưới git bash
Windows. Tôi không chắc đó là phiên bản (tôi đang sử dụng 1.8.4) hay Windows / bash thing; Ngoài ra, trong trường hợp của tôi, tôi muốn tìm khác biệt hai nhánh trong đó mỗi nhánh có các tệp bổ sung không có trong nhánh khác (do đó, các nhánh dựa trên 'find' là remiss).
Dù sao, điều này làm việc cho tôi (trong ví dụ của tôi, tìm kiếm một sự khác biệt giữa các tệp python):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
sẽ chỉ hiển thị sự khác biệt trong các tập tin chưa được phân loại.
Tôi tìm thấy câu hỏi này vì tôi muốn loại trừ .info
các tập tin từ git diff
. Tôi đã đạt được điều này bằng cách dàn dựng nó với git add *.info
, làm giảm các tập tin còn lại.
Tôi nghĩ ra điều này:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Điều này chỉ hiển thị khác nhau cho cam kết được chỉ định nếu tên tệp chứa từ 'test' (không phân biệt chữ hoa chữ thường) và không kết thúc bằng .sql
, sửa đổi đường ống khi cần thiết cho trường hợp của bạn.