gpt4 book ai didi

linux - 如何理解git命令的结构?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:01 25 4
gpt4 key购买 nike

如何理解git命令的结构?

   git remote add origin repo-url

上面的代码中哪一个是命令,哪个是参数?

最佳答案

在不同的系统上有不同的命令行解释器,因此对于某些细节,操作系统和/或您选择的 shell 很重要。你提到了 Linux(通过 标签),所以我们可能假设你使用的是 bash、dash、fish、zsh,甚至可能是 tcsh 或类似的东西。这些 shell 略有不同,但它们有很多共同点:

  • 他们将第一个以空格分隔的单词视为命令。所有剩余的单词都是参数。

  • 它们执行 shell 调用的操作 glob expansion ,这样程序就不必解释 *.py 了,程序只需将所有 .py 文件作为单独的参数获取即可。

  • 他们执行变量扩展,例如将 $HOME 替换为您的主目录。

(这里不是讨论所有这些细节的好地方——查找特定 shell 的文档并阅读,和/或阅读一些 Unix 或 Linux 编程环境书籍。StackOverflow 和其他 StackExchange 站点确实有很多特定的不过,有关特定 shell 编程结构的答案。)

无论如何,给定命令:

git remote add origin repo-url

shell 的职责是将五个词分解为一个参数向量:gitremoteaddoriginrepo-url。第零个参数 1 是要运行的命令,因此 shell 然后找到该命令(使用 $PATH)并运行它,传递所有参数——包括命令名称本身—命令。

因此,在这一点上,命令git,其他所有内容都是该命令的参数。然而,git 命令本身就像一个微型的、非交互式的 shell:它解释它的参数,例如 remote,以确定其中哪些是命令。所以对于 Git,remote 是一个命令,带有参数 addoriginrepo-url。 Git 在命令前加上 git- 前缀,然后定位 git-remote 命令——它位于 git --exec-path 将要执行的目录中打印——并运行 that,带有参数 addoriginurl(以及第零个参数 git -远程).

因此,通过 git 命令进入 git-remote 命令后,参数现在只是 add, origin url(命令名称 git-remote 可用于 git-remote 作为第零个参数)。

请注意,git 命令本身接受(并处理并因此带走)一些命令选项。例如,运行:

git --work-tree=/tmp hello world

导致 Git 保存工作树设置 /tmp,然后尝试使用参数 world 运行命令 git-hello .您可以编写自己的 Git 命令,例如编写 git-hello 程序:git hello 将运行您的 git-hello 程序。无论如何,此时 --work-tree 参数已从参数列表中消失。 (Git 已将其存储在环境变量 $GIT_WORK_TREE 中。环境变量通过 exec 系统调用传递;exec 是 shell 运行的方式 git 以及 Git 如何运行它的子命令。)


1根据 C 语言编程中使用的命名约定,第零个参数通常称为 argv[0]

关于linux - 如何理解git命令的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53968701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com