使用PowerShell获取当前git分支的名称

15

我希望能够从不在git仓库相同文件夹的PowerShell脚本中执行git命令。

首先,我想要检查当前分支,如果它不是主分支,则尝试检出主分支并拉取主分支。

到目前为止我做了什么:

function Get-ScriptDirectory {
    Split-Path $script:MyInvocation.MyCommand.Path
}

$currentPath = Get-ScriptDirectory
[string]$Path_GIT = "C:\Program Files\Git\git-cmd.exe"
$gitRepo = $currentPath + "\..\"
$nameCurrentBranch = & $Path_GIT git -C "$gitRepo" rev-parse --abbrev-ref HEAD

根据此处的文档和这个问题的答案,$gitRepo包含包含git仓库的文件夹的路径。

我收到以下错误:

git-cmd.exe : fatal: Cannot change to 'C:\Users\MyName\Documents\Projects\MyProject\
Batchs\.." rev-parse --abbrev-ref HEAD': Invalid argument
At C:\Users\MyName\Documents\Projects\MyProject\Batchs\Publish.ps1:64 char:22
+ ... entBranch = & $Path_GIT git -C "$gitRepo" rev-parse --abbrev-ref HEAD ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (fatal: Cannot c...nvalid argument:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

编辑:@4c74356b41建议使用Join-Path后出现了新问题:弹出窗口迅速打开并关闭,然后我的PowerShell脚本就卡住了,就好像它正在等待git-cmd.exe关闭一样。但是我看不到cmd git的窗口,也无法关闭它。


你知道 Posh Git 吗?https://github.com/dahlbyk/posh-git - Mark Wragg
posh-git 在任何情况下都无法提供帮助。 - 4c74356b41
阅读您的代码示例,您已经在您的存储库中了。这意味着像@Mark所提到的那样,posh-git会有所帮助。(例如 Get-GitDirectory) - Clijsters
可能是如何在PowerShell提示符中显示当前的git分支名称?的重复问题。 - Michael Freidgeim
如果使用 posh-git,那么在每台服务器和开发人员的机器上运行 PS 脚本时,是否也需要安装它?对于个人使用来说还好,但是... - Svein Terje Gaup
3个回答

26

这会获取一些额外的信息,对我来说这个更好用 $(git rev-parse --abbrev-ref HEAD --)[0] - trevren11
3
从git 2.22开始,这变得更加简单了 $branch = git branch --show-current - Andrew Bonsall

1
尝试使用Join-Path。
$gitRepo = Join-Path $currentPath ".." -Resolve

谢谢您的回答,我现在又遇到了一个新错误(我尝试过在调用git-cmd时使用和不使用$gitRepo周围的引号)。 - user2088807
你为什么想要在repo的根目录下执行那个命令? - 4c74356b41
获取当前分支的名称。如果不是主分支,我想切换到主分支并拉取主分支。 - user2088807
那为什么不直接检出主分支并拉取呢?如果你已经在主分支上,检出到主分支也不会有任何问题。另外,为什么不使用 git status -b 呢? - 4c74356b41

0
使用psget安装posh-git插件,该插件可以显示当前分支。如果您拥有最新版本的PowerShell,则很可能已经安装了psget。如果您没有安装它,请使用以下命令获取它。
(new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") | iex

安装 posh-git,请使用以下命令:

Install-Module posh-git

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接