在Windows中正确设置git过滤器并将参数传递给它

问题描述 投票:1回答:1

我需要在Windows下设置一个带有可执行文件和一长串参数的git filter

可执行文件是jq.exe,我需要传递给它的参数是--indent 1 "(.cells[] | select(has(\"outputs\")) | .outputs) = [] | (.cells[] | select(has(\"execution_count\")) | .execution_count) = null | .metadata = {\"language_info\": {\"name\": \"python\", \"pygments_lexer\": \"ipython3\"}} | .cells[].metadata = {}"

我尝试了两种方法让git过滤器调用此长命令。他们都没有工作。


  1. 我写了一个小蝙蝠文件nbstrip.bat,其中包含完整的调用。我已将此蝙蝠文件放在路径中。并且我已经设置了过滤器git config --global --add filter.nbstrip.clean "cmd /c nbstrip"

    [当我用git add test.nb间接调用此过滤器时,git显然变得“困惑”,并且有点将过滤器的输出解释为新命令并尝试执行它们。

    在git过滤器中将窗口bat文件设置为命令的正确方法是什么?

    ] >>

    1. 我将所有参数放在%appdata%的辅助文件中,以简化命令调用。这样git config --global --add filter.nbstrip.clean "jq --indent 1 --from-file %appdata%\nbstrip.jq.txt"

    [当我使用git add test.nb间接调用此过滤器时,jq可执行文件未收到正确的文件名,并以错误消息jq.exe: Could not open C:UsersAdminAppDataRoamingnbstrip.jq.txt: No such file or directory进行抱怨,好像在将名称传递给可执行文件之前已删除所有的反斜杠一样。

    在git filter命令规范中使用带反斜杠的parms的正确方法是什么?

    ] >>

    注意:

  • 在两种情况下,我都直接在命令行中尝试过命令调用,它们可以正常工作
  • 。gitattributes或git config中的git过滤器定义没有问题,它们已正确设置:如果不是调用我的命令而是设置一个简单的日志,它就可以很好地工作。
  • 您还有其他可以解决这种情况的策略吗?

我需要在Windows下使用可执行文件和一长串参数设置git过滤器。可执行文件是jq.exe,我需要传递给它的参数是--indent 1“(.cells [] | select(has(\” ...

windows git batch-file parameter-passing gitattributes
1个回答
0
投票

这些命令被传递到外壳程序(即Bash或Busybox sh),而不是cmd,因此您需要以适合Unix shell的方式来编写它们。另外,Git for Windows附带的Bash版本具有一些以斜杠开头的参数的奇怪行为:它将它们视为Unix路径,并将它们重写为Windows路径,除非它们以其他斜杠开头(有关更多详细信息,请参见this answer)。

您应该将cmd /c nbstrip写为cmd //c nbstrip,以免将“ / c”解释为“ c:\”。您也可以将批处理脚本重写为shell脚本,然后直接调用它。

© www.soinside.com 2019 - 2024. All rights reserved.