PHP Git commit anzeigen

Cr41s3

Ensign
Registriert
Dez. 2012
Beiträge
246
Hallo,

Ich wollte ganz gerne in meinem Script die letzte Version bzw. den letzten Hash des Commits in meinem PHP Script anzeigen lassen.

Gefunden habe ich dann folgendes:
https://stackoverflow.com/questions/9087883/reading-a-git-commit-message-from-php

Der Befehl
Code:
git rev-parse --verify HEAD
funktioniert auch super über die Git Bash, wenn ich in dem Verzeichnis bin.
Die Datei liegt auch in dem selben Verzeichnis, in dem auch git die Dateien speichern soll aus der repo.

Habe nun folgenden Code ausprobiert:
PHP:
<?php
			exec('git rev-parse --verify HEAD', $output);
			$hash = $output[0];
			exec("git show $hash", $output);
			var_dump ($output);
		?>

		<footer>
		Version <?php echo `git rev-parse --verify HEAD`; ?>
		</footer>

Nur leider habe ich nur "NULL" zurück bekommen.

Ich vermute, dass das Problem das OS(Windows Server 2012) ist, da die Git Bash nur per MinGw32 läuft.

Hoffe mir kann jemand helfen.

MfG-
 
git muss in %path% erreichbar sein, sonst findet er es nicht. Weiterhin musst du im Projektverzeichnis befinden. Ein
Code:
cd "%projektpfad%" & git ...
sollte funktionieren, insofern git.exe in %path% eingetragen ist. Falls nicht nachholen oder den gesamten Pfad zur git.exe hinterlegen.
 
%path% war nicht richtig gesetzt, habe ich aber nun.

Habe den cmd Befehl mit und ohne einfach in der cmd mal ausgeführt und das gewünschte Ergebnis bekommen, aber in PHP bekomme ich es noch nicht.
 
Was bekommst du als Output? Nutz übrigens ggf. mal Backticks als Operator, ist einfacher.
Code:
$out = `cd "$pfad" & git show $hash`;
Hast du vorher auch in den Projektpfad gewechselt? Sonst nimmt er nämlich das Arbeitsverzeichnis.
 
Das Verzeichnis ist richtig.
Bekomme mit var_dump "NULL" wieder und mit echo und print_r bekomme ich gar nichts.
 
Füg mal ein 2>&1 ans Ende, damit reichst du den STDERR Stream an den STDOUT Stream weiter.
Code:
var_dump( `git show $hash 2>&1` );
Kommt da ein Fehler? Hast du ausreichend Rechte im Dateisystem? Gibts Beschränkungen PHP-seitig? exec() gibt übrigens immer die letzte Zeile des Outputs zurück, also nimm bitte Backticks bzw. das Äquivalent shell_exec().
 
"NULL"

Aktueller Code:
PHP:
$out = `cd "C:/xxxxx" && git rev-parse --verify HEAD`;
shell_exec($out, $output);
$hash = $output[0];
shell_exec("git show $hash", $output);
echo $hash;
var_dump( `git show $hash 2>&1` );
Ergänzung ()

Auch wenn ich nur "echo AAA" oder so wiedergeben will, kommt nur "NULL" zurück.
 
Mit Backticks musst du kein shell_exec mehr fahren.

Entweder
Code:
$out = `cd "C:/xxxxx" && git rev-parse --verify HEAD`;
oder
Code:
$out = shell_exec('cd "C:/xxxxx" && git rev-parse --verify HEAD');

Gut anderer Weg... Was gibt dir
Code:
var_dump( `cd` );
aus?
 
var_dump( `cd` ); -> NULL
Ich vermute, dass shell_exec blockiert ist.
Ergänzung ()

Habe nun folgenden Code:
PHP:
<?php
		$cmd = "cd C:\Users\Administrator\Desktop\Server\Web\kreisdev\public_html\ && git rev-parse --verify HEAD";
		$output = shell_exec($cmd);
		var_dump($output);
		shell_exec("git show $output");
		?>
Geht aber auch nicht, immernoch "NULL"
 
Zuletzt bearbeitet:
Pack mal ein
Code:
error_reporting( E_ALL );
direkt nach dem PHP Open Tag hin.
Code:
<?php

error_reporting( E_ALL );

var_dump( `cd` );

edit: Alternativ in phpinfo() mal nach disable_functions schauen bzw. direkt in der verwendeten php.ini.
 
Zuletzt bearbeitet:
Habe es nun gefixt
PHP:
$ver = exec("git log --max-count=1 --pretty=oneline --format=:%h 2>&1");
Hatte ursprünglich im ersten exec kein "2>&1"

Vielen Dank für deine Hilfe.
MfG-
 
Zurück
Oben