2012-04-19 68 views
6

很多时候,我喜欢修改一些代码行以便更容易调试,但我实际上并不想提交它们。例如,我会通过注释掉一些代码行来禁用一些烦人的功能(比如广告),或者我将日志级别和过滤器设置为仅关注我所关注的那些级别,或者我会强制条件为真只是我想要运行的代码块实际上一直运行。Git:如何防止提交仅用于调试目的的文件?

在Perforce中,我会为这些文件创建一个“更改列表”并将其标记为“不要提交!”。 Git中的这个相当于什么?分支不起作用,因为这些仅供调试的修改需要与我目前正在进行的其他更改一起存在。

回答

0

谢谢你的回答。我最终做的是在git中写一个预先提交的钩子,在每个文件中检查字符串“不提交”(以及其他变体)。如果是这样,那么提交失败了,我必须在提交之前编辑这些行。这是因为调试代码应该以每行为基础来处理,而不是按文件处理,因为某些文件同时具有调试更改和实际更改以提交。 (我的旧解决方案与perforce没有解决这个问题)。

5

查找--assume-unchanged选项。有一篇博客文章about this,它解释得很好。还提到了this one,后面提到了这些被忽略的文件。

+0

第二个链接有很好很容易的解释 – 2012-08-31 05:35:24

1

我通常所做的只是将调试代码放入其自己的提交中,并稍后恢复提交。更多涉及的解决方案是关闭master的中间分支,将其称为debug。在debug分支中进行所有调试更改,然后从debug开始关闭功能分支。当您准备移除调试更改时,只需将您的功能分支重新绑定到master即可。

0

您实际上不想忽略这些文件,但忽略这些更改。

我看到了两个解决方案,在这里:

  1. 恢复HEAD

我使用这样的情况下的命令是:

git checkout -- file ... 

所有你修改调试文件目的。

这会恢复从HEAD开始的文件。 然后你可以安全地让你的git commit -a或其他任何东西。

  • 通知Git问你什么样的变化,以(每个文件)

    git的添加-p提交。

  • 参见#1085162

    但是你仍然需要删除你的调试代码。

    0

    不是通用的,但可能适合某些工作流场景的解决方案之一是应用Git的预提交筛选器(manual,manual + samples)。简而言之,它只是一个预处理工具,可以在实际提交之前调用所有提交的文件。您可以使用此机制去除某些模式,如//<NOCOMMIT ... //NOCOMMIT>或任何您喜欢的模式。缺点是这些调试行可能会在重置为提交或甚至拉/合并时消失(我没有检查)。