windows 如何在PowerShell上安装git(在PowerShell上带有bash)?

pvcm50d1  于 2022-12-14  发布在  Windows
关注(0)|答案(6)|浏览(616)

https://gitforwindows.org/有一个选项可以把bash放到PowerShell中。我需要这个选项,所以不需要安装WSL等等。我需要无人值守地安装git,也就是说,只使用命令行。现有的教程,比如this,只使用PowerShell启动安装程序,但是我必须使用鼠标来安装东西。
那么,如何使用PowerShell在PowerShell上安装git,with bash?

更新日期:

我试过了

Write-Host "Installing Git for windows..." -ForegroundColor Cyan
$exePath = "$env:TEMP\git.msi"

Write-Host "Downloading..."
(New-Object Net.WebClient).DownloadFile('https://github.com/git-for-windows/git/releases/download/v2.37.1.windows.1/Git-2.37.1-64-bit.exe', $exePath)

Write-Host "Installing..."
Start-Process msiexec.exe -Wait -ArgumentList '$exePath /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS="icons,ext\reg\shellhere,assoc,assoc_sh" /LOG="C:git-for-windows.log"'

git --version
bash

但是它在“正在安装...”时卡住了,不打印任何其他输出。

rhfm7lfc

rhfm7lfc1#

有两个问题:

  • Git for Windows不作为MSI软件包发布。并且您不能通过重命名将常规可执行文件转换为MSI软件包。您根本不需要msiexec.exe。安装程序本身已经有参数来执行静默安装。请按原样执行:
$exePath = "$env:TEMP\git.exe"
Start-Process $exePath -Wait -ArgumentList '/NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS="icons,ext\reg\shellhere,assoc,assoc_sh" /LOG="C:\git-for-windows.log"'

但是:这将仍然启动一个GUI。所以你必须添加更多的参数,使安装真正沉默。进一步阅读:

TL;DR:另外添加/VERYSILENT,您可能希望使用/LOADINF来自定义一些设置。

  • 安装成功后,你会面临同样的问题,你在你的类似问题中已经做过了,我只是answered.tl;灾难恢复:

当前Process作用域中的环境变量不会自动更新。请手动更新它们,方法是:

foreach($level in "Machine","User") {
   [Environment]::GetEnvironmentVariables($level).GetEnumerator() | % {
      # For Path variables, append the new values, if they're not already in there
      if($_.Name -match 'Path$') { 
         $_.Value = ($((Get-Content "Env:$($_.Name)") + ";$($_.Value)") -split ';' | Select -unique) -join ';'
      }
      $_
   } | Set-Content -Path { "Env:$($_.Name)" }
}

此代码取自this answer
之后,git --versionGet-Command git将工作。
完整脚本:

$exePath = "$env:TEMP\git.exe"

# Download git installer
Invoke-WebRequest -Uri https://github.com/git-for-windows/git/releases/download/v2.37.1.windows.1/Git-2.37.1-64-bit.exe -UseBasicParsing -OutFile $exePath

# Execute git installer
Start-Process $exePath -ArgumentList '/VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS="icons,ext\reg\shellhere,assoc,assoc_sh"' -Wait

# Optional: For bash.exe, add 'C:\Program Files\Git\bin' to PATH
[Environment]::SetEnvironmentVariable('Path', "$([Environment]::GetEnvironmentVariable('Path', 'Machine'));C:\Program Files\Git\bin", 'Machine')

# Make new environment variables available in the current PowerShell session:
foreach($level in "Machine","User") {
   [Environment]::GetEnvironmentVariables($level).GetEnumerator() | % {
      # For Path variables, append the new values, if they're not already in there
      if($_.Name -match 'Path$') { 
         $_.Value = ($((Get-Content "Env:$($_.Name)") + ";$($_.Value)") -split ';' | Select -unique) -join ';'
      }
      $_
   } | Set-Content -Path { "Env:$($_.Name)" }
}

# Work with git
git --version
bash
bnl4lu3b

bnl4lu3b2#

# Make new environment variables available in the current PowerShell session:
function reload {
   foreach($level in "Machine","User") {
      [Environment]::GetEnvironmentVariables($level).GetEnumerator() | % {
         # For Path variables, append the new values, if they're not already in there
         if($_.Name -match 'Path$') { 
            $_.Value = ($((Get-Content "Env:$($_.Name)") + ";$($_.Value)") -split ';' | Select -unique) -join ';'
         }
         $_
      } | Set-Content -Path { "Env:$($_.Name)" }
   }
}
Write-Host "Installing git..." -ForegroundColor Cyan

$exePath = "$env:TEMP\git.exe"

Invoke-WebRequest -Uri https://github.com/git-for-windows/git/releases/download/v2.37.1.windows.1/Git-2.37.1-64-bit.exe -UseBasicParsing -OutFile $exePath

Start-Process $exePath -ArgumentList '/VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS="icons,ext\reg\shellhere,assoc,assoc_sh"' -Wait

[Environment]::SetEnvironmentVariable('Path', "$([Environment]::GetEnvironmentVariable('Path', 'Machine'));C:\Program Files\Git\bin", 'Machine')

reload

git --version
bash --version
siotufzp

siotufzp3#

这不是您问题的确切答案。
既然你不喜欢像WSL那样笨重的东西,我有一个很好的替代方案来满足你的需求,它也保证了原生的windows文件系统支持。使用MSYS 2代替gitbash。这要好得多,而且git-bash最初是基于MSYS 2的
1.下载首选的MSYS2软件包。
1.如果已下载GUI安装程序,请使用.\msys2-x86_64-latest.exe in --confirm-command --accept-messages --root C:/msys64通过CLI进行安装
或者,如果您已经下载了自解压归档文件,请使用.\msys2-base-x86_64-latest.sfx.exe -y -oC:\安装它
1.启动MSYS 2,然后使用pacman -Syu更新软件包列表。
1.使用pacman -S git安装git
你最终会爱上它的。注意一些你在linux中习惯的键盘快捷键可能不起作用,例如不支持Ctrl+Shift+v粘贴,而Windows使用Shift+Insert
Credits

ecfsfe2w

ecfsfe2w4#

为了以防万一,请检查命令的/LOG="C:git-for-windows.log"部分是否有拼写错误

/LOG="C:\git-for-windows.log"
        ^^^ 
        (\ was missing)

这样,您就可以重试,并监视C:\git-for-windows.log的日志。
此外,请确保您有权直接在C:\下写入。
/LOG="$env:userprofile\git-for-windows.log"可能更安全。

u2nhd7ah

u2nhd7ah5#

使用SAVEINF参数运行一次git install,在安装界面中选择所有你想安装的选项:

.\Git-2.37.1-64-bit.exe /SAVEINF="c:\temp\git-install.inf"

这将创建一个安装配置文件,您可以使用它来使用powershell进行git的静默安装:

$uri = 'https://github.com/git-for-windows/git/releases/download/v2.37.1.windows.1/Git-2.37.1-64-bit.exe'
Invoke-WebRequest -Uri $uri -OutFile git-install.exe
.\git-install.exe /LOADINF="c:\temp\git-install.inf" /VERYSILENT

这将产生一个后台进程并立即退出。您可以等待它完成,如下所示:

while (Get-Process *git-install*) { sleep -seconds 5 }
6qfn3psc

6qfn3psc6#

现在,在PowerShell上使用git终端非常简单,只需使用以下命令
首先,将执行策略设置为remotesigned。以管理员身份运行powershell并运行以下命令

set-executionpolicy remotesigned

在powershell上安装git

Install-Module posh-git -Scope CurrentUser -Force

导入git模块

Import-Module posh-git

在powershell启动时默认加载配置文件

Add-PoshGitToProfile -AllHosts​​​​​​​

相关问题