我想在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 $_}'"
答案 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 $_}'"