【问题标题】:Why does not git-filter-branch get linked?为什么 git-filter-branch 没有链接?
【发布时间】:2021-05-19 02:01:17
【问题描述】:

我在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-filter-branch 没有链接?谢谢。

【问题讨论】:

    标签: git macos github


    【解决方案1】:

    filter-branch 命令被实现为一个 shell 脚本(然后运行许多 Git 管道命令,加上诸如 sed 之类的东西,当然还有您指定的任何过滤器,以完成其工作)。所以“二进制”——一个很小的 ​​16K——实际上只是去掉了.sh 后缀的 shell 源代码。 (Git 的 Git 存储库将其所有 shell 脚本存储为 .sh 文件。)

    fetch、fetch-pack、fmt-merge-message 等命令都实现为一个相当大的二进制文件。这只是 Git 构建方式的产物,旨在在发行版和运行时节省一点空间(例如,当一个 Git 命令的源代码想要调用 git rev-parse 时,现在或多或少只是一个子例程调用——尽管事实上大部分都变成了一些更漂亮的东西)。但是命令的虚线形式,git-foo,传统上也是可执行的。例如,某些脚本可能仍会运行 git-commit 而不是 git commit

    那么,在过渡期间,Git 包含名为 git-foo 的二进制文件以及内置于一个包罗万象的大型二进制文件中的 git foo。这一切都由主 Makefile 处理:并非像这样全部被库化的命令与那些被库化的命令分开列出。分开的分别安装在ingit-core 目录中,而那些全部变成一大块的则将符号链接安装在git-core 中,以防有人仍在尝试调用用虚线表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2013-03-29
      • 2020-07-22
      • 1970-01-01
      • 2012-04-29
      • 2015-11-14
      相关资源
      最近更新 更多