我需要在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过滤器调用此长命令。他们都没有工作。
我写了一个小蝙蝠文件nbstrip.bat
,其中包含完整的调用。我已将此蝙蝠文件放在路径中。并且我已经设置了过滤器git config --global --add filter.nbstrip.clean "cmd /c nbstrip"
[当我用git add test.nb
间接调用此过滤器时,git显然变得“困惑”,并且有点将过滤器的输出解释为新命令并尝试执行它们。
在git过滤器中将窗口bat文件设置为命令的正确方法是什么?
] >>我将所有参数放在%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的正确方法是什么?
] >>注意:
您还有其他可以解决这种情况的策略吗?
我需要在Windows下使用可执行文件和一长串参数设置git过滤器。可执行文件是jq.exe,我需要传递给它的参数是--indent 1“(.cells [] | select(has(\” ...
这些命令被传递到外壳程序(即Bash或Busybox sh),而不是cmd,因此您需要以适合Unix shell的方式来编写它们。另外,Git for Windows附带的Bash版本具有一些以斜杠开头的参数的奇怪行为:它将它们视为Unix路径,并将它们重写为Windows路径,除非它们以其他斜杠开头(有关更多详细信息,请参见this answer)。
您应该将cmd /c nbstrip
写为cmd //c nbstrip
,以免将“ / c”解释为“ c:\”。您也可以将批处理脚本重写为shell脚本,然后直接调用它。