在执行mkdir repo
和cd repo
之后,两者之间有何不同:
git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master
和
git clone git://github.com/cmcculloh/repo.git
我的意思是,显然一个更短,但除此之外它们基本上做的是同样的事情吗?
在执行mkdir repo
和cd repo
之后,两者之间有何不同:
git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master
和
git clone git://github.com/cmcculloh/repo.git
我的意思是,显然一个更短,但除此之外它们基本上做的是同样的事情吗?
git clone
是获取现有仓库的本地副本以供开发使用的方式。通常情况下,除非希望在不同位置拥有多个工作副本或在本地副本出现问题后需要获取干净的副本,否则只会使用一次。
git pull
(或 git fetch
+ git merge
) 是从远程仓库获取新提交并将其更新到本地副本的方式。如果你与他人协作开发,则经常需要运行此命令。
正如第一个示例所示,在其他各种 git 命令的帮助下模拟 git clone
是可能的,但实际上 git pull
并不是在 "基本上做着与 git clone
相同的事情"(反之亦然)。
通俗易懂的语言可以这样说:
它们基本相同,除了克隆将设置额外的远程跟踪分支,而不仅仅是主分支。请查看手册页:
将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支(可以使用git branch -r查看),并创建和检出一个初始分支,该分支从克隆存储库的当前活动分支派生。
clone
命令中使用 --single-branch
参数。 - daingit clone
的意思是在你的系统中复制存储库。
git fork
的意思是将存储库复制到您的 Github 帐户。
git pull
的意思是获取最新修改的存储库。
git push
的意思是在修改后返回存储库。
通俗易懂地说:
git clone
是下载,git pull
是刷新。
克隆小姐:我能做你所做的!你只是我的子集。
普尔先生:同样!
克隆小姐: 不,亲爱的,你不需要一个“已检出的分支”...即 git checkout
吗?谁来做呢?当然是我!
拉取先生:哦对了...我需要一个已检出的本地分支来操作。但等等..你默认检出 master
分支。有人在 master 分支上工作吗?没有!你正在交付一个可能从未使用的功能!我让用户决定最好的分支去检出,这就是我的方式!
git fetch <remote> <srcBranch>:<destBranch>
替代git checkout
,除非你想在fetch中使用-s <strategy>
,这是pull中缺少的。
checkout
决定远程跟踪时。但是当你执行git status
或git branch -vv
时,它会显示你是否正在跟踪任何远程分支。基于此,你可以决定是否强制进行远程跟踪。这真的不是Pull先生的错。建议开发人员更多地了解 git checkout
以及跟踪origin的命令。
git clone --single-branch --branch <branch name> <url>
克隆: 将远程服务器的代码库复制到本地机器。
拉取: 获取其他人在本地机器上添加的新更改。
这就是区别。
克隆通常用于获取远程代码库副本。
如果您正在团队中工作,可以使用拉取查看其他团队成员添加的代码。
git clone 用于从远程服务器仓库下载当前正在工作的内容,并将其保存在您机器上项目所在的文件夹中。通常只有在第一次上传项目时才使用它。之后,pull 是更好的选择。
git pull 基本上是一个(clone(下载)+ merge(合并))操作,主要用于团队协作。换句话说,当您想要该项目中的最新更改时,可以进行 pull 操作。
git fetch
命令会将您尚未拥有的服务器上的所有更改获取下来,但它不会修改您的工作目录。它只是为您获取数据并让您自己合并。但是,有一个命令叫做git pull
,在大多数情况下它实质上是一个git fetch
紧接着一个git merge
。git clone <remote-url>
<=>
git init
// 初始化一个新的仓库git remote add origin <remote-url>
// 添加远程仓库git fetch
// 获取所有远程分支git switch <default_branch>
// 切换到默认分支git pull
<=>
git pull <remote> <branch>
<=>