使用 git 跟踪 crontab 更改

使用 git 跟踪 crontab 更改

我想用git它来跟踪crontab.

我已经初始化了一个新的 git 存储库/var/spool/cron/crontabs/

现在的问题是,当保存 crontab 时,标题的第二行会发生变化,因为它包含时间戳。

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.ubNueW/crontab installed on Thu Aug  1 06:29:24 2019)

忽略这些不相关的更改的最简单方法是什么?

可能重复的问题没有解决我的问题的要点:如何忽略 crontab 中的前两行不相关的行。相反,它解决了我没有问过的其他一些问题,例如一些钩子。

答案1

您永远不应该手动触摸 cron 假脱机目录中的文件。对其中的文件进行更改不会正确通知 cron 守护程序,并且在重新启动守护程序之前,对计划的更新不会变为活动状态。 (某些 cron 守护进程实现可能会定期检查假脱机以查看其中是否有更新的文件,但这种行为并不通用;请检查您的cron(8)手册)。

cron(8)Ubuntu 上的手册说

请注意,不应直接访问此目录中的 crontabs -crontab应使用命令来访问和更新它们。

您应该始终使用该crontab命令加载新计划或删除现有计划。

至于在 Git 中保留 crontab,我认为这没有问题,但是,正如我上面提到的,您不应该/var/spool/cron/crontabs签出该存储库。相反,让它存在于其他地方并使用例如手动加载 crontabs

crontab my-crontab.txt

其中my-crontab.txt是使用 Git 管理的文件。

这还可以避免您的 cron 守护程序修改文件时遇到的问题。

答案2

您可以使用过滤器:

git config filter.dropSecondLine.clean "sed '2d'"

编辑/创建 .git/info/attributes 并添加:

* filter=dropSecondLine

如果您不希望过滤器作用于存储库中的所有文件,请修改 * 以匹配适当的模式或文件名。

效果是工作目录将保持不变,但存储库 blob 将不会在文件中包含第二行。因此,如果您在其他地方将其拉下来,则不会出现第二行(sed 'd2' 的结果)。如果您更改日志文件的第二行,您将能够添加它,但不能提交它,因为对 blob 的更改发生在添加时,此时它将与存储库中的文件相同。

答案3

你可以使用git blame(“显示文件的每一行的修订版和作者最后修改的内容 - 使用上次修改该行的修订版的信息来注释给定文件中的每一行。也可以从给定的修订版开始注释。”)另请参阅

特别是,使用以下-L选项:

-L <start>,<end>
<start> and <end> are optional. “-L <start>” or “-L <start>,” spans from <start> to end of file. “-L ,<end>” spans from start of file to <end>.

这样,您就可以两全其美……保留信息(也许您并不真正关心)并在需要时忽略它。

否则,对于配置来说,似乎git 过滤器可以做到。请参阅下面的链接和此处的另一个答案。

https://stackoverflow.com/questions/6557467/can-git-ignore-a-specific-line

https://stackoverflow.com/questions/16244969/how-to-tell-git-to-ignore-individual-lines-ie-gitignore-for-specific-lines-of

相关内容