Ich möchte verwenden git
, um Änderungen in zu verfolgen crontab
.
Ich habe ein neues Git-Repository in initialisiert /var/spool/cron/crontabs/
Das Problem ist nun, dass beim Speichern von crontab die zweite Zeile des Headers geändert wird, da sie einen Zeitstempel enthält.
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.ubNueW/crontab installed on Thu Aug 1 06:29:24 2019)
Was wäre der einfachste Weg, diese irrelevanten Änderungen zu ignorieren?
Die mögliche doppelte Frage spricht nicht den Hauptpunkt meiner Frage an: Wie man die ersten 2 irrelevanten Zeilen von crontab ignoriert. Stattdessen werden einige andere Fragen behandelt, die ich nicht gestellt habe, z. B. einige Haken.
sed -i "s/^# (.*installed on.*)/d"
die Datei ausführen, bevor Sie die Änderungen in das Repository übernehmen.Antworten:
Sie sollten die Dateien im Cron-Spool-Verzeichnis niemals manuell berühren. Wenn Sie dort Änderungen an den Dateien vornehmen, wird der Cron-Dämon nicht ordnungsgemäß benachrichtigt, und Aktualisierungen von Zeitplänen werden erst nach einem Neustart des Dämons aktiv. (Einige Cron-Daemon-Implementierungen überprüfen möglicherweise regelmäßig den Spool, um festzustellen, ob dort aktualisierte Dateien vorhanden sind. Dieses Verhalten ist jedoch nicht universell. Überprüfen Sie Ihr
cron(8)
Handbuch.)Das
cron(8)
Handbuch unter Ubuntu sagtSie sollten den
crontab
Befehl immer verwenden , um neue Zeitpläne zu laden oder vorhandene zu löschen.Was das Beibehalten von Crontabs in Git betrifft, sehe ich kein Problem damit, aber wie oben erwähnt, sollten Sie
/var/spool/cron/crontabs
dieses Repository nicht auschecken . Lassen Sie es stattdessen woanders leben und laden Sie Crontabs manuell mit zWo
my-crontab.txt
ist eine Datei mit Git verwaltet.Dies würde außerdem das Problem vermeiden, dass die Dateien von Ihrem Cron-Daemon geändert werden.
quelle
Sie könnten einen Filter verwenden:
Bearbeiten / erstellen Sie .git / info / Attribute und fügen Sie hinzu:
Wenn der Filter nicht auf alle Dateien im Repo angewendet werden soll, ändern Sie das * so, dass es einem geeigneten Muster oder Dateinamen entspricht.
Der Effekt ist, dass das Arbeitsverzeichnis gleich bleibt, aber die Repo-Blobs nicht die zweite Zeile in den Dateien haben. Wenn Sie es also an einer anderen Stelle nach unten ziehen, wird die zweite Zeile nicht angezeigt (das Ergebnis des sed 'd2'). Und wenn Sie die zweite Zeile Ihrer Protokolldatei ändern, können Sie sie hinzufügen, aber nicht festschreiben, da die Änderung am Blob beim Hinzufügen erfolgt. An diesem Punkt handelt es sich um dieselbe Datei wie die im Repo.
quelle
sed
Befehl einen regulären Ausdruck verwendet, um einem kommentierten Zeitstempel (ala larsks 'Kommentar/^# (.*installed on.*)
) statt blind zu entsprechen Zeile 2 löschen?Sie können Folgendes verwenden
git blame
: "Zeigen Sie an, welche Revision und welcher Autor jede Zeile einer Datei zuletzt geändert haben - Kommentiert jede Zeile in der angegebenen Datei mit Informationen aus der Revision, die die Zeile zuletzt geändert hat. Optional können Sie ab der angegebenen Revision mit Anmerkungen beginnen.") Siehe auch dies .Insbesondere mit der
-L
Option:Auf diese Weise können Sie das Beste aus beiden Welten genießen ... die Informationen behalten (die Ihnen vielleicht nicht wirklich wichtig sind) und sie ignorieren, wann immer Sie möchten.
Ansonsten scheint es für die Konfiguration so, als ob der Git-Filter dies tun kann. Siehe Links unten und eine andere Antwort hier.
/programming/6557467/can-git-ignore-a-specific-line
/programming/16244969/how-to-tell-git-to-ignore-individual-lines-ie-gitignore-for-specific-lines-of
quelle