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

如何使用powershell脚本动态添加git审阅者?,git,powershell,Git,Powershell,我正在进行一个项目,希望为存储库的不同分支添加不同的审阅者 我通常使用以下命令添加审阅者: git push --receive-pack='git receive-pack --reviewer=abc.def --reviewer=john.doe' origin HEAD:refs/for/<branch_name> git push--receive pack='git receive pack--reviewer=abc.def--reviewer=john.doe'源代

我正在进行一个项目,希望为存储库的不同分支添加不同的审阅者

我通常使用以下命令添加审阅者:

git push --receive-pack='git receive-pack --reviewer=abc.def --reviewer=john.doe' origin HEAD:refs/for/<branch_name>
git push--receive pack='git receive pack--reviewer=abc.def--reviewer=john.doe'源代码头:refs/for/
因为我使用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
}
$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'”
}
函数mkb_git_push{
[CmdletBinding()]
param(
[验证集(“合并”、“提交”、“测试”)]
[String]$commit\u type=“commit”
)
$default\u commit=“提交”
$test\u commit=“test”
清除主机
#==========>>>请忽略以下部分。这些工作正常请忽略以上部分。这些工作正常至少一个问题是如何构造哈希表:

不包括嵌入的
“…”
-在条目值中引用;在条目定义期间,语法引用就足够了(如果这些值不引用PowerShell变量,您可以在此处使用单引号):

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

但是,Windows上的
git
似乎接受此引用样式;相比之下,其他具有类似选项的CLI可能不接受此引用样式,例如
msiexec

,因为PowerShell变量
$reviewer
已展开(替换为其值)在<代码> Git < /代码>命令中,意外的是,字符串<代码> $审阅者<代码>将出现在错误消息中。或者<代码> $审阅者<代码>在GeRIT上下文中有特殊含义吗?这里的所有问题都是PosiS壳特定的;考虑删除标记。(我将其保留,因为
--receive pack=…
部分是许多Git用户可能不知道的Git技巧。不过,这个特定部分已经可以很好地为您工作了!)@mklement0:非常感谢您的建议。我肯定会这么做。现在,对于您的第一条评论,我尝试了$reviewer/$reviewers以外的其他随机变量名称。结果相同:(@torek:我保留了git标签,因为我正在尝试动态构建git命令。如果有人以前尝试过类似的操作,我想知道他们的建议/意见。感谢您澄清内部命令的工作原理。正如您所建议的,我也尝试过从映射中删除单个引号。但结果总是一样的。在过去的几天里,我一直在努力解决这一挑战,并尝试了各种报价/单报价的组合……但到目前为止没有运气……:(@muhammadrakeb,跟进我上面的评论:如果
$reviewer
引用了您的PowerShell变量,那么它不应该出现在错误消息中,因为在问题
中显示的命令中,$reviewer
被展开(替换为其值)在
git
看到该参数之前。换句话说:问题中显示的命令可能与触发错误的命令不同。@MuhammadMakeeb,请注意,如果您的实际命令中有以下输入错误,
$reviewer
将不会展开,因为PowerShell的参数解析器中有一个错误反过来,我将解释为什么
$reviewer
在错误消息中显示为文本:
-receive pack=$reviewer
-请注意开头缺少的第二个
-
。根据注释中的线索,我终于能够用另一种方法解决它。最初使用Invoke表达式,我将完整命令构建为字符串和later使用调用表达式执行它。这是我的最终代码。@muhammadrakeb,很高兴听到我的指针很有用,但请注意-在您的案例中没有很好的理由使用它。查看您的最终代码,我看不出它与首选的直接调用有什么不同。
# 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