哪些$ VARIABLES可以从git-gui传递给外部工具?

时间:2012-03-23 10:29:34

标签: git msysgit git-gui

当我向git-gui添加新工具时,对话框表明我可以使用一些变量传递给工具($REVISION$ARGS$FILENAME

是否有其他的参数记录(例如当前的repo目录等)?为什么它们不包含在git-gui的{​​{3}}中?

我目前的用例是我有两个启用/禁用预提交挂钩的脚本。目前,我必须打开我的Windows资源管理器并双击批处理文件,这有点笨拙。更简单的方法是直接从git-gui ...

中完成

作为替代方案(附带问题),我也有兴趣在--no-verify之外绕过预提交钩子(即在提交时传递git-gui。)

3 个答案:

答案 0 :(得分:4)

查看git-gui sources时,我发现(git-gui man page中没有):

  • git-gui.sh
    • $GITGUI_VERBOSE,以启用详细加载
    • SSH_ASKPASS,建议我们执行askpass,如果没有设置
    • GIT_DIRGIT_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)

上一个解决方案的两个注释:

  1. global selected_pa​​ths
  2. 将非空的$ FILENAMES发布到命令,将selected_pa​​ths声明为全局

    1. 包含空格的文件
    2. 发布包含空格的文件使用" $ {FILENAMES [@]}"而不是简单的$ FILENAMES。

      您可以使用命令 printf' \"%s \"来查看如何将命令发送到命令。 ' e.g。

      printf' \"%s \" ' FILENAMES =" $ {FILENAMES [@]}"