web-dev-qa-db-ja.com

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つの無関係な行を無視する方法。代わりに、フックなど、私が尋ねていない他のいくつかの質問に対処します。

7
Martin Vegter

Cronスプールディレクトリ内のファイルを手動で変更しないでください。そこでファイルに変更を加えても、cronデーモンに適切に通知されず、スケジュールの更新はデーモンが再起動されるまでアクティブになりません。 (一部のcronデーモン実装では、定期的にスプールをチェックして、そこに更新されたファイルがあるかどうかを確認することがありますが、この動作は一般的ではありません。cron(8)マニュアルを確認してください)。

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

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

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

Gitでcrontabを維持することに関しては、これで問題はありませんが、前述のように、/var/spool/cron/crontabsそのリポジトリのチェックアウト。代わりに、それを他の場所に置き、手動でcrontabをロードします。

crontab my-crontab.txt

どこ my-crontab.txtはGitで管理されているファイルです。

これにより、cronデーモンによってファイルが変更されるという問題が回避されます。

9
Kusalananda

あなたはフィルターを使うことができます:

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

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

* filter=dropSecondLine

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

その結果、作業ディレクトリは同じままになりますが、リポBLOBにはファイルの2行目がありません。したがって、別の場所にプルダウンすると、2行目は表示されません(sed 'd2'の結果)。また、ログファイルの2行目を変更すると、追加することはできますが、コミットすることはできません。BLOBへの変更は追加時に発生します。その時点で、リポジトリ内のファイルと同じファイルになります。

4
Amos

git blame (「ファイルの各行を最後に変更したリビジョンと作成者を表示-指定されたファイルの各行に、行を最後に変更したリビジョンの情報で注釈を付けます。オプションで、指定されたリビジョンから注釈を開始します。」)参照また this

特に、-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 filter で実行できるようです。以下のリンクとここで別の答えを参照してください。

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

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