我想用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