powershell的Git命令别名管道

时间:2017-04-27 13:18:43

标签: git powershell

我想在git git cleanIgnore中创建一个别名,但我无法弄清楚如何将命令1的输出传递给命令2。

我正在使用PowerShell,以下命令在提示符

中运行良好
git ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}

我在我的全局配置中定义了这个,它不起作用

[alias]
    cleanIgnore = "!git ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}"
    cleanIgnore2= "!git ls-files -i --exclude-from=.gitignore "

我可以让上半部分作为别名工作,但是当我git cleanIgnore

时,我一直在使用错误
git ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}: %{git: command not found
fatal: While expanding alias 'cleanignore': 'git ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}': No such file or directory

似乎!不只是将所有内容传递给shell来执行,而是还在做更多的事情

更新/应答

[alias] 
    cleanIgnore = "!powershell.exe -command 'git ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}'"

1 个答案:

答案 0 :(得分:2)

创建“新”git命令的另一种方法是:

  • 创建一个名为git-cleanIgnore的脚本(在您的案例中为powershell脚本)
  • 将此脚本放在您的路径上

关于!别名:我猜git不使用powershell

执行命令

你可以尝试使用像xargs这样的命令(或其他linux标准工具,例如你可以使用Cygwin在windows上安装),
或者看看你是否可以在别名中调用类似powershell.exe -command '%{git rm --cached $_}'的内容

(阅读powershell文档以了解如何将命令作为参数传递给powershell.exe

[edit]:你找到了使用powershell执行命令的方法:

[alias]
    cleanIgnore = "!powershell.exe -command 'git ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}'"