Gitを使用してcrontabの変更を追跡する

Gitを使用してcrontabの変更を追跡する

git追跡用に使いたいですcrontab

新しいgitリポジトリを初期化しました/var/spool/cron/crontabs/

これで問題は、crontabを保存すると、ヘッダーの2行目にタイムスタンプが含まれているために変更されることです。

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

これらの無関係な変更を無視する最も簡単な方法は何ですか?

これ重複する質問がある可能性があります私の質問のポイントを解決していません:crontabで関係のない最初の2行を無視する方法。代わりに、いくつかのフックなど、私が尋ねていない他の問題を解決します。

答え1

cronスプールディレクトリのファイルに手動で触れないでください。その中のファイルの変更はcronデーモンに正しく通知されず、スケジュールの更新はデーモンが再起動されるまで有効になりません。 (一部のcronデーモンの実装では、定期的にスプールをチェックして最新のファイルがあるかどうかを確認できますが、この動作は一般的ではありません。cron(8)ドキュメントを確認してください。)

cron(8)Ubuntuのマニュアルによると

このディレクトリのcrontabには直接アクセスしないでください。crontabアクセスして更新するには、コマンドを使用する必要があります。

crontab新しい計画をロードしたり既存の計画を削除したりするには、常にこのコマンドを使用する必要があります。

Gitでcrontabを維持するのに問題はないと思います。ただし、上記のように/var/spool/cron/crontabsリポジトリをチェックアウトしないでください。代わりに、他の場所に存在させ、次の方法を使用して手動でcrontabをロードします。

crontab my-crontab.txt

その中にはmy-crontab.txtGitを使って管理するファイルもあります。

これにより、cronデーモンがファイルを変更するときに発生する問題も回避できます。

答え2

フィルタを使用できます。

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

.git/info/attributesを編集/作成し、以下を追加します。

* filter=dropSecondLine

リポジトリ内のすべてのファイルにフィルタが適用されないようにするには、*を変更して適切なパターンまたはファイル名と一致させます。

その結果、作業ディレクトリは同じままですが、リポジトリBlobにはファイルの2行目はありません。したがって、他の場所から取り出すと、2行目(sed 'd2'の結果)は表示されません。ログファイルの2行目を変更すると、そのエントリを追加できますが、コミットすることはできません。これは、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>.

これにより、両方の利点を得ることができます。情報を保持し(あまり気にしない場合があります)、必要に応じて無視してください。

そうでなければ、設定のために子フィルタできる以下のリンクとここで他の回答をご覧ください。

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-特異的-lines-of

関連情報