Git-Auto-Commit erstellen

Lesezeit: 6 Minuten

Ich möchte Git verwenden, um alle Änderungen an einer Datei aufzuzeichnen.

Gibt es eine Möglichkeit, git ‘commit’ so einzuschalten, dass es jedes Mal automatisch ausgeführt wird, wenn eine Datei aktualisiert wird – also gibt es für jede Änderung an einer Datei ein neues Commit?

Idealerweise möchte ich, dass meine Benutzer nicht einmal wissen, dass Git hinter den Kulissen läuft. Ein Benutzer könnte dann möglicherweise Änderungen an einer Datei “rückgängig machen” – und dies könnte erreicht werden, indem eine frühere Version aus git gezogen wird.

  • Es wäre einfacher, ein Versionsdateisystem zu verwenden: en.wikipedia.org/wiki/Versioning_file_system

    – William Pursel

    16. Oktober 2012 um 17:42 Uhr

  • SparkleShare war diesbezüglich ziemlich beeindruckend.

    – Theode

    23. März 2017 um 16:41 Uhr

  • SparkleShare sieht nach einer großartigen Option aus, zerstört jedoch alle .git-Ordner im Haupt-Git

    – unterzeichnen

    28. August 2018 um 12:05 Uhr

  • Sie können verwenden github.com/jw0k/gwatch. Es funktioniert unter Windows und Linux.

    – rubix_addict

    24. November 2019 um 12:07 Uhr

  • @rubix_addict Warum hast du das nicht als Antwort gepostet?

    – Tobias Kienzler

    15. Dezember 2019 um 19:16 Uhr

Git Auto Commit erstellen
JesperE

Unter Linux könnten Sie verwenden warten jedes Mal automatisch einen Befehl auszuführen, wenn sich der Inhalt einer Datei ändert.

Bearbeiten: Der folgende Befehl schreibt file.txt, sobald es gespeichert ist:

inotifywait -q -m -e CLOSE_WRITE --format="git commit -m 'autocommit on change' %w" file.txt | sh

  • Wie können Sie dies für einen ganzen Ordner tun (nicht nur für eine einzelne Datei?)

    – Anderson Green

    28. Oktober 2012 um 23:48 Uhr

  • Verwenden Sie die -r Flagge zu inotifywaitaber beachten Sie, dass der Kernel eine Begrenzung für die Anzahl der Inotifywait-Überwachungen hat, die er einrichten kann. man inotifywait werde dir mehr sagen.

    – JesperE

    29. Oktober 2012 um 9:22 Uhr

  • Gibt es eine Option in Windows ..?

    – Chandan Pasunoori

    9. Dezember 2013 um 12:29 Uhr

Der frühere warten Antwort ist großartig, aber es ist keine vollständige Lösung. Wie geschrieben, ist es ein One-Shot-Commit für eine einmalige Änderung in einer Datei. Es funktioniert nicht für den häufigen Fall, dass beim Bearbeiten einer Datei ein neuer Inode mit dem ursprünglichen Namen erstellt wird. inotifywait -m anscheinend folgt Dateien nach Inode, nicht nach Namen. Nachdem sich die Datei geändert hat, wird sie auch nicht bereitgestellt Git Commit ohne git hinzufügen oder git commit -a. Nach einigen Anpassungen verwende ich unter Debian Folgendes, um alle Änderungen an meiner Kalenderdatei zu verfolgen:

/etc/rc.local:


su -c /home/<username>/bin/gitwait -l <username>

/home//bin/gitwait:


#!/bin/bash
#
# gitwait - watch file and git commit all changes as they happen
#

while true; do

  inotifywait -qq -e CLOSE_WRITE ~/.calendar/calendar

  cd ~/.calendar; git commit -a -m 'autocommit on change'

done

Dies könnte verallgemeinert werden, um auf eine Liste von Dateien und/oder Verzeichnissen und das entsprechende zu warten warten Prozesse und starten Sie jeden neu warten wenn eine Datei geändert wird.

  • Lester, könnten Sie bitte erläutern, wie Sie dies auf ein Verzeichnis verallgemeinern können?

    – Diego

    8. September 2010 um 1:00 Uhr

1647286691 777 Git Auto Commit erstellen
Newik Rehnel

Die vorherigen Antworten empfehlen warten denn dieser Job hat mich in die richtige Richtung gelenkt, als ich selbst dieses Problem hatte, also habe ich ein kleines Drehbuch geschrieben. Zuerst konnte dies nur ganze Ordner rekursiv überwachen (das Gegenteil von Lester Bucks Beispiel), aber dann wollte ich auch eine Datei woanders sehen, also habe ich sie erweitert.

Das Ergebnis ist ein Skript derzeit angerufen gitwatchda es genau das tut: Es überwacht eine Datei oder einen Ordner auf Änderungen (mithilfe von inotifywait) und überträgt sie in ein Git-Repository.

Sie finden das Skript, weitere Informationen und Anweisungen auf github: https://github.com/nevik/gitwatch

  • nützliches kleines Skript dort. Ich werde es mir notieren.

    – iwein

    21. Oktober 2012 um 19:26 Uhr

  • interessant könnte für Magento-Sites nützlich sein. Ich teste es, aber ich kann es anscheinend nicht dazu bringen, automatisch zu pushen

    – NoSixties

    18. November 2016 um 12:17 Uhr

git-wip ist eine großartige Lösung, die für mich gut funktioniert. „WIP“ steht für „work in progress“. Jedes Mal, wenn Sie „git wip“ ausführen, werden die Änderungen in einen separaten Zweig übertragen. Es kann auf der Befehlszeile ausgeführt werden, aber es gibt Erweiterungen für vim und emacs, um git-wip jedes Mal automatisch auszuführen, wenn eine Datei geschrieben wird.

1647286692 31 Git Auto Commit erstellen
Rotzarf

Ich wollte dies in Windows tun und fand, dass der beste Weg war, es zu verwenden Verzeichnismonitor um nach Änderungen zu suchen, dann wenn es eine Änderung entdeckt hat, lass es laufen:

Programm: cmd.exe

Parameter: /CC:\pathToBatchFile.bat

Diese Batchdatei enthielt:

c:
cd c:\gitRepoDirectory\
(if exist "%PROGRAMFILES(X86)%" (
"%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git commit -am AutoCommitMessage"
) else (
"%PROGRAMFILES%\git\bin\sh.exe" --login -i -c "git commit -am AutoCommitMessage"
))

Ich habe auch versucht, einen anderen Befehl darin zu haben, um Dateien hinzuzufügen ("%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git add *.*"), aber ich glaube nicht, dass ich das richtig zum Laufen gebracht habe.

Ich habe auch einen Post-Commit-Hook erstellt, der Folgendes enthält:

#!/bin/sh
git.exe pull -v --progress  "origin"
git.exe push    --progress  "origin" master:master
curl.exe -s https://webserverdomain.com/updateFromGitHook.x?r=repoName

(Wenn es irgendwelche Konflikte gab, würde es den Pull und den Push abbrechen, aber es gab keinen eindeutigen Weg, um festzustellen, ob das passiert war – am Ende haben wir die ganze Idee wegen dieses einen Fehlers aufgegeben.)

Dieser Curl-Befehl teilte meinem Server mit, dass er den Code abrufen musste. Alles, was benötigt wurde, um es in PHP zu handhaben, war:

<?
$r = $_GET['r'];
if (!empty($c)) {
    //use system instead of exec if you want the output to go back to the git client
    exec("cd /path/to/repo/parent/$r; sudo git reset --hard HEAD; sudo git pull;");
    echo "\n\nServer: Updated\n\n";
} else {
    echo "\n\nServer: UPDATE FAILED\n\n";
}
?>

Das einzige Problem dabei war, dass es vom Root-Benutzer anstelle des Apache-Benutzers ausgeführt werden musste, also musste ich auch eine Datei erstellen /etc/sudoers.d/ enthält:

www-data ALL = NOPASSWD: /usr/bin/git

Für mich hat das meiner Meinung nach ziemlich solide funktioniert. Directory Monitor kann so konfiguriert werden, dass es beim Start ausgeführt und minimiert gestartet wird, und es kann mehrere verschiedene Ordner überwachen

  • Auch unter Windows kann ich Git nicht unter LocalSystem ausführen. Wenn Sie also Ihren eigenen Überwachungsdienst erstellen, müssen Sie ihn unter einem Benutzer ausführen, der Git tatsächlich ausführen kann. Möglicherweise fehlen mir nur einige Einstellungen / Konfigurationen, aber es ist wahrscheinlich schöner, trotzdem ein neues Git-Commit-Konto einzurichten

    – Welkaholismus

    19. November 2019 um 9:47 Uhr

1647286692 34 Git Auto Commit erstellen
rollen

Inotify klingt wirklich nach dem richtigen Tool für den Job.

Es gibt ein Tool namens incron das könnte genau das sein, was Sie suchen. Sie können Dateien oder Ordner (und Ereignistypen wie „Ändern“, „Erstellen“, „Verknüpfung aufheben“) in etwas wie einem Crontab und einem Befehl angeben, der ausgeführt werden soll, wenn ein solches Ereignis eintritt.

Im Gegensatz zu inotifywait (was das Analogon zu cron sleep 10;do stuff), wird jedes Ereignis erfasst, nicht nur das erste.

Ich habe es selbst nicht verwendet, aber aus der Dokumentation sieht es nicht zu komplex aus, es einzurichten.

  • Auch unter Windows kann ich Git nicht unter LocalSystem ausführen. Wenn Sie also Ihren eigenen Überwachungsdienst erstellen, müssen Sie ihn unter einem Benutzer ausführen, der Git tatsächlich ausführen kann. Möglicherweise fehlen mir nur einige Einstellungen / Konfigurationen, aber es ist wahrscheinlich schöner, trotzdem ein neues Git-Commit-Konto einzurichten

    – Welkaholismus

    19. November 2019 um 9:47 Uhr

1647286693 946 Git Auto Commit erstellen
Marek Grzenkowicz

#!/bin/bash
git commit -a -m "autoupdate `date +%F-%T`"
git push

Autopush mit aktuellem Datum und Uhrzeit.

1002910cookie-checkGit-Auto-Commit erstellen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy