Насколько грип через ваши поэтапные файлы до совершения?

StackOverflow https://stackoverflow.com/questions/4102151

  •  29-09-2019
  •  | 
  •  

Вопрос

Итак, до работы git commit Я часто буду проходить следующее:

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

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

git diff --cached

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

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

Так как я могу запустить git grep И есть ли это только грип через мои поэтапные файлы?

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

Это было полезно?

Решение

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

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

Это будет работать git grep в списке поэтапных файлов.

Другие советы

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

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

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

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

git show :<file>

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

# 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, который использует этот метод, чтобы проверить, что авторские права на сегодняшний день в курсе файлов будут совершенные.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top