【问题标题】:Capturing git log output on Windows XP with Python使用 Python 在 Windows XP 上捕获 git 日志输出
【发布时间】:2014-04-18 02:34:19
【问题描述】:

这个 sn-p 代码适用于我可以访问的大多数 Unix(Linux、Solaris、AIX)以及 Windows 7/Server 2008 R2 以及我用来获取 git log 输出的更高版本:

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()

但是,在使用 msysgit 的 Windows XP 上,我没有得到 some_stuff 变量的任何值,这很奇怪,因为在 Windows 上运行生成的命令可以在命令行上运行。

关于我应该在这里做什么的任何提示?

【问题讨论】:

  • 这可能是 XP 上的 msysgit 版本的问题,你用 cygwin 的 git 试过了吗?
  • 我倾向于尽可能避免使用 Cygwin,因为这需要对我正在维护的构建系统进行过多的重组(MSBuild + GNU Make + 批处理文件的奇怪组合,现在在混合)。
  • 通过在 Windows 上不指定 --work-tree 选项、在 Windows 上使用 git.cmd 而不是 git.exe 以及确保要检查的文件名具有其驱动器号来解决此问题大写。

标签: python windows git windows-xp


【解决方案1】:

在做了一些研究之后,这是我的发现:

  1. 在 Windows 上,msysgit 建议使用包装脚本 git.cmd 而不是直接指定 git.exe
  2. msysgit 对规范化的路径文件名特别敏感,特别是驱动器号必须大写,并且文件名的大小写必须与GetLongPathName 的输出方式相匹配。
  3. 使用正斜杠和反斜杠作为路径分隔符似乎仍然有效。

通过上述测试,看来:

  • 真的不需要再指定--work-tree 选项了
  • 将路径名传递给os.path.normpath() 将不起作用,因为它将假定不区分大小写并将驱动器号更改为小写。
  • 使用短路径名(GetShortPathName 的输出)将不起作用。

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 2019-10-26
    • 2022-12-01
    • 2012-04-21
    • 1970-01-01
    • 2020-05-20
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多