Github Push von PHP-Webserver mit Shell_exec () - Backticks

345
Vince

Ich habe ein Github-Repository, das ich über Atom.io mit einem Client verwende, um alle Änderungen für ihre Website synchron zu halten. Das GitHub-Repo enthält einen Webhook, der alle unsere Änderungen automatisch auf die dortige Live-Website überträgt. Ich möchte jedoch PHP verwenden, um Änderungen, die direkt auf dem Webserver vorgenommen wurden, wieder in den Repo zu verschieben. Dies bedeutet: Log-Datei-Backups, Image-Uploads und schnelle Änderungen, die direkt auf dem Server vorgenommen wurden.

Wenn eine dieser Änderungen auf dem Server auftritt, erzählen mir meine Skripte davon, dass es kein Problem gibt.

git status  # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # new file: somefolder/somenewfile.whatever # 

Wenn ich dies von der Kommandozeile aus mache, synchronisiert sich alles perfekt:

git add --all git commit -m "from server" git push -u origin master 

Aber wenn ich versuche, dies über die PHP shell_exec () Backticks zu ` `tun, passiert nichts. Ich habe sogar versucht, Pausen hinzuzufügen.

$output = `git add --all`; echo $output; sleep(1);  $output = `git commit -m "from server"`; echo $output; sleep(3);  $output = `git push -u origin master`; echo $output; sleep(3); 

Weiß jemand, was ich hier falsch mache? Soll ich diese Aufrufe in ein Bash-Skript stellen und dann über eine PHP-Vorlage aufrufen?

1
In Ihrer ersten "Ausgabe" -Zeile fehlt nach dem Befehl ein schließender Backtick. Ist das ein Tippfehler beim Kopieren hier oder fehlt es tatsächlich in Ihrem Skript? Mokubai vor 5 Jahren 1
Ist das aktuelle Arbeitsverzeichnis des PHP-Skripts korrekt? Attie vor 5 Jahren 0
Es ist auch keine gute Idee, große / binäre Dateien (Log-Dateien und Bilder) in einem git-Repository von beliebigem Umfang zu speichern ... vielleicht schauen Sie in Git LFS nach. Attie vor 5 Jahren 0
@Mokubai das war nur ein Tippfehler, ich habe mein Beispiel oben aktualisiert. Vince vor 5 Jahren 0
@Attie das PHP-Skript funktioniert auf alle anderen Arten korrekt, selbst einfache Git-Aufrufe wie Git Status funktionieren einwandfrei. Das Problem ist, wenn git commit -m "vom Server" aufgerufen wird, sehe ich einfach keine Ausgabe, um festzustellen, ob es überhaupt funktioniert. Vince vor 5 Jahren 0
Was ist mit dem Returncode / Exit-Status? (wenn Sie es bekommen können ...) Attie vor 5 Jahren 0
@Attie Nachdem der Push-Aufruf ausgeführt wurde, bekomme ich immer eine Antwort: "Zweigmaster eingerichtet, um Remote-Zweigmaster vom Ursprung aus zu verfolgen." Wenn ich alle Schritte von Hand auf der Kommandozeile erledige, funktioniert alles einwandfrei, aber ich versuche es mit der PHP-Vorlage, es wird nie wirklich gepusht, obwohl ich in beiden Fällen dieselbe Antwort bekomme. Vince vor 5 Jahren 0

0 Antworten auf die Frage