假设我和朋友正在处理一个位于github存储库的文件work.txt
。我想对我的本地副本上存在的这个文件做一些评论但是在我更新时不会被推送。这可能与git有关吗?
想象一下,例如这个文件是一些代码,我想添加一些关于函数的信息作为注释,以便我自己记住,但是当我的朋友记得函数非常清楚时,他不需要那里的评论。我希望此注释出现在我的本地文件中,但不会出现在存储库中。此外,我希望当文件更新时,注释仍保留在我本地计算机的更新版本中(否则我只能保留本地副本并在更新时覆盖注释)。
虽然我认为令人钦佩的是人们试图提供解决方案而不是仅仅说“不可能”,但提供的解决方案主要是弊大于利。它们通常涉及在工作树中永久保留未提交/未分级的更改,这些更改最多也是不稳定的。
最接近可行解决方案的是Gonzalo Matheu建议使用清洁/涂抹过滤器。即便如此,这还远远不是一个扣篮。 (很容易写出一个干净的过滤器,可以识别和删除某些注释,但让污迹过滤器可靠地工作......那就更难了。)
简短的回答是,这不是git提供的功能。
这并不意味着你不能创建工具来协助它,如果由于某种原因它是值得的。 (如果听起来我暗示它不值得......好吧,看起来你似乎正试图找到一个社会问题的技术解决方案 - 因为你和你的朋友不能就什么达成一致意见代码评论杠杆是合适的。)
您当然可以提供某种文档文件供您自己使用,可以存储在工作树之外,也可以给出可以通过忽略模式(*.mydoc
或其他东西)匹配的文件名。这些文件将包含足够的信息来确定每个注释的插入位置,然后您可以编写脚本将它们组合到工作文件中。如果他们以显眼的方式执行此操作以便可以使用简单的清洁过滤器删除注释,那么您可以使用“组合器”脚本作为涂抹过滤器,作为完成Matheu先生建议方法的一种方法。
您可以使用Git smudge and clean filters,它允许您使用自定义脚本在提交/结帐时在文件中进行替换。涂抹意味着每当你检查任何东西时执行此代码,清理意味着每当你检查任何东西时运行此代码。
干净的过滤器脚本必须删除所有注释,您可能必须在其前面加上特殊模式。并将这些注释保存到辅助的差异文件中。
涂抹过滤器必须将辅助差异文件应用于原始文件才能恢复您的评论。
使用此功能,您无需在提交之前执行任何特殊操作。即:只需提交,清洁过滤器将处理您的工作副本注释。
有几个回购与例子:
无论如何,这感觉就像一个矫枉过正,额外的评论不会在存储库中受到伤害,如果写得正确,它们将作为文档工作。
可以使用git执行此操作,但是每次更新文件时都必须指定要提交的文件部分。为此,将带有-p(补丁)标志的'hunks'文件添加到git add
,而不是整个:
git add work.txt -p
您将进入交互式提示,询问您是否要暂存文件的特定部分。回复y
或n
,或命令other possible options之一 - 选择n
作为您不想提交的注释部分。
最后,你要做的是与git做一个不寻常的事情,这个解决方案基本上是在一个不是真正设计的情况下工作的git。在生产代码库中,将提交注释,但可以在部署之前通过构建工具删除注释。