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

3

我有很多带有# 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

1
你只想删除这些行或禁用一个 push 吗?你难道不想记录下你的待办事项,以便以后知道这是怎么炸的吗?(答案:因为你从未实现待办事项) - court3nay
2个回答

13

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

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

*.rb filter=removetodo

然后,调整你的配置文件以告诉Git在清理时应该如何执行"removetodo"过滤器:

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

删除包含特定字符串的文本文件中的行中获取的sed命令。

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

缺点是,如果您意外合并涉及这些文件的任何更改,则将失去所有TODO。


在合并时丢失TODOS是需要考虑的问题,幸运的是,我所工作的分支只有我自己在处理,而且更多只是给自己的笔记,并不是非常重要的。任何重要的事情都有可能在其他地方有记录。 - Antonio
太好了!有什么办法可以在git status的更改文件列表中排除它吗? - Ctrl-C
1
@Ctrl-C 我认为这是不可能的,参见 https://dev59.com/0GIj5IYBdhLWcg3w24oF#19809121 - 1615903

4
不,gitignore用于忽略文件,而不是行。
最好的方法是使用提交钩子(检查https://git-scm.com/book/it/v2/Customizing-Git-Git-Hooks中的 pre-commit 钩子),它可以删除这样的行。
例如,可以使用sed/awk和一些正则表达式来完成这个任务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接