我在macOS 11.2.1上安装了git,git版本为2.30.1,我在/usr/local/Cellar/git/2.30.1/libexec/git-core中运行了ls -lih,并得到了这个结果
8081498 lrwxr-xr-x 1 devaccount staff 13B Feb 9 07:20 git-fetch -> ../../bin/git
18081680 lrwxr-xr-x 1 devaccount staff 13B Feb 9 07:20 git-fetch-pack -> ../../bin/git
18081665 -rwxr-xr-x 1 devaccount staff 16K Feb 9 07:20 git-filter-branch
18081605 lrwxr-xr-x 1 devaccount staff 13B Feb 9 07:20 git-fmt-merge-msg -> ../../bin/git
18081575 lrwxr-xr-x 1 devaccount staff 13B Feb 9 07:20 git-for-each-ref -> ../../bin/git
18081641 lrwxr-xr-x 1 devaccount staff 13B Feb 9 07:20 git-for-each-repo -> ../../bin/git为什么git-过滤器分支不链接?谢谢。
发布于 2021-02-16 09:03:10
filter分支命令被实现为一个shell脚本(然后运行大量的Git管道命令,再加上一些东西,比如sed,当然还有您指定的任何过滤器,以完成它的工作)。因此,“二进制”-a微型16K实际上只是删除了.sh后缀的shell源。(用于Git的Git存储库将其所有shell脚本存储为.sh文件。)
fetch、fetch-pack、fmt-合并消息等命令都是作为一个相当大的二进制文件实现的。这只是Git构建方式的一个工件,目的是在发行版和运行时节省一点空间(例如,当一个Git命令的源代码想要调用git rev-parse时,这或多或少只是一个子程序调用--尽管实际上大部分都变成了一些更有趣的东西)。但是命令的虚线形式,git-foo,传统上也是可执行的。例如,有些脚本可能仍然运行git-commit而不是git commit。
在一个过渡时期,Git包括名为git-foo的二进制文件,以及内置到一个大的、无所不包的二进制文件中的git foo。这都是由主Makefile处理的:不是所有像这样的库化的命令都是单独列出的。分离的链接分别安装在git-core目录中,而所有被转换成一个大块的链接都是安装在git-core中的符号链接,以防有人仍然试图用虚空的表单调用它们。
https://stackoverflow.com/questions/66220641
复制相似问题