我可以提交/推送一个在git中省略某些注释的文件吗?

时间:2017-12-28 18:07:31

标签: git github

假设朋友和我正在处理文件work.txt,该文件位于 github 存储库中。我想对我的本地副本上存在的这个文件做一些评论,但是在我更新时不会被推送。这可以用 git 吗?

想象一下,例如这个文件是一些代码,我想添加一些关于函数的信息作为注释,以便我记住我自己,但是我的朋友记得这个函数非常清楚他不需要什么那里的评论。我希望此注释出现在我的本地文件中,但不会出现在存储库中。此外,我希望当文件更新时,注释仍保留在我本地计算机的更新版本中(否则我只需保留本地副本并在更新时覆盖注释)。

3 个答案:

答案 0 :(得分:2)

您可以使用Git smudge and clean filters,它允许您使用自定义脚本在提交/结帐时在文件中进行替换。 涂抹的意思是在您检查任何内容时执行此代码清洁表示每当您检查中的任何内容时运行此代码。

clean 过滤器脚本必须删除所有注释,您可能必须在其前面加上特殊模式。并将这些评论保存到辅助差异文件中。

涂抹过滤器必须将辅助差异文件应用于原始文件才能恢复您的评论。

使用此功能,您无需在提交之前执行任何特殊操作。即:只需提交,清洁过滤器将处理您的工作副本注释。

有几个回购的例子:

无论如何,这感觉就像是一种过度杀伤,其他评论在存储库中不会受到影响,如果写得正确,它们将作为文档工作。

答案 1 :(得分:1)

可以使用git执行此操作,但每次更新文件时都必须指定要提交的文件部分。要执行此操作,请将带有-p(补丁)标志的文件添加到{hunks',而不是整个文件:

git add

您将进入交互式提示,询问您是否要暂存文件的特定部分。回复git add work.txt -py或其中一个命令other possible options - 为您不想提交的评论部分选择n

最后,你要做的是用git做一个不寻常的事情,这个解决方案基本上是在一个不是真正设计的情况下工作的git。在生产代码库中,将提交注释,但可以在部署之前通过构建工具删除注释。

答案 2 :(得分:1)

虽然我认为令人钦佩的是人们试图提供解决方案而不是仅仅说“不可能”,但提供的解决方案主要是弊大于利。它们通常涉及在工作树中永久保留未提交/未分级的更改,这些更改最多也是不稳定的。

最接近可行解决方案的是Gonzalo Matheu建议使用清洁/涂抹过滤器。即便如此,这还远远不是一个扣篮。 (很容易编写一个干净的过滤器,可以识别和删除某些注释,但让涂抹过滤器可靠地工作......那就更难了。)

简短的回答是,这不是git提供的功能。

这并不意味着你无法创建工具来协助它,如果由于某种原因它是值得的。 (如果听起来我暗示它不值得......好吧,看起来你似乎正试图找到一个社会问题的技术解决方案 - 因为你和你的朋友不能就什么达成一致意见代码评论的杠杆是合适的。)

您当然可以提供某种文档文件供您自己使用,可以存储在工作树之外,也可以给出可以通过忽略模式(*.mydoc或其他东西)匹配的文件名。这些文件将包含足够的信息来确定每个注释的插入位置,然后您可以编写脚本将它们组合到工作文件中。如果他们以显眼的方式执行此操作,以便可以使用简单的清洁过滤器删除注释,那么您可以使用“组合器”脚本作为涂抹过滤器,作为完成Matheu先生建议方法的一种方法。