如何验证 Windows BAT 文件中的当前 git 分支

Sim*_*ast 5 git batch-file errorlevel

在我的 BAT 文件中运行一些命令之前,我试图弄清楚如何验证用户是否在正确的分支上。

执行此类检查的最佳方法是什么...

IF (on "master" git branch) THEN
   ...
ELSE
   ...
Run Code Online (Sandbox Code Playgroud)

Sim*_*ast 5

您可以使用该命令确定您所在的分支git branch,因此我们将使用该命令的输出进行检查。星号将标记当前分支,如下所示:

D:\>git branch
  master
* staging
Run Code Online (Sandbox Code Playgroud)

我们可以将此输出传送到find命令,然后传送到IF语句:

git branch | find "* master" > NUL & IF ERRORLEVEL 1 (
    ECHO I am NOT on master
) ELSE (
    ECHO I am on master
)
Run Code Online (Sandbox Code Playgroud)

只是> NUL使 的输出静音find。如果在输出中的任何位置都找不到该字符串,
find则会触发。ERRORLEVEL 1


jbd*_*dev 4

使用以下命令仅返回当前分支:

git rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)

FINDSTR 可以使用正则表达式来匹配分支名称:

FINDSTR /r /c:"^master$" 
Run Code Online (Sandbox Code Playgroud)

除了 git rev-parse 使用 LF 而不是 CRLF 作为行结尾之外,这是有效的,而正则表达式中的行尾匹配正在寻找 CR。添加 FIND /v "" 将 LF 更改为 CRLF 结果如下:

git rev-parse --abbrev-ref HEAD | find /v "" | findstr /r /c:"^master$" > NUL & IF ERRORLEVEL 1 (
  ECHO I am NOT on master
) ELSE (
  ECHO I am on master
)
Run Code Online (Sandbox Code Playgroud)

这将匹配分支“master”,但不匹配包含单词 master 的分支名称。