前言
在 macOS 下 git 命令行工具默认有着很好的 tab 补全功能,而在 Windows 下通过 exe 安装的 git 程序,看起来就有些简陋。
其自带的 Unix Shell 环境模拟窗口 Git Bash,有着丑陋的外观,即便可以通过配置字体、颜色等手段稍加改善,但其一会儿类 Unix 工具链环境的反馈,一会儿 Windows cmd 工具链混搭的集成环境,着实容易让人精神分裂。
为了更好的自始至终统一使用体验,我们通常会将 git 程序添加到 全局 path 中(引导安装程序即可选配),然后在 cmd 或 PowerShell(通常是功能更强大的 PowerShell)中调用 git。
然而在 PowerShell 中调用 git 时,我们丧失了 tab 补全功能。
这里,我们介绍使用 Posh-Git 这个扩展包,从而在 PowerShell 中应用 git 的 tab 补全。
安装 Post-Git
配置脚本执行权限
在可以运行 PowerShell 脚本之前,你需要将本地的 ExecutionPolicy 设置为 RemoteSigned
在 PowerShell 中执行下面的命令,更精细化的配置参见 微软文档 Set-ExecutionPolicy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
使用包管理器安装 posh-git
在 PowerShell 中执行下面的命令,通过包管理器来安装 posh-git
Install-Module posh-git -Scope CurrentUser -Force
Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Force # 带有 PowerShell Core 支持的更新的 beta 版
如果你想为所有的用户安装 posh-git,请使用 -Scope AllUsers
并在管理员权限启动的 PowerShell 控制台中执行。
更新 PowerShell 提示符
要在你的提示符中包含 Git 信息,那么需要导入 Posh-Git 模块。 要让 PowerShell 在每次启动时都导入 Posh-Git,请执行 Add-PoshGitToProfile
命令, 它会在你的 $profile 脚本中添加导入语句。此脚本会在每次打开新的 PowerShell 终端时执行。
Import-Module posh-git
Add-PoshGitToProfile -AllHosts
更多详细内容,参见:Git 文档:A1.9 附录 A: 在其它环境中使用 Git - Git 在 PowerShell 中使用 Git
自定义 posh-git 提示符
当您导入 posh-git 模块时,它将用新的提示功能替换 PowerShell 的默认提示功能。当当前目录位于 Git 存储库中时,posh-git 提示功能将显示 Git 状态摘要信息。如果 posh-git 检测到您有自己的自定义提示功能,则不会替换提示功能。
这里可以通过编辑当前用户 ps1 文件,实现自定义提示符:
echo $Profile
得到形如下方的绝对路径,表示当前用户 ps1 配置文件默认加载位置
C:\Users\liang\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
打开并编辑这个文件,加入下面的内容:
$GitPromptSettings.DefaultPromptPrefix.Text = 'PS [$(Get-Date -f "HH:mm:ss")] '
$GitPromptSettings.DefaultPromptPrefix.ForegroundColor = [ConsoleColor]::Magenta
$GitPromptSettings.DefaultPromptAbbreviateHomeDirectory = $true
$GitPromptSettings.BeforePath = '{'
$GitPromptSettings.AfterPath = '}'
$GitPromptSettings.DefaultPromptPath.ForegroundColor = 0xFFA500
$GitPromptSettings.BeforePath.ForegroundColor = 0xFFA500
$GitPromptSettings.AfterPath.ForegroundColor = 0xFFA500
$GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n'
你将获得一个同时拥有 时间、家目录缩写、git 状态的提示符,它会像下面这样:
更多详细内容,参见:GitHub - dahlbyk/posh-git - Customizing the posh-git prompt
顺便说下中文乱码问题
PowerShell 下 git log
中文、git status
文件名等,可能存在中文乱码的问题。
可以向下面一样配置 git:
git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
一劳永逸的方式:
系统设置 -> 管理语言设置,打开旧版的区域设置窗口
更改系统区域设置 -> Beta 版:使用 Unicode UTF-8 提供全球语言支持,勾选它,重启✅