如果我需要git status命令的帮助,我可以输入git help status,然后返回一个帮助页面,上面写着名称是“ git-status”。但是“ git-status”不是命令,命令是git status带空格的,不是连字符。
如果我输入git-status或git git-status出现错误。那么为什么帮助页面会调用它git-status呢?
Git 对帮助页面中的每个命令都执行相同的操作。为什么?
请注意,在开始时(2005-2008 年,Git 1.6.0),git 子命令git-xxx在您的$PATH.
请参阅Git 1.6.0 发行说明:
使用默认
Makefile设置,大多数程序现在都安装在您的外部$PATH,除了“git”、“gitk”和一些由于技术原因需要访问的服务器端程序。
自 2006 年初以来,从命令行调用 git 子命令“
git-xyzzy”已被弃用(并在1.5.4 发行说明中正式宣布)。此版本仍然支持将“ ”的
输出添加到脚本中后使用它们,但再次强烈鼓励用户调整其脚本以使用“ ”形式,因为我们将停止为内置命令安装“”硬链接在以后的版本中。git --exec-path$PATHgit xyzzygit-xyzzy
这个2006 年的帖子添加了:
我认为有一些历史背景。
我们一开始没有
bindir任何execdir区别,但我们希望有一天能够摆脱将所有内容都放入bindir.
作为解决方案的一部分,发明了“git”包装器,由于这一努力,脚本的某些部分以及大量文档页面和示例脚本丢失了破折号。从历史上看,git 工具一直希望
git-*在用户的 中找到所有内容PATH,我们很惊讶地git-*看到/usr/bin.
这就是GIT_EXEC_PATH发明“git”包装器和环境的原因。
人们可以在他们的 .git 上拥有
/usr/bin/git其他命令,因为“git”知道在哪里可以找到其余命令。 为了实现这一点,脚本应该知道在哪里可以找到其余的——最干净的方法是通过“git foo”形式运行其他脚本。git-*PATHgit-*
一致性
s/git-foo/git foo/g是我们的目标,但这种改变会干扰其他真正工作的补丁,而且有点无聊,所以没有人对所有脚本进行大规模清理。
在 Git 2.29(2020 年第 4 季度)中,安装过程学会了选择性地省略git-foo每个“”foo内置子命令的“”可执行文件,只有老用户才需要这些文件,因为他们仍然依赖于古老的承诺,即在前面添加“ git --exec-path”输出到PATH早期在他们的脚本中将保持他们编写的“ git-foo”调用正常工作。
从磁盘中删除这些可执行文件的旧尝试在 1.6 时代失败了;稍后可能值得再次尝试。
请参阅Johannes Schindelin ( )的提交 ef60e9f、提交 179227d、提交 a8b5355(2020 年 9 月 21 日)。(由Junio C Hamano 合并 -- --在提交 94de88c中,2020 年 10 月 4 日)dscho
gitster
Git:可选择跳过链接/复制内置程序签署人:约翰内斯·辛德林
很长一段时间以来,内置函数的非破折号形式是编写脚本的推荐方式,即调用( man )比调用更好。
git merge [...]git-merge [...]虽然 Git 仍然支持破折号形式(通过将
git可执行文件硬链接到 中的破折号名称libexec/git-core/),但实际上,它可能几乎无关紧要。然而,我们确实关心让人们的脚本正常工作(即使它们是在开始推荐非破折号形式之前编写的)。
不过,保持这种向后兼容性并不一定便宜:即使修改git.git checkout 中的提示提交也需要重新链接所有这些虚线命令。
在这位开发人员的笔记本电脑上,这会产生明显的差异:Run Code Online (Sandbox Code Playgroud)$ 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此外,
.zip文件没有任何对硬链接的标准化支持,因此“压缩”可执行文件将导致磁盘使用量增加。(为了减小 Windows 版 Git 的“MinGit”变体的大小(它以文件形式分发).zip,硬链接被专门排除在外。)除此之外,一些经常用于评估磁盘使用情况的程序无法意识到这些是硬链接,并且严重超出了磁盘使用情况。
最值得注意的是,直到最后几个 Windows 10 版本之前,Windows 资源管理器都是这种情况。参见例如msysgit/msysgit第58期。为了节省硬链接这些虚线命令所需的时间,并计划最终停止在 Windows 上提供这些硬链接,让我们引入一个 Makefile 旋钮来跳过生成它们。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |