git show <revision>:<relative/path/to/file>
)打开。
或者,Qt Creator 有一些 Git 集成,但我在 Extras > Git 下看不到这种可能性。真的有吗?Qt Creator 的
-block
选项为我提供了很多。如果我跑
qtcreator -block path/to/file.cpp
然后我在我的 Qt Creator 实例中打开文件,直到我在那里关闭它。但是,如果我将
git show
的寻呼机设置为
qtcreator -block
那么当我运行 git show <file>
.时什么也不会发生我还尝试了语法
qtcreator -block $1
来指定调用者预期有一个参数(这将是指定修订版的文件副本,由调用寻呼机的 Git 检索),但这仅此而已,所以仍然没什么。
GIT_PAGER
或
PAGER
环境变量可能是你想要的:$ export GIT_PAGER='whatever'
$ git show ...
寻呼机应该从 stdin 读取,这意味着您可能需要创建一个小的包装脚本来执行此操作,然后将内容写入临时文件:
$ cat /path/to/my/script
#!/bin/bash
tmp=$(mktemp) # You might want to tinker with this variable to indicate the filetype
cat - > "$tmp"
qtcreator -block "$tmp" # change this line to your needs
rm -- "$tmp"
然后在你的rc文件中指定
GIT_PAGER
:
export GIT_PAGER='/path/to/my/script'
然后运行
git show
寻呼机将被拾取。
$ git show ...
然而,这有一个巨大的缺点,那就是
GIT_PAGER
环境变量将被
git log
、git diff
等人拾取这意味着您正确地希望将寻呼机指定为配置选项:
$ git config --global pager.show '/path/to/my/script'
正如配置名称所示,这会为“show”子命令设置寻呼机。
如果你不喜欢 bash,那么我相信用 Python、Perl、JavaScript 或其他语言重写它很容易。
这是我执行此操作的小命令,输入您的
.gitconfig
:
showq = "!f() { tmp=$(echo $(git rev-parse $1) | cut -c1-7)_$(basename $2) ; git show $1:$2 > "$tmp" ; qtcreator -block "$tmp" ; rm "$tmp";}; f"
或
showq = "!f() { tmp=$(echo "$1")_$(basename $2) ; git show $1:$2 > "$tmp" ; qtcreator -block "$tmp" ; rm "$tmp";}; f"
说明:
假设我想输入:
git showq HEAD^^^^^ path/to/file.c
我们也可以
使用
HEAD^^^^^
git parse $1
,其中 $1
是传递给这个新函数 showq
的第一个参数。这将输出完整的哈希值,比如a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4
。然后我们将其回显/管道化为 cut
以仅取前 7 个字符,这在哈希中很常见。这产生a1b2c3d
$(echo "$1")
_
.
然后对于文件名(参数$2
),我们只取基本名称。
然后我们使用适当的参数运行原始的git show
,并要求它输出到一个名为 constructed 的文件。
然后我们在该文件上调用 Qt Creator。 Qt Creator 向我们展示了我们目前正在寻找<7 char hash OR rev-syntax>_<basename>
例如在我们的例子中
a1b2c3d_file.c
或HEAD^^^^^_file.c
。由于它具有相同的扩展名,因此它像往常一样被 Qt Creator 解析和着色。然后我们删除它。
宾果!