提交前使用 pre-commit 钩子修改文件

10

我想编写一个 pre-commit 钩子,用来修改我的代码中的一行,但我甚至不知道从哪里开始。

问题是:

我有一个 KEY

public static final String APP_KEY = ""; //DELETE THE KEY BEFORE COMMIT!!!
为了避免将KEY发布到存储库中,我认为也许我们需要使用git hooks而不是手动删除key。我查看了Customizing git hooks,但我不知道如何编写hook。
在提交更改之前是否有一种方法可以删除KEY,在提交后再写入KEY?

为什么不把密钥存储在一个单独的文件中,并将该文件添加到.gitignore中呢? - qaisjp
1个回答

2
这可以通过一个内容过滤驱动程序来完成:
  • 一个“clean”脚本,它会在检查时删除键值,
  • 一个“smudge”脚本,它会在检出时添加键值。

smudge

(图片来自于Git Book的“自定义 Git 属性”)

在“Git 能否自动在空格和制表符之间切换?”中有一个示例,展示了这些过滤器是如何声明的。

注意:

正如Juan Alonso评论中所指出的:

我曾经因为类似的用例而使用 clean/smudge 脚本,但遇到了很多问题。当文件内容发生变化时,无人值守的 git add -A 命令可能会或可能不会运行过滤器(与在交互模式下调用 git 时总是有效相反)。

因此,最终我选择使用了预提交钩子


嗯,谢谢。我会尝试编写一个简单的脚本。 - Alejandro Alcalde
@algui91 是的,这个想法是通过.gitattributesfilter命令将该脚本与单个文件或文件类型相关联。 - VonC
这太无聊了。展示一个图表很好,但这只会让我们有更多的问题而不是答案。为什么不用示例代码来扩展呢? - John Riselvato
@JohnRiselvato https://dev59.com/BXE95IYBdhLWcg3watU3#2316728(在答案中提到)旨在说明声明为内容过滤驱动程序的干净/涂污脚本的示例。如需获取更多信息,请随时提出新问题(附带指向此答案的链接)。 - VonC
我在类似用例中使用的清理/涂抹脚本上遇到了很多麻烦。根据文件内容,无人值守运行git add -A时会或不会运行过滤器(与在出席模式下调用git时始终工作相反),因此最终我选择了一个预提交挂钩。 - Juan Alonso
@JuanAlonso 很好的观点。这可能确实更可靠。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接