【问题标题】:Programmatically (not manually) finding the path where Git is installed on a Windows system以编程方式(非手动)查找 Git 在 Windows 系统上的安装路径
【发布时间】:2012-01-20 09:33:05
【问题描述】:

我想写一个小的构建助手工具,它可以读取当前 Git 工作目录的一些属性,比如最后一次提交的哈希,是否有修改过的文件等等。我发现使用已安装的 Git 二进制文件比读取 .git 目录及其未知格式的压缩文件更容易。但我的工具必须尽可能便携。它适用于 .NET 应用程序,因此唯一的要求应该是 .NET 2.0 或更高版本。

现在如何找到安装 Git 的路径?如果用户刚刚单击了 Git 安装程序,则会使用默认设置。但它可能会有所不同。当我看到 git/bin 中的所有程序文件时,我真的不希望它出现在我的 %PATH% 中(其他工具,如 TortoiseGit 似乎也不需要)。我在注册表中没有找到任何路径线索。

我可以使用什么算法来查找 Git,而不是完整的文件系统扫描? (我是否已经说过它需要快速?)

【问题讨论】:

    标签: windows git


    【解决方案1】:

    如果你在(或者如果你可以打开)你的 git bash shell,你可以使用pwd -W

    $ cd / && pwd -W
    C:/Program Files (x86)/Git
    

    (我知道,这可能不是你想要的,而且很初级,但我花了一些时间才找到它,也许它对其他人有用)。

    【讨论】:

    • @user3105700 嗯,不,这适用于 Windows(请参阅我的结果行)。我正在使用 Git for Windows 附带的 MinGW bash。
    • 谢谢!发现SourceTree在C:\Users\<user>\AppData\Local\Atlassian\SourceTree\git_local\bin安装了git。只需将其放入PATHcmd 现在就可以识别git。再次感谢您!
    【解决方案2】:

    我正在使用以下批处理文件来查找 Git for Windows 的安装位置:

    @echo off
    
    setlocal enabledelayedexpansion
    
    rem Read the Git for Windows installation path from the Registry.
    for %%k in (HKCU HKLM) do (
        for %%w in (\ \Wow6432Node\) do (
            for /f "skip=2 delims=: tokens=1*" %%a in ('reg query "%%k\SOFTWARE%%wMicrosoft\Windows\CurrentVersion\Uninstall\Git_is1" /v InstallLocation 2^> nul') do (
                for /f "tokens=3" %%z in ("%%a") do (
                    set GIT=%%z:%%b
                    echo Found Git at "!GIT!".
                    goto FOUND
                )
            )
        )
    )
    
    goto NOT_FOUND
    
    :FOUND
    
    rem Make sure Bash is in PATH (for running scripts).
    set PATH=%GIT%bin;%PATH%
    
    rem Do something with Git ...
    
    :NOT_FOUND
    

    我应该直接在 .NET 中做类似的事情。请记住,如果您使用的是 64 位 Windows,则必须明确检查注册表的 32 位分支。

    编辑: 适用于 Windows 2.6.1 的 Git 现在将 additionally writes CurrentVersionInstallPathLibexecPath 值添加到 HKEY_LOCAL_MACHINE\Software\GitForWindows 键。

    【讨论】:

    • 同时,我是这样实现的:搜索 %ProgramFiles%\Git*\bin\git.exe。如果它不存在,请在 %ProgramFiles(x86)% 中重试。你怎么看?
    • 如果不需要太长时间应该没问题。我猜完整的步骤应该是: 1. 检查 git.exe 是否在 PATH 中。 2. 否则,检查注册表的“InstallLocation”键。 3. 否则,检查 %ProgramFiles% 下的 Git\bin\git.exe(或 64 位 Windows 下的 %ProgramFiles (x86)%)。
    • 不应该在上面注释设置的 PATH=%GIT%bin;%PATH% 行以防止意外结果运行吗?
    • @law 没错,我已经发布了一个改进版本,我一直在使用它,它修复了这个问题,并且还查看了 HKCU。
    • 另一个可能安装 git 的文件夹是 %userprofile%\AppData\Local\Programs\Git
    【解决方案3】:

    如果您使用的是 Windows 8 及更高版本,请按照以下步骤操作。

    1. 转到您的开始屏幕并搜索 git.exe
    2. 在搜索结果中右键单击 Git Gui/Git Bash 图标并选择打开文件位置
    3. 您将被带到快捷方式所在的文件夹。右键单击快捷方式并选择属性
    4. 文件位置可以在目标字段中找到

    对我来说是“C:\Users\\AppData\Local\Programs\Git\cmd\git-gui.exe”

    希望对你有帮助

    【讨论】:

    • 对于某些人来说,我正在寻找一种算法来(有效地)找到该文件,而不是用户指令,这似乎并不明显。
    • 这个问题特别提到程序化,而不是手动,所以-1
    【解决方案4】:

    您也可以打开 Git Bash 并输入 where git。它将返回您机器上安装 Git 的路径。

    【讨论】:

    • 它还是非常程序化的,因为您可以将此命令集成到脚本中。
    • 仅供记录 where 不是 Git Bash 命令,而是 Windows 命令。您可以使用它来查找任何程序。
    【解决方案5】:

    git --man-path 将您带到 [基本 git 安装目录]\mingw64\share\man。 git.exe 位于 [base git 安装目录]\cmd。

    【讨论】:

      【解决方案6】:

      在注册表中查找:HKEY_CURRENT_USER\Software\Git-Cheetah

      【讨论】:

      • 它不在我的电脑上(msysGit、TortoiseGit)。所以这行不通。
      【解决方案7】:

      一个古老的问题,但如果您通过标准安装程序安装 git,则获取其安装位置的一种方法是询问注册表:

      在PowerShell中:

      (Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\GitForWindows).InstallPath
      

      这会返回:

      C:\Program Files\Git
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-29
        • 2013-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多