Git show:在我常用的编辑器Qt Creator中查看文件

7z5jn7bk  于 2023-02-20  发布在  Git
关注(0)|答案(2)|浏览(170)

我在Windows 10上使用Git(2.39.2.windows.1)和Qt Creator 7.0.2。我希望Git在当前打开的Qt Creator示例中显示特定版本的文件(如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获取),但这并没有做更多的事情,所以仍然没有什么。

lyr7nygr

lyr7nygr1#

根据上面的注解,您可能需要指定GIT_PAGERPAGER环境变量:

$ export GIT_PAGER='whatever'
$ git show ...

分页器应该从stdin读取,这意味着您可能需要创建一个小的 Package 器脚本来执行此操作,然后将内容写入临时文件:

$ 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 loggit diff等拾取。
这意味着您应该将寻呼机指定为配置选项:

$ git config --global pager.show '/path/to/my/script'

正如配置名称所示,这将设置“show”子命令的寻呼机。
如果您不喜欢bash,那么我确信用Python、Perl、JavaScript或其他语言重写它很容易。

wh6knrhe

wh6knrhe2#

从@Andreas Louv获得的知识、见解和想法,你可以用这种方式为你的文件取一个好名字。
下面是我的一个小命令,用于输入您的.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

我们可以选择

  • 使用git parse $1解析出HEAD^^^^^,其中$1是传递给这个新函数showq的第一个参数。这将输出完整的散列,比如a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4。然后我们将其回送/传输到cut,以便只接受前7个字符,这与散列相同。这将生成a1b2c3d

  • 像这样加上双引号
$(echo "$1")

然后我们放一个_
然后对于文件名(参数$2),我们只取基本名称。
然后,我们使用适当的参数运行原始的git show,并要求它输出到一个名为as constructed的文件中。
然后我们调用Qt Creator,Qt Creator显示我们当前正在查看<7 char hash OR rev-syntax>_<basename>,例如在我们的示例a1b2c3d_file.c OR HEAD^^^^^_file.c中。由于它具有相同的扩展名,因此Qt Creator照常解析和着色它。
那我们就把它取出来。
答对了!

相关问题