git - 如何使用 powershell 脚本动态添加 git 审阅者?

标签 git powershell

我正在处理一个项目,我想为我的存储库的不同分支添加不同的审阅者。
我通常使用以下命令添加审阅者:

git push --receive-pack='git receive-pack --reviewer=abc.def --reviewer=john.doe' origin HEAD:refs/for/<branch_name>
由于我使用 powershell 终端,因此我编写了一些脚本来简化我的工作。如何根据我当前的存储库分支动态添加不同的审阅者组?
到目前为止,我的 powershell 函数看起来像这样......
$BranchReviewerMap = @{ 
    'devO' = "'git receive-pack --reviewer=abc.def --reviewer=efg.hij'"
    'devI' = "'git receive-pack --reviewer=m.ks --reviewer=t.ch --reviewer=imt.h'"
    'devT' = "'git receive-pack --reviewer=m.ks --reviewer=t.ch --reviewer=ay.an'"
    'test' = "'git receive-pack --reviewer=m.ks'"
}

function mkb_git_push {
    [CmdletBinding()]
    param (
            [ValidateSet("merge", "commit", "test")]
            [String] $commit_type = "commit"
    )
    $default_commit = "commit"
    $test_commit = "test"
    Clear-Host

    # ===========>>> Please ignore below parts. These are working just fine <<<=========== #
    # Get Current branch
    $cur_branch = git branch --show-current
    # Some other calculation and logic, which works.
    # ===========>>> Please ignore above parts. These are working just fine <<<=========== #

    #Not able to make it work. Tried both from below two lines.
    $reviewer = [String] $BranchReviewerMap[$cur_branch]
    #$reviewer = $BranchReviewerMap[$cur_branch]
    git push --receive-pack=$reviewer origin HEAD:refs/for/$cur_branch
}
我得到的错误是..

fatal: Gerrit Code Review: $reviewer: not found fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.


我不是在寻找任何 if()-else if()-else 类型的解决方案。
仅供引用:这是我的第一篇文章。请忽略我在帖子中的错误。

最佳答案

至少有一个问题在于您如何构建哈希表:
不包括嵌入式 '...' - 引用条目值;在条目定义期间,语法引用就足够了(您可以在此处使用单引号,因为这些值不引用 PowerShell 变量):

$BranchReviewerMap = @{ 
    'devO' = "git receive-pack --reviewer=abc.def --reviewer=efg.hij"
    'devI' = "git receive-pack --reviewer=m.ks --reviewer=t.ch --reviewer=imt.h"
    'devT' = "git receive-pack --reviewer=m.ks --reviewer=t.ch --reviewer=ay.an"
    'test' = "git receive-pack --reviewer=m.ks"
}
PowerShell 会自动确保 --receive-pack=$reviewer作为单个参数传递给 git .
警告 : 在 Windows 上,如果 $reviewer包含空格(就像这里的情况),PowerShell 会将整个参数包装在 "..." 中幕后,而不仅仅是后面的部分 = .
例如,在幕后使用的实际 Windows 命令行可能如下所示:
# Command line actually used, as rebuilt by PowerShell behind the scenes. 
git push "--receive-pack=git receive-pack --reviewer=m.ks" origin HEAD:refs/for/test
然而,似乎git在 Windows 上接受这种引用风格;相比之下,其他具有类似选项的 CLI 可能不会,例如 msiexec .

关于git - 如何使用 powershell 脚本动态添加 git 审阅者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67675114/

相关文章:

git 相当于 'hg serve' ?

powershell - 我可以将 TLS 与 Send-MailMessage cmdlet 一起使用吗?

c# - PowerShell Types.ps1xml 导入模块时找不到类型

Powershell - 使用模块编译

git: 'lfs' 不是 git 命令不清楚

Git 推送错误 : does not match your user account

git - 如何在我的PS脚本中获取Git commit哈希?

git - 同时在同一个 git 目录上工作

.net - Powershell:列出 .net 组件的成员

arrays - Powershell中的奇怪脚本问题