基于正则表达式的git阶段变化

时间:2011-10-26 18:20:06

标签: git

我的很多调试代码都包含在页眉/页脚中。通常我运行一个脚本,在我暂存和提交更改之前从源中删除所有脚本。如果调试代码需要持久提交,我将运行git add -p并单独分阶段。

我的问题是,是否可以根据正则表达式进行更改?例如,给定javascript的片段:

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

我不希望git在debug:startdebug:stop之间划分界限,我希望这个过程可以自动完成。

1 个答案:

答案 0 :(得分:8)

这样做的好方法是使用clean and smudge filters过滤掉标记的行。 (下面的描述基本上与“Pro Git”部分中描述的过程相同,并且与git attributes文档中的描述非常相似。)首先,我们需要一个删除行的命令每个debug:startdebug:end之间(包括) - 幸运的是,sed这是一项简单的工作:

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

现在在git存储库的顶层创建一个.gitattributes文件,其中包含以下行:

*.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

我(非常简短地)对此进行了测试,它似乎做了你想做的事。