请注意,在开始时(2005-2008,Git 1.6.0),git 子命令被引用为git-xxx
, 在你的$PATH
.
See Git 1.6.0 发行说明:
使用默认的Makefile
设置,现在大部分程序都是
安装在您的外部$PATH
, 除了 ”git
", "gitk
”以及一些由于技术原因需要可访问的服务器端程序。
调用 git 子命令为“git-xyzzy
自 2006 年初以来,命令行中的“”已被弃用(并在1.5.4 发行说明).
添加来自“的输出后,从脚本中使用它们git --exec-path
” 到$PATH
此版本中仍受支持,但再次强烈鼓励用户调整其脚本以使用“git xyzzy
“表格,因为我们将停止安装”git-xyzzy
" 后续版本中内置命令的硬链接。
This 2006年主题添加:
我认为有一些历史背景。
我们一开始没有bindir
vs execdir
区别,但我们想要一个
有一天,我们将不再把所有东西都放进去bindir
.
作为解决方案的一部分,发明了“git”包装器,并且作为
这种努力的结果,脚本的某些部分,以及很多
文档页面和示例脚本,丢失了破折号。
从历史上看,git 工具总是想要一切git-*
到
可以在用户的PATH
,我们很惊讶地看到 100 多个git-*
命令在/usr/bin
.
这就是为什么“git”包装器和GIT_EXEC_PATH
环境被发明了。
人们可以拥有/usr/bin/git
没有其他git-*
在他们的PATH
,因为“git”知道在哪里可以找到其余的git-*
命令。
为了实现这一点,脚本应该知道在哪里可以找到其余的——最干净的方法是通过“git foo”形式运行其他脚本。
一致性通过s/git-foo/git foo/g
is目标,但那种
的变化会干扰其他真正起作用的补丁
工作,有点无聊,所以没人做批发
清理所有脚本。
在 Git 2.29(2020 年第 4 季度)中,安装过程学会了选择性地省略“git-foo
“每个'的可执行文件foo
' 内置子命令,只有那些仍然依赖于古老的承诺的老前辈才需要这些子命令“git --exec-path
“输出到PATH
在他们的剧本早期将保留“git-foo
“他们写的工作电话。
从磁盘中删除这些可执行文件的旧尝试在 1.6 时代失败了;稍后可能值得再次尝试。
See commit ef60e9f, commit 179227d, commit a8b5355 (21 Sep 2020) by Johannes Schindelin (dscho).
(Merged by Junio C Hamano -- gitster -- in commit 94de88c, 04 Oct 2020)
Git:可选择跳过链接/复制内置程序
Signed-off-by: Johannes Schindelin
For a long time already, the non-dashed form of the built-ins is the recommended way to write scripts, i.e. it is better to call git merge [...](man) than to call git-merge [...]
.
虽然 Git 仍然支持虚线形式(通过硬链接git
可执行文件中的虚线名称libexec/git-core/
),实际上,这可能几乎是无关紧要的。
然而,我们do关心保持人们的脚本正常运行(即使它们是在开始推荐非破折号形式之前编写的)。
不过,保持这种向后兼容性并不一定便宜:即使修改了git.git结帐将需要重新链接所有这些虚线命令。
在这位开发人员的笔记本电脑上,这会产生明显的差异:
$ touch version.c && time make
CC version.o
AR libgit.a
LINK git-bugreport.exe
[... 11 similar lines ...]
LN/CP git-remote-https.exe
LN/CP git-remote-ftp.exe
LN/CP git-remote-ftps.exe
LINK git.exe
BUILTIN git-add.exe
[... 123 similar lines ...]
BUILTIN all
SUBDIR git-gui
SUBDIR gitk-git
SUBDIR templates
LINK t/helper/test-fake-ssh.exe
LINK t/helper/test-line-buffer.exe
LINK t/helper/test-svn-fe.exe
LINK t/helper/test-tool.exe
real 0m36.633s
user 0m3.794s
sys 0m14.141s
$ touch version.c && time make SKIP_DASHED_BUILT_INS=1
CC version.o
AR libgit.a
LINK git-bugreport.exe
[... 11 similar lines ...]
LN/CP git-remote-https.exe
LN/CP git-remote-ftp.exe
LN/CP git-remote-ftps.exe
LINK git.exe
BUILTIN git-receive-pack.exe
BUILTIN git-upload-archive.exe
BUILTIN git-upload-pack.exe
BUILTIN all
SUBDIR git-gui
SUBDIR gitk-git
SUBDIR templates
LINK t/helper/test-fake-ssh.exe
LINK t/helper/test-line-buffer.exe
LINK t/helper/test-svn-fe.exe
LINK t/helper/test-tool.exe
real 0m23.717s
user 0m1.562s
sys 0m5.210s
Also, .zip
文件没有对硬链接的任何标准化支持,因此“压缩”可执行文件将导致磁盘使用量增加。 (为了缩小 Windows 版 Git 的“MinGit”变体的大小,该变体作为.zip
文件中,硬链接被明确排除。)
除此之外,一些经常用于评估磁盘使用情况的程序无法意识到这些是硬链接,并且严重超出了磁盘使用情况。
最值得注意的是,直到最后几个 Windows 10 版本之前,Windows 资源管理器都是这种情况。参见例如msysgit/msysgit第58期.
为了节省硬链接这些虚线命令所需的时间,并计划最终停止在 Windows 上提供这些硬链接,让我们引入一个 Makefile 旋钮来跳过生成它们。