为什么;“git克隆”;当我能用“我能做同样的事”;git pull“;“之后”;git init“;?

为什么;“git克隆”;当我能用“我能做同样的事”;git pull“;“之后”;git init“;?,git,Git,我已经使用gitinit创建了一个git存储库,并通过使用git remote add origin添加了一个远程repo URLhttps://remote-url 当我使用git branch--set upstream to=origin/master跟踪远程分支,在设置必要的上游分支后执行git pull origin master时(我的本地主分支在执行git checkout master后被设置为跟踪远程主分支),我能够将远程项目分支的所有修订历史记录拉入本地repo 如果我可以用

我已经使用
gitinit
创建了一个git存储库,并通过使用
git remote add origin添加了一个远程repo URLhttps://remote-url

当我使用
git branch--set upstream to=origin/master
跟踪远程分支,在设置必要的上游分支后执行
git pull origin master
时(我的本地主分支在执行
git checkout master
后被设置为跟踪远程主分支),我能够将远程项目分支的所有修订历史记录拉入本地repo


如果我可以用
git pull
很好地做到这一点,那么为什么git提供
git clone
作为一个单独的命令和替代方案呢?它有什么特殊用途吗?或者我一个人做git pull会错过什么吗?

这不是一个不合理的问题。但这一条也是如此:

您可以运行:

git write-tree
git commit-tree -p HEAD -m message <hash-from-git-write-tree>
git branch -f <current-branch> <hash-from-git-commit-tree>
那么为什么我们有一个
gitcommit
命令呢

下面是一个问题:以下哪一个更容易使用


git clone命令实际上相当于运行多达六个命令,其中五个是git命令。git clone中涉及的六个步骤是:

  • mkdir path
    ,创建一个新的空目录,在其中运行
    git init
    。(在特殊情况下跳过此步骤,在这种情况下,您为现有但为空的目录提供
    git clone
    路径名,在这种情况下,它将使用该路径名。)

  • git init
    ,在新目录中创建新的空存储库

  • git remote add remote url
    ,其中
    remote
    来自您的
    git clone
    选项
    -o
    ,或者如果未指定此选项,则为
    origin
    ,并且
    url
    是您在clone命令中指定的

  • 提供给
    git clone
    的选项中的任何其他
    git config
    命令

  • git fetch remote
    ,从git提供的URL获取提交

  • git签出分支
    ,其中
    分支
    是您在
    git clone
    命令中使用
    -b
    选项指定的分支,或者是其他git指定的分支(如果您未指定分支),或者
    主分支
    (如果其他git未指定任何分支)

  • git clone
    命令还处理在此过程中可能发生的各种错误,否则您必须自己处理这些错误


    git pull
    命令相当于在运行第二个git命令之后运行
    git fetch
    。第二个命令通常是
    gitmerge
    ,不过您可以告诉git使用
    gitrebase
    。但是,
    git-pull
    还有一种特殊模式:当您将
    git-pull
    放入一个完全空的存储库时,正如您在问题中所做的那样,它可以作为第二个命令运行
    git-checkout
    ,而不是其他两个命令中的任何一个



    注意:与
    git clone
    不同,在这六个步骤之间很少需要任何东西,使用
    git pull
    时,我通常需要在运行第二个命令之前检查
    git fetch
    获得的提交。因此,我通常完全避免使用
    git pull
    ,因为它迫使我选择第二个命令来运行,并在完成提取步骤后立即运行它,在提取之后,在我选择使用合并还是重新基之前,我想做些其他事情,或者完全是别的什么。

    如果每次你想克隆的时候都需要这些体操,那就太不友好了。
    git commit -m message