为什么git过滤器分支没有链接?
我在macOS 11.2.1上安装了git,git版本是2.30.1,我在为什么git过滤器分支没有链接?,git,macos,github,Git,Macos,Github,我在macOS 11.2.1上安装了git,git版本是2.30.1,我在/usr/local/ceral/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:
/usr/local/ceral/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过滤器分支没有链接?谢谢。filter branch命令是作为一个shell脚本实现的(然后它运行大量Git管道命令,加上像
sed
之类的东西,当然还有您指定的任何过滤器,以完成其工作)。所以“二进制”——一个很小的16K实际上只是去掉了.sh
后缀的shell源代码。(Git的Git存储库将其所有shell脚本存储为.sh
文件。)
fetch、fetch pack、fmt merge message等命令都作为一个相当大的二进制文件实现。这只是Git构建方式的一个产物,意味着在发行版和运行时节省一些空间(例如,当一个Git命令的源代码想要调用Git rev parse
,这或多或少只是一个子程序调用,尽管事实上,这其中的大部分都变成了更奇特的东西)。但是虚线形式的命令,gitfoo
,传统上也是可执行的。例如,有些脚本可能仍然运行git commit
,而不是git commit
在过渡期,Git包括名为
GitFoo
的二进制文件,以及内置于一个大型包罗万象的二进制文件中的GitFoo
。所有这些都由主Makefile处理:没有像这样完全库化的命令与已库化的命令分开列出。那些单独的将分别安装在git-core
目录中,而那些变成一个大集合的将在git-core
中安装符号链接,以防仍有人试图用虚线形式调用它们。我明白了,非常感谢。