Git环境变量文档[已关闭]

mzillmmw  于 2023-09-29  发布在  Git
关注(0)|答案(2)|浏览(93)

**已关闭。**此问题正在寻求书籍、工具、软件库等的建议。它不符合Stack Overflow guidelines。它目前不接受回答。

我们不允许问题寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答问题。
8年前就关门了。
Improve this question
我想对git-difftool进行一些更改,以便更好地支持BeyondCompare。我注意到这个Perl程序使用了很多ENV变量,比如:

  • GIT_DIFF_TOOL
  • GIT_DIFFTOOL_EXTCMD
  • GIT_DIFFTOOL_DIRDIFF
  • GIT_DIFFTOOL_PROMPT
  • GIT_PAGER

不幸的是,我没有找到这些变量的任何文档。Google今天不是我的朋友。

编辑

正如VonC所回答的,上述变量与git-difftool--helper.sh相关。我仍然对GIT_EXTERNAL_DIFF感到困惑。Git将启动git-difftool--helper.sh,它迭代每个7个参数。这些参数是什么,与之相关的文档在哪里?

xxe27gdn

xxe27gdn1#

注意(2017年第一季度更新为Git 2.12):difftool不再是Perl程序,而是Git中的C内置工具。
参见commit 94d3997(2017年1月25日),作者Jeff King ( peff )
参见Johannes Schindelin ( dscho )commit 019678dcommit 03831ef(2017年1月19日)和commit be8a90e(2017年1月17日)。
(由Junio C Hamano -- gitster --合并至commit b7786bb,2017年1月31日)
2015年3月的回答:
git-difftool.perl只是使用这些环境变量,让用户有机会覆盖您在“Git Diff with Beyond Compare”中看到的配置值。
这些环境变量在git-difftool--helper.sh中使用,它们可以覆盖本地配置。
diff config提到了配置diff.external,它可以被GIT_EXTERNAL_DIFF环境变量覆盖。
该命令的调用方式与git的“git Diffs”下的参数相同。
这就是记录7个参数的地方:

' GIT_EXTERNAL_DIFF '::

当环境变量'GIT_EXTERNAL_DIFF'被设置时,由它命名的程序被调用,而不是上面描述的diff调用。对于添加、删除或修改的路径,
使用7个参数调用'GIT_EXTERNAL_DIFF':

path old-file old-hex old-mode new-file new-hex new-mode

其中:

  • <old|new>-file::是GIT_EXTERNAL_DIFF可以用来读取<old|new>内容的文件,
  • <old|new>-hex::是40位十六进制数的SHA-1哈希,
  • <old|new>-mode::是文件模式的八进制表示。

在Git 2.29(2020年第4季度)中,GIT_EXTERNAL_DIFF的作用得到了澄清。
参见commit 17bae89(2020年9月1日)Philippe Blain ( phil-blain )
(由Junio C Hamano -- gitster --合并于commit cd332b2,2020年9月3日)

git.txt:正确的旧“GIT_EXTERNAL_DIFF”说明

签字人:菲利普·布兰
fde97d8ac6(“Update documentation to remove incorrect GIT_DIFF_OPTS example.",2006-11-27,Git v1.5.0-rc 0--merge)中,'GIT_EXTERNAL_DIFF'变量的描述从'diff-format.txt'移到了'git.txt',并且文档被更新以删除'diff'调用**,因为Git默认情况下不再使用外部diff程序**。
但是,‘GIT_EXTERNAL_DIFF’的描述仍然提到“而不是上面描述的diff调用”,这令人困惑。
纠正这个过时的句子。
git现在在其手册页中包括:

GIT_EXTERNAL_DIFF

当环境变量GIT_EXTERNAL_DIFF被设置时,它命名的程序被调用来生成diff,Git不使用其内置的diff机制。
如果命令行选项是隐藏的或太明显,可能很容易留下帮助文本NULL,但如果这样做,git subcmd -h和git subcmd --help-all会出现segfaults。现在(Git 2.43,Q4 2023),帮助文本是可选的。
参见commit cd52d9e(2023年8月26日),作者René Scharfe ( rscharfe )
(由Junio C Hamano -- gitster --合并于commit 27e2ea9,2023年9月5日)

parse-options:允许省略选项帮助文本

签字人:勒内·沙菲
1b68387(“builtin/receive-pack.c:use parse_options API”,2016-03-02,Git v2.9.0-rc 0--merge listed in batch #2)新增了--stateless-rpc--advertise-refs--reject-thin-pack-for-testing选项,字符串为NULLhelp; 03831ef(“difftool:implement the functionality in the builtin”,2017-01-19,Git v2.12.0-rc 0--merge listed in batch #8)类似地添加了“无助”选项--prompt
这样做大概是因为所有四个选项都是隐藏的和不言自明的。
但是,当将选项--help-all与其各自的工具一起使用时,它们会导致NULL指针解引用。
优雅地处理这样的选项,在循环的顶部将NULL指针变成一个空字符串,总是在结尾打印一个换行符,并通过帮助文本的分隔换行符。

zyfwsgd6

zyfwsgd62#

我使用gitBeyond Compare,我从来没有使用任何脚本来配置它们。
git config --global --list的输出摘录:

difftool.bcomp.cmd=/usr/local/bin/bcomp "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
difftool.bcomp.trustexitcode=true
diff.tool=bcomp

您需要安装Beyond Compare的命令行工具。这很简单:只需从Beyond Compare的菜单中选择“安装命令行工具...”命令,并按照说明操作(它会要求您输入密码,因为它需要在系统目录中操作)。
当它完成时,它显示:

命令行工具安装成功

/usr/local/bin/bcomp:
启动比较并等待比较完成。
/usr/local/bin/b比较:
启动比较并立即返回。
然后使用以下命令配置git

git config --global --add difftool.bcomp.cmd '/usr/local/bin/bcomp "$LOCAL" "$REMOTE" "$BASE" "$MERGED"'
git config --global --add difftool.bcomp.trustexitcode true
git config --global --add diff.tool bcomp

检查一切是否正确设置:

git difftool file.txt

(将file.txt替换为存储库中更改的真实的文件的名称)。
此外,如果您运行:

git config --global --add mergetool.prompt false

那么git difftool将启动所选的diff程序(在本例中为bcomp)而不要求确认(默认情况下)。

相关问题