2016-06-28 132 views
1

有时我会对文件进行更改以便于调试,并且我希望确保不会意外地提交这些更改。忽略git中的调试更改

我采取的一种方法是包含一个特殊评论,如// DEBUGGING和拒绝尝试提交此评论的预提交挂钩。问题是需要在存储库的所有副本中设置钩子,并且我必须记住添加注释以及脚本查找的确切形式。

也有git update-index --assume-unchanged,但它只适用于文件级别,有时我会将调试更改与实际的待提交更改混合在一起。

在这种情况下还有其他工具可以帮助吗?我已经开始想象使用第二个“临时变化”索引的设置,例如状态是根据该索引进行计算的,但是提交仍然是从主索引进行的......但是在我用这个想法过分考虑之前,我想要检查我是否重复了任何现有的工作。

+0

您是否打开IDE特定提示/答案?或者寻找纯粹基于git的东西? – dubes

+0

你真的应该养成审查你即将提交的代码的习惯。除此之外,将你的代码封装在一个'if(DEBUG_MODE){//做某事}'块中并在应用程序级别打开/关闭它。 – ceejayoz

+0

“调试”分支会出现什么问题? –

回答

1

将调试注释放在代码中是没有用的,因为您会(无疑)也会执行诸如注释等事情,插入printf("foo is %d", foo)或其他任何内容,而不记得添加注释。

因此,您需要调整您的工作流程,以便您不会提交您的更改

在工作副本干净的状态下进行调试。要实现这一点,要么是git commit要么是git stash的更改。当您完成调试时,git reset --hard将您带回您开始的位置。

如果您确实需要提交(例如分享您的代码),请在分支名称中使用-debug或类似名称提交给单独的分支。

另一个良好实践:在推动之前检查每个提交与git show。阅读你正在编写的代码本身就很有价值(你用这种方式找到了多少格式化问题或者思维是惊人的)。它还捕获正在进行的调试。

3

这个问题是通过训练自己成为提交时遵循特定规则例程的习惯来解决的。其次,在发布它们之前检查你的提交。

训练自己永远不要使用git commit -a。始终使用git commit --patch并交互式地选择每个大块。学习如何使用s)plit和e)dit来做精细的变化选择。拆分每个可以拆分的块,并注意您批准提交的每个更改。

在编辑提交消息时,将git diff --cached的输出读入编辑缓冲区,该缓冲区仅显示您提交的更改。在撰写评论时请参考此材料,并随时删除它。如果在git diff --cached中看到任何不需要的东西,则清空缓冲区并保存并退出,以中止提交。

在推出之前检查您的提交。如果您看到一些意外添加的调试打印,请使用git reset --patch HEAD^以交互方式执行一组更改,以删除不需要的更改。然后git commit --amend将这些删除组合到提交中。由于工作树保持完好,在这之后,这些更改再次只是局部修改。

不要将提交视为最终可交付成果。假设提交正在进行中,并准备在发布它们之前通过多次迭代对它们进行优化,在此期间将大型提交分成较小的提交,或将较小的提交压缩为较大的提交,重新排列顺序并进行其他更改。

写下预先推送的事项清单,以便在要发布的新提交系列中查找并遵守该清单。