我想用它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)
Run Code Online (Sandbox Code Playgroud)
忽略这些无关更改的最简单方法是什么?
在可能重复的问题并没有解决我的问题的重点:如何忽略来自crontab中第2行无关。相反,它解决了一些我没有问过的其他问题,例如一些钩子。
你永远不应该手动接触 cron spool 目录中的文件。对那里的文件进行更改不会正确通知 cron 守护程序,并且在守护程序重新启动之前对计划的更新不会变为活动状态。(某些 cron 守护程序实现可能会定期检查假脱机以查看其中是否有更新的文件,但这种行为并不普遍;请查看您的cron(8)
手册)。
cron(8)
Ubuntu 上的手册说
请注意,不应直接访问此目录中的 crontabs -
crontab
应使用该命令来访问和更新它们。
您应该始终使用该crontab
命令加载新计划或删除现有计划。
至于在 Git 中保留 crontabs,我认为这没有问题,但是,正如我上面提到的,您不应该/var/spool/cron/crontabs
检查该存储库。相反,让它存在于其他地方并手动加载 crontabs,例如
crontab my-crontab.txt
Run Code Online (Sandbox Code Playgroud)
my-crontab.txt
用 Git 管理的文件在哪里。
这还可以避免您的 cron 守护程序修改文件时遇到的问题。
您可以使用过滤器:
git config filter.dropSecondLine.clean "sed '2d'"
Run Code Online (Sandbox Code Playgroud)
编辑/创建 .git/info/attributes 并添加:
* filter=dropSecondLine
Run Code Online (Sandbox Code Playgroud)
如果您不希望过滤器作用于存储库中的所有文件,请修改 * 以匹配适当的模式或文件名。
效果将是工作目录将保持不变,但 repo blob 将不会在文件中包含第二行。所以如果你把它拉到别处,第二行就不会出现(sed 'd2' 的结果)。如果您更改日志文件的第二行,您将能够添加它,但不能提交它,因为对 blob 的更改发生在添加时,此时它将与存储库中的文件相同。