如何理解git命令的结构?

时间:2018-12-29 10:26:54

标签: linux git command command-line-interface

如何理解git命令的结构?

   git remote add origin repo-url

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

3 个答案:

答案 0 :(得分:5)

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

  • 他们将第一个空格分隔的单词作为命令。其余所有单词都是自变量。

  • 它们执行shell称为glob expansion的操作,因此该程序无需获取例如*.py的程序,而只是将所有.py文件作为单独的参数。

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

(这里不是讨论所有这些详细信息的正确地方-查找您特定Shell的文档,然后阅读,和/或阅读一些Unix或Linux编程环境书。StackOverflow和其他StackExchange站点确实有很多特定的不过,有关特定Shell编程结构的答案。)

在任何情况下,请输入以下命令:

git remote add origin repo-url

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

因此,此时,命令git,其他所有内容均为该命令的参数。但是,git命令本身的作用就像一个微型的非交互式外壳程序:它解释其自变量,例如remote,以确定其中哪个是命令。因此对于Git来说,remote是一个命令,带有参数addoriginrepo-url。 Git在命令前加上git-,然后找到git-remote命令(位于git --exec-path要打印的目录中)并运行带有参数{{ 1}},addorigin(以及第零个参数url)。

因此,在将git-remote命令传递到git命令之后,参数现在仅为git-remoteaddorigin(命令名称url作为第零个参数可用于git-remote

请注意,git-remote命令本身具有(并处理并因此带走了)某些命令选项。例如,运行:

git

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


1 在C语言编程中使用的命名约定之后,该第零个参数通常称为git

答案 1 :(得分:1)

git cli book提供了有关git命令行界面的详细信息。

在您的代码中,git remote是命令,其后是参数。

  

git-remote-管理一组跟踪的存储库

管理要跟踪其分支的存储库(“远程”)集。

您可以通过

查找任何git命令的子命令
git help <git_command>

答案 2 :(得分:-1)

如果您在理解git CLI时遇到困难,可以随时使用git GUI,它也可以正常工作。