我的很多调试代码都包含在页眉/页脚中。通常我运行一个脚本,在我暂存和提交更改之前从源中删除所有脚本。如果调试代码需要持久提交,我将运行git add -p
并单独分阶段。
我的问题是,是否可以根据正则表达式进行更改?例如,给定javascript的片段:
function littleNinja( sword ) {
/* debug:start */
console.log( sword );
/* debug:stop */
// do stuff
}
我不希望git在debug:start
和debug:stop
之间划分界限,我希望这个过程可以自动完成。
答案 0 :(得分:8)
这样做的好方法是使用clean and smudge filters过滤掉标记的行。 (下面的描述基本上与“Pro Git”部分中描述的过程相同,并且与git attributes文档中的描述非常相似。)首先,我们需要一个删除行的命令每个debug:start
和debug: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
我(非常简短地)对此进行了测试,它似乎做了你想做的事。