如何告诉.gitignore(或git本身)忽略包含#TODO的行

时间:2016-11-24 20:33:24

标签: git

我有很多行# TODO供将来参考。这些是个人的,我不想在进行更改时将它们与我的文件的其余部分一起提交。

有没有办法告诉.gitignore(或git本身)不包含任何包含# TODO

的行

或作为奖励..不仅仅是行,而是可能从# TODO到行尾,我在同一行有一个TODO就有代码

实施例

def destroy
  # TODO Alter route (Tell git to ignore this)
  @comment.destroy
end

或者:

def destroy
  @comment.destroy # TODO Alter this line. (Tell git to ignore from '# TODO' onwards.
end

2 个答案:

答案 0 :(得分:7)

您可以使用“干净”过滤器。它在文件暂存之前运行。

首先,定义要使用过滤器的文件类型,并将它们放在.gitattributes文件中:

*.rb filter=removetodo

然后,调整你的配置,以便你告诉git“removetodo”过滤器应该做什么干净:

git config filter.removetodo.clean "sed '/TODO/d'"

取自Delete lines in a text file that containing a specific string

的sed命令

然后,当你进行git add时,git会默默地从.rb文件中删除包含单词TODO的每一行,而不会影响你的工作区域。

缺点是,如果您不小心合并了任何触及这些文件的更改,您将失去所有TODO。

答案 1 :(得分:4)

不,gitignore用于忽略文件,而不是行。

你能做的最好的事情是使用一个提交钩子(检查https://git-scm.com/book/it/v2/Customizing-Git-Git-Hooks上的pre-commit钩子)它可以删除这些线。

这可以使用sed / awk和一些正则表达式来实现,例如