如何使用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