Відповіді:
Так, якщо ви переконаєтесь, що 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'
Або скористайтеся глобальною версією вашої оболонки (що робить рекурсивний пошук) 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
. На сторінці сторінки Баша: "Якщо слідує a /, два суміжні * s будуть відповідати лише каталогів і підкаталогів."
Аргумент командного рядка для розширення.
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 річ; Крім того, у моєму випадку я хотів розрізнити дві гілки, де кожна гілка мала додаткові файли, відсутні в іншій гілці (таким чином, на основі "знаходження" відмовляються).
У будь-якому випадку це працювало для мене (у моєму прикладі, шукаючи відмінності між файлами python):
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' (нечутливий до регістру) і не закінчується .sql
, модифікуйте конвеєр, як це необхідно для вашого випадку.