Как просмотреть ваши поставленные файлы до совершения? - PullRequest
11 голосов
/ 05 ноября 2010

Поэтому перед запуском git commit я часто запускаю следующее:

git grep --cached -l -I "debugger"

Я думал, что это было похоже на:

git diff --cached

(который покажет вам все изменениявы собираетесь коммитить, т. е. покажет вам diff в ваших подготовленных файлах).

К сожалению, я только что обнаружил, что опция --cached для git grep просто говорит git «только» смотреть на всев своем индексе.

Так, как я могу запустить git grep и заставить его работать только с моими подготовленными файлами?

(Да, я знаю, что мог бы просто сделать git diff --cached и искать в этом, но я предпочел бы иметь программную возможность просматривать мои промежуточные файлы.)

Ответы [ 3 ]

12 голосов
/ 05 ноября 2010

Многие хуки перед фиксацией используют git diff-index --cached -S<pat> REV, чтобы найти изменения, которые добавляют или удаляют определенный шаблон. Так что в вашем случае git diff-index --cached -Sdebugger HEAD. Возможно, вы также захотите добавить -u, чтобы получить diff, иначе он просто идентифицирует файл-нарушитель.

1 голос
/ 29 ноября 2018

Если у вас есть Unix-подобная оболочка, ответ довольно прост:

git grep --cached "debugger" $(git diff --cached --name-only)

Это запустит git grep в списке подготовленных файлов.

0 голосов
/ 19 января 2018

Сначала вам нужно получить список файлов из индекса (исключая удаленные файлы).Это можно сделать с помощью следующего:

git diff --cached --name-only --diff-filter=d HEAD

Во-вторых, вам нужно использовать префикс: для доступа к содержимому файла в текущем индексе (подготовленном, но еще не зафиксированном), см. gitrevisions manual для получения дополнительной информации.

git show :<file>

Наконец, вот пример того, как собрать все вместе, чтобы собрать этот список файлов

# Get a list of files in the index excluding deleted files
file_list=$(git diff --cached --name-only --diff-filter=d HEAD)

# for each file we found grep it's contents for 'some pattern'
for file in ${file_list}; do
    git show :"${file}" | grep 'some pattern'
done

Также вот пример изловушка git pre-commit, использующая этот метод для проверки актуальности лет авторских прав в файлах для фиксации.

...