Wir haben gerade unsere Serverkonfigurationen in ein Git-Repository verschoben. Daher sollten in keinem der Repository-Ordner Änderungen vorgenommen werden. Ich dachte darüber nach, wie ich einen Cron-Job einrichten könnte, um nach nicht festgeschriebenen Änderungen zu suchen.
Wie kann ein Cron-Job eingerichtet werden, um nach Änderungen in einem Git-Repository zu suchen?
Wenn Sie die Ausgabe des git status
Befehls abtasten, ist dies möglicherweise der Fall . Grep- und Cron-Jobs sind nicht meine starke Seite. Hier sind einige Beispielausgaben von git status
:
Stehender Ordner mit dem Git-Repository (z. B. /path/gitrepo/
) mit geänderten Dateien :
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: apache2/sites-enabled/000-default
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# apache2/conf.d/test
no changes added to commit (use "git add" and/or "git commit -a")
Stehen im Ordner, wenn keine Änderungen vorgenommen wurden :
$ git status
# On branch master
nothing to commit (working directory clean)
Aktualisieren:
Mit dem Ursprung synchronisiert ist nicht wichtig. Es sollten keine lokalen Änderungen vorgenommen werden. Lokale Dateien, die vorhanden sein müssen, werden in die .gitignore-Datei verschoben. Zusätzlich zu den Serverkonfigurationen gibt es auch Git-Repos für Inhalte (statische Websites, Web-Apps, WordPress usw.). Keines der Repositorys sollte lokale Änderungen aufweisen.
Wir könnten Puppet auf lange Sicht verwenden, da es für die Entwicklung einer der Web-Apps verwendet wird.
quelle
Antworten:
Du solltest benutzen
git ls-files
Das
-m
Flag erhält eine Liste aller seit dem letzten Festschreiben geänderten Dateien. Wenn keine Dateien geändert werden , werden keine Daten ausgegeben . Dies macht es extrem einfach, einen Cronjob mit diesem Befehl einzurichten, da der Cronjob standardmäßig nur dann eine E-Mail sendet, wenn der Befehl etwas ausgibt .Gelöschte Dateien sind pr. Definition geändert , sodass sie auch in der geänderten Ansicht angezeigt werden . In
git ls-files -m -d
diesem Fall werden gelöschte Dateien zweimal aufgelistet.Beachten Sie jedoch , dass
git ls-files -m
nur Dateien zeigen geändert , und deshalb ignorieren untracked Dateien. Um auch nicht verfolgte Dateien-o
anzuzeigen , müssen Sie das Flag für "andere Dateien" übergeben und die Option--exclude-standard
zum Ausschließen der in.gitignore
und aufgelisteten Dateien übergeben.git/info/exclude
.Angabe des Git-Verzeichnisses und des Arbeitsbaums
Wenn der Befehl von einem Cronjob, müssen Sie den Pfad zu dem geben
.git
dir und Arbeits Baum mit--git-dir
und--work-tree
jeweils. Siehegit
Manpages als Referenz.Cronjob-Setup
Der vollständige Befehl, den Sie in Ihrem Cronjob ausführen müssen:
Ihr Crontab sollte ungefähr so aussehen:
Dies wird jede Minute eine E-Mail senden, wenn sich Änderungen ergeben. Wenn Sie ein anderes Setup wünschen, empfehlen wir Ihnen, die Beispiele auf der
cron
Wikipedia-Seite zu lesen .Warum
git-ls-files
?Der Grund, den ich
git ls-files
über empfehle,git status
ist, dassgit status
es sich um einen sogenannten "Porzellan" -Befehl handelt, währendgit ls-files
es sich um einen "Sanitär" -Befehl handelt. Kurz gesagt, Porzellanbefehle sind für die Ausgabe an den Benutzer vorgesehen, während Installationsbefehle für Skripte vorgesehen sind. Lesen Sie mehr über die Unterschiede zwischen Git-Porzellan und Git-Sanitärbefehlen.quelle
Es gibt eine Menge Komplexität, die Sie in Ihrer Frage ignorieren, daher werde ich sie in meiner Antwort ignorieren:
Beachten Sie jedoch, dass dies Ihnen nicht sagt, ob Sie synchronisiert sind oder ob die Änderungen lokal legitim sind oder wirklich viel von allem, was Sie wissen möchten, wenn es Änderungen gibt.
Sie sind wahrscheinlich besser dran, wenn Sie ein Konfigurationsmanagement-Tool wie Puppet oder Chef verwenden, um Ihre Konfigurationsdateien zu verwalten. Die Lernkurve ist anfangs möglicherweise etwas steiler, vereinfacht jedoch die Server- / Konfigurationsverwaltung erheblich.
quelle