/ / Erfassen der Git-Protokollausgabe unter Windows XP mit Python - Python, Windows, Git, Windows-XP

Capturing Git Log-Ausgabe unter Windows XP mit Python - Python, Windows, Git, Windows-XP

Dieses Codefragment funktioniert auf den meisten Unix-Versionen, auf die ich Zugriff habe (Linux, Solaris, AIX) sowie auf Windows 7 / Server 2008 R2 und höher, mit denen ich die Ausgabe von git log abgerufen habe:

from subprocess import Popen, PIPE
import platform

cmd = ["git", "--no-pager"]
if platform.system() == "Windows":
cmd.append("--work-tree=/path/to/working/copy")
cmd.extend(["log", "--pretty=format:"%cd %h"", "--date=short", "--", "/path/to/working/copy/filename/to/check"])

proc = Popen(cmd, stdout=PIPE, stderr=PIPE)
proc.wait()
f = proc.stdout
some_stuff = f.read()
f.close()

Bei Windows XP mit msysgit bekomme ich jedoch keinen Wert für die some_stuff - Variable, was seltsam ist, da der generierte Befehl in der Befehlszeile unter Windows ausgeführt wird.

Irgendwelche Tipps, was soll ich hier machen?

Antworten:

0 für die Antwort № 1

Nach einigen Nachforschungen habe ich Folgendes gefunden:

  1. Unter Windows empfiehlt msysgit die Verwendung des Wrapper-Skripts git.cmd anstatt direkt zu spezifizieren git.exe.
  2. msysgit ist besonders empfindlich für normalisierte Pfaddateinamen, insbesondere muss der Laufwerksbuchstabe in Großbuchstaben angegeben werden, und die Groß- / Kleinschreibung der Dateinamen muss mit dem der Dateinamen übereinstimmen GetLongPathName würde ausgeben.
  3. Die Verwendung von Vorwärts- und Rückwärtsschritten als Pfadtrennzeichen scheint immer noch zu funktionieren.

Durch das Testen der oben genannten scheint es so

  • Es ist nicht nötig, das genau anzugeben --work-tree Option mehr
  • Pfadnamen "normalisieren" durch Übergeben an os.path.normpath() funktioniert nicht, da die Groß- / Kleinschreibung nicht berücksichtigt wird und der Laufwerkbuchstabe in Kleinbuchstaben geändert wird.
  • Verwenden Sie den kurzen Pfadnamen (die Ausgabe von GetShortPathName) wird nicht funktionieren.