этап изменения в GIT на основе регулярных выражений - PullRequest
7 голосов
/ 26 октября 2011

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

У меня вопрос: возможно ли вносить изменения на основе регулярного выражения? Например, учитывая этот фрагмент JavaScript:

function littleNinja( sword ) {
    /* debug:start */
    console.log( sword );
    /* debug:stop */
    // do stuff
}

Я не хочу, чтобы git ставил строки между debug:start и debug:stop включительно, и я надеюсь, что этот процесс может быть автоматизирован.

1 Ответ

8 голосов
/ 27 октября 2011

Хороший способ сделать это - использовать чистые и грязные фильтры , чтобы отфильтровать отмеченные линии по мере их постановки. (Описание, приведенное ниже, по сути аналогично процедуре, описанной в этом разделе «Pro Git», и очень похоже на описанное в документации git attribute .) Прежде всего, нам нужна команда удаляет строки между (и включая) каждым debug:start и debug:end - к счастью, это простая работа с sed:

sed '/debug:start/,/debug:stop/d' < foo.js

Теперь создайте файл .gitattributes на верхнем уровне вашего git-репозитория, который содержит следующую строку:

*.js filter=strip-debug

А теперь определите, что фильтр strip-debug делает как при «очистке» (при подготовке), так и при «смазании» (при оформлении заказа):

git config filter.strip-debug.clean "sed '/debug:start/,/debug:stop/d'"
git config filter.strip-debug.smudge cat

Я (очень кратко) проверил это, и он, кажется, делает то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...