8

很多时候,我喜欢修改一些代码行以使调试更容易,但我实际上并不想提交它们。例如,我将通过注释掉一些代码行来禁用一些烦人的功能(如广告),或者我将日志级别和过滤器设置为仅我关心的那些,或者我将强制条件为真就这样我要运行的代码块实际上一直在运行。

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

4

5 回答 5

5

查找 --assume-unchanged 选项。有一篇关于此的博客文章很好地解释了事情。还有这个提到稍后找到这些被忽略的文件。

于 2012-04-19T00:44:32.613 回答
2

谢谢大家的回答。我最终做的是在 git 中编写一个 pre-commit 钩子,用于检查每个文件中的字符串“dont commit”(和其他变体)。如果是这样,则提交失败,我必须在提交之前编辑这些行。这是因为调试代码应该基于每行而不是每个文件来处理,因为有些文件既有调试更改,也有要提交的实际更改。(我用 perforce 的旧解决方案没有解决这个问题)。

于 2012-11-06T23:47:12.330 回答
1

我通常做的只是将调试代码放在自己的提交中,然后再恢复该提交。一个更复杂的解决方案是创建一个中间分支master,调用它debug。在分支中进行所有调试更改debug,然后将功能分支从debug. 当您准备好删除调试更改时,只需将您的功能分支重新定位到master.

于 2012-04-19T01:58:04.837 回答
0

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

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

  1. 恢复 HEAD

我用于这种情况的命令是:

git checkout -- file ...

使用您为调试目的而修改的所有文件。

这会将文件恢复为HEAD. 然后你可以安全地制作你的git commit -a或任何东西。

  1. 告诉 git 问你要提交哪些更改(每个文件)

    混帐添加 -p 。

请参阅#1085162

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

于 2012-04-19T10:13:42.023 回答
0

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

于 2015-04-02T08:59:50.837 回答