【问题标题】:Can git filter out certain lines before commit?git可以在提交之前过滤掉某些行吗?
【发布时间】:2015-09-05 20:57:01
【问题描述】:

我在 github 上有一个我正在处理的 repo,我经常在我的 .py 文件中使用以“# TODO:”开头的 cmets,以记录要完成的事情。

# TODO: do this <code>

我显然不希望提交。

我希望 GitHub 在我即将提交文件时搜索所有文件,并且不包含以 # TODO: 开头的行

Git 已经这样做了吗?我知道某些版本控制(例如 perforce)已经具有此功能。

有什么想法吗?

【问题讨论】:

  • 你显然想要在你的提交中。因此,如果您丢失了工作副本,您仍然拥有您需要做的所有事情的清单。让同事知道需要做些什么。这样,如果您在另一台机器上工作,您就可以知道需要做什么。他们对代码发表评论。注释很有用,尤其是这样的 cmets。

标签: git github commit gitignore git-commit


【解决方案1】:

我希望 GitHub 在我即将提交文件时搜索所有文件,并且不包含以 # TODO: 开头的行

GitHub(服务器端)不会这样做。

但您可以在您的本地仓库中注册一个 content filter driver,它将在 git commit (like a sed '/^# TODO:/ d') 上为您完成此操作。

(图片显示在“Customizing Git - Git Attributes”,来自“Pro Git book”)

'clean' filter 可以过滤掉这些行(我不会讨论你是否应该留下它们),并且该过滤器将在 git commit 时自动应用。
这显然会删除 all TODO 包括其他人留下的,因此请小心处理:技术上是可能的,但您必须确定它是否需要/有用在你的情况下。


2016 年 2 月更新:使用 git 2.8,即使您已经定义了 git 内容过滤器,您也可以 git add 准时在需要时应用 clean 过滤器:

参见 Lars Schneider (larsxschneider)commit 1a8630d(2016 年 1 月 29 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit a3764e7,2016 年 2 月 10 日)

convert:将干净/涂抹过滤器的空字符串视为“cat

git -c filter.myFilter.clean= add test.disable
                            ^^
                          (empty value)

【讨论】:

  • 请记住,如果有人以任何方式修改文件,然后您签出该文件,那么您的 cmets 将丢失,当然。
  • @DavidDeutsch 我同意。我的回答更多的是指出它在技术上是可行的。执行它实际上是一个好的政策是另一个问题......
猜你喜欢
  • 1970-01-01
  • 2017-11-16
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 2013-04-02
  • 2020-12-28
相关资源
最近更新 更多