Windows powershell 中的 xargs 和 git 问题

Windows powershell 中的 xargs 和 git 问题

我一直在使用以下命令删除任何合并的 git 分支:

git branch --merged | grep -v "\*" | grep -v "master" | grep -v "staging" | xargs -n 1 git branch -d

grep并且xargs两者都使用适用于 Windows 的 git 打包。最近更换了电脑,决定切换到 powershell(从 Windows cmd),但这不再按预期工作。我没有删除分支,而是得到了(请注意末尾的问号):

error: branch '<branch-name>?' not found.

奇怪的是,将命令更改为以下内容时不会出现问号: git branch --merged | grep -v "\*" | grep -v "master" | grep -v "staging" | xargs -n 1 echo

并且使用手动删除分支git branch -d也没有问题。我很好奇问号从何而来,以及如何消除它。

答案1

您的问题听起来像是您刚接触 PowerShell,这没问题,但您应该先花一些时间学习它,以避免混淆、误解、错误、错误的假设、不必要的错误等。Youtube 上有很多视频可以学习。

PowerShell 具有适用于 Git 的模块,您可以从 PowerShell consolehost、PowerShell ISE 和 VSCode 使用这些模块。Powershell 托管在 GitHub 上。

您可以下载并安装一些模块以供 git/Github 使用。

Find-Module -Name '*git*' | Format-Table -AutoSize
# Results
<#
 Find-Module -Name '*git*' | Format-Table -AutoSize

Version     Name                                        Repository Description                                                     
-------     ----                                        ---------- -----------                                                     
0.7.3       posh-git                                    PSGallery  Provides prompt with Git status summary information and tab c...
0.14.0      PowerShellForGitHub                         PSGallery  PowerShell wrapper for GitHub API                               
1.3.8       GitLabProvider                              PSGallery  GitLab PackageManagement provider                               
1.4.1       Git                                         PSGallery  Common Git cmdlets                                              
1.4.0       InstallModuleFromGitHub                     PSGallery  PowerShell module that installs modules from GitHub             
0.5         GitHubProvider                              PSGallery  GitHub-as-a-Package - PackageManagement PowerShell Provider t...
0.1.0.0     ISEGit                                      PSGallery  Module to work with git in PowerShell ISE. Configured using d...
...
#>

此外,在运行内部和外部命令时,您必须了解一些特殊注意事项以及如何使用它们。例如特殊字符、保留字/标记和别名。

about_Special_Characters - PowerShell | Microsoft Docs

about_Reserved_Words - PowerShell | Microsoft Docs

PowerShell 特殊字符和标记

关于别名

您还需要了解命令优先级。

about_Command_Precedence - PowerShell | Microsoft Docs

也可以看看:

让 Windows 上的 Powershell、SSH Github 和 Git 更不糟糕

https://stackoverflow.com/questions/9933964/is-there-a-way-to-integrate-git-into-the-windows-cmd-or-powershell

https://stackoverflow.com/questions/6127328/how-can-i-delete-all-git-branches-which-have-been-merged

https://stackoverflow.com/questions/36428949/whats-the-equivalent-of-xargs-in-powershell

https://stackoverflow.com/questions/794516/convert-xargs-bash-command-to-powershell

运行外部命令有多种方法。最常见的是:

5. 接线员

原因:用于将字符串视为单个命令。适用于处理空格。

在 PowerShell V2.0 中,如果您正在运行 7z.exe (7-Zip.exe) 或其他以数字开头的命令,则必须使用命令调用运算符 &。

PowerShell V3.0 解析器现在做得更智能了,在这种情况下,您不再需要 &。

详细信息:运行命令、脚本或脚本块。调用运算符也称为“调用运算符”,可让您运行存储在变量中并由字符串表示的命令。由于调用运算符不解析命令,因此它无法解释命令参数

# Example:

& 'C:\Program Files\Windows Media Player\wmplayer.exe' "c:\videos\my home video.avi" /fullscreen

当外部命令有很多参数,或者参数或路径中有空格时,事情就会变得棘手!使用空格时,您必须嵌套引号,结果并不总是很清楚!在这种情况下,最好像这样分开所有内容:

$CMD = 'SuperApp.exe'
$arg1 = 'filename1'
$arg2 = '-someswitch'
$arg3 = 'C:\documents and settings\user\desktop\some other file.txt'
$arg4 = '-yetanotherswitch'
 
& $CMD $arg1 $arg2 $arg3 $arg4
 
# or same like that:
 
$AllArgs = @('filename1', '-someswitch', 'C:\documents and settings\user\desktop\some other file.txt', '-yetanotherswitch')
 
& 'SuperApp.exe' $AllArgs

相关内容