当我向git-gui
添加新工具时,对话框表明我可以使用一些变量传递给工具($REVISION
,$ARGS
,$FILENAME
)
是否有其他未的参数记录(例如当前的repo目录等)?为什么它们不包含在git-gui
的{{3}}中?
我目前的用例是我有两个启用/禁用预提交挂钩的脚本。目前,我必须打开我的Windows资源管理器并双击批处理文件,这有点笨拙。更简单的方法是直接从git-gui
...
作为替代方案(附带问题),我也有兴趣在--no-verify
之外绕过预提交钩子(即在提交时传递git-gui
。)
答案 0 :(得分:4)
查看git-gui
sources时,我发现(git-gui man page中没有):
git-gui.sh
:
$GITGUI_VERBOSE
,以启用详细加载SSH_ASKPASS
,建议我们执行askpass,如果没有设置GIT_DIR
和GIT_WORK_TREE
,用于存储库设置答案 1 :(得分:3)
我个人扩展git-gui
以使工具处理多个文件
在tools.tcl
文件中,添加以下2行
set env(GIT_GUITOOL) $fullname
set env(FILENAME) $current_diff_path
>> set env(FILENAMES) [array names selected_paths]
和:
unset env(GIT_GUITOOL)
unset env(FILENAME)
>> unset env(FILENAMES)
在您的工具中使用$FILENAMES
代替$FILENAME
,文件列表将以空格分隔(对于创建工具非常有用:rm $FILENAMES
)
关于$FILENAME
(和$FILENAMES
)的说明
Git gui工具机制不适用于包含空格的文件
我尝试通过编写
set env(FILENAMES) [string map { \{ \" \} \" } [array names selected_paths]]
但Console::exec
似乎将空间上的args分开并转义每个参数。
答案 2 :(得分:1)
上一个解决方案的两个注释:
将非空的$ FILENAMES发布到命令,将selected_paths声明为全局
发布包含空格的文件使用" $ {FILENAMES [@]}"而不是简单的$ FILENAMES。
您可以使用命令 printf' \"%s \"来查看如何将命令发送到命令。 ' 强> e.g。
printf' \"%s \" ' FILENAMES =" $ {FILENAMES [@]}"