使用 git pre-commit 挂钩排除 non-meaningful 更改
Using a git pre-commit hook to exclude non-meaningful changes
我有一大堆 collection 文件要保存在 git 中。这些文件中的每一个都有一个可以自动更新的 header,其中包含 time-stamps 和有关文件上次导出时间的其他详细信息(它们是从特定工具导出的代码文件)
由于对 header 的更改本身并不是特别有意义,我想使用 git pre-commit 挂钩来排除没有变化的文件代码的实际 body。对我来说执行比较并丢弃只有前 n 行有变化的文件的推荐方法是什么。
更好的方法(比尝试使用钩子)是:
- 如果可以重新生成,则不跟踪这些文件
- 或跟踪它们,但如果检测到的更改不够重要,则使用内容清理过滤器 driver 来恢复它们的内容。
对于第二个选项,您需要一个能够检测 git 差异是否包含 header 中的其他更改的脚本。如果不是,脚本将执行 git 检出 -- 一个文件,以便将其内容恢复到 HEAD(丢弃任何本地更改)。
通过该脚本恢复文件是通过 content filter driver, using a .gitattributes
declaration 自动完成的。
(图片来自"Customizing Git - Git Attributes" from "Pro Git book"))
一旦您在本地配置中声明了内容文件管理器 driver,它将在 git commit
自动为您检查您的文件。
请参阅“Best practice - Git + Build automation - Keeping configs separate”中的完整示例。
我有一大堆 collection 文件要保存在 git 中。这些文件中的每一个都有一个可以自动更新的 header,其中包含 time-stamps 和有关文件上次导出时间的其他详细信息(它们是从特定工具导出的代码文件)
由于对 header 的更改本身并不是特别有意义,我想使用 git pre-commit 挂钩来排除没有变化的文件代码的实际 body。对我来说执行比较并丢弃只有前 n 行有变化的文件的推荐方法是什么。
更好的方法(比尝试使用钩子)是:
- 如果可以重新生成,则不跟踪这些文件
- 或跟踪它们,但如果检测到的更改不够重要,则使用内容清理过滤器 driver 来恢复它们的内容。
对于第二个选项,您需要一个能够检测 git 差异是否包含 header 中的其他更改的脚本。如果不是,脚本将执行 git 检出 -- 一个文件,以便将其内容恢复到 HEAD(丢弃任何本地更改)。
通过该脚本恢复文件是通过 content filter driver, using a .gitattributes
declaration 自动完成的。
(图片来自"Customizing Git - Git Attributes" from "Pro Git book"))
一旦您在本地配置中声明了内容文件管理器 driver,它将在 git commit
自动为您检查您的文件。
请参阅“Best practice - Git + Build automation - Keeping configs separate”中的完整示例。