Git добавить строки к индексу grep/regex - программирование
Подтвердить что ты не робот

Git добавить строки к индексу grep/regex

У меня есть гигантский патч, который я хотел бы разбить на несколько логических git коммитов. Большое количество изменений - это просто изменение имен переменных или вызовов функций, так что они могут быть легко расположены с помощью grep. Если бы я мог добавить в индекс любые изменения, которые соответствуют регулярному выражению, а затем очистить в git gui, это спасло бы меня от ручной работы. Есть ли хороший способ обновить индекс поэтапно, используя регулярное выражение внутри git или из некоторого вывода grep (например, номера строк)?

Я нашел аналогичный вопрос, но я не уверен, как создать временный файл из поиска в виде регулярного выражения.

4b9b3361

Ответ 1

patchutils имеет команду grepdiff, которая может быть использована для достижения этой цели.

# check that the regex search correctly matches the changes you want.
git diff -U0 | grepdiff 'regex search' --output-matching=hunk  

# then apply the changes to the index
git diff -U0 | grepdiff 'regex search' --output-matching=hunk | git apply --cached --unidiff-zero 

Я использую -U0 на diff, чтобы избежать получения несвязанных изменений. Возможно, вы захотите изменить это значение, чтобы удовлетворить вашу ситуацию.

Ответ 2

Проще говоря, вы можете использовать git add -p и использовать опцию / для поиска через ваш diff для добавляемых патчей. Он не полностью автоматизирован, но проще, чем другие альтернативы, которые я нашел.

Ответ 3

Вы могли бы сначала запустить:

git s | grep "your_pattern"

Если выходные данные соответствуют назначению, добавьте файлы в индекс:

git a $(git s | grep "your_pattern")

Ответ 4

xargs - это то, что вы ищете. Попробуйте следующее:

grep -irl 'regex_term_to_find' * | xargs -I FILE git add FILE

До трубы | - это стандартная команда grep для поиска всех файлов *. Возможные варианты:

  • i - нечувствительность к регистру
  • r - рекурсивный через каталоги
  • l - список имен файлов

В xargs часть инструкции FILE - это имя переменной, которая будет использоваться для каждого аргумента/соответствия, переданного командой grep. Затем введите нужную команду, используя соответствующую переменную.