11

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

是否还有其他记录的参数(例如当前的 repo 目录等)?为什么它们没有包含在 的文档git-gui

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

--no-verify作为替代方案(附带问题),我也有兴趣绕过git-gui.

4

3 回答 3

4

在查看git-gui源代码时,我发现(不存在于git-gui 手册页中):

  • git-gui.sh
    • $GITGUI_VERBOSE, 启用详细加载
    • SSH_ASKPASS,建议我们实施 askpass,如果没有设置
    • GIT_DIRGIT_WORK_TREE, 用于存储库设置
于 2012-03-23T12:35:36.633 回答
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 并逃避每个论点。

于 2013-08-30T15:37:23.813 回答
1

上一个解决方案的两个注意事项:

  1. 全局选定路径

要将非空 $FILENAMES 发布到命令,必须将 selected_pa​​ths 声明为全局

  1. 包含空格的文件

要发布包含空格的文件,请使用“${FILENAMES[@]}”而不是普通的 $FILENAMES。

您可以使用命令printf '\"%s\" '查看路径是如何发送到命令的, 例如

printf '\"%s\" ' 文件名= "${文件名[@]}"

于 2016-01-08T21:17:05.337 回答