답변:
예, git이 쉘이 아닌 glob를 확장하도록 보장하면 어떤 수준에서나 일치하므로 이와 같이 (따옴표가 중요합니다) 제대로 작동합니다.
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'
재귀 적으로 파일을 포함 시키려면 (현재 디렉토리 포함) 이것이 나를 위해 일했습니다.
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
있습니다. Bash의 맨 페이지에서 '/가 오는 경우 두 개의 인접한 *는 디렉토리와 하위 디렉토리에만 일치합니다.'
확장을위한 명령 줄 인수.
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`
나는 이것으로 마무리했다.
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
파일 이름에 'test'(대소 문자 구분)라는 단어가 포함되어 있고 끝나지 않는 경우에만 지정된 커밋에 대한 diff를 표시 .sql
하고 필요에 따라 파이프 라인을 수정하십시오.