git 常用命令之 clone

大家好,我是 17 。

本文详细介绍 git clone 命令的使用方法和应用场景。

为了讲述方便 git 版本 2.32.1。环境为 linux centos 7。

在讲具体的命令之前,我们需要先看张图,理解了这张图,对于理解后面的命令会有帮助。

主要分三部分:远程仓库(remote),本地仓库(repository)和工作区(workspace)。本地仓库和工作区之间还有一个暂存区(index)。

远程仓库(remote):作用是同步代码。每个成员把自己的代码 push 到远程仓库,再从远程仓库 pull 来更新代码。

本地仓库(repository):做为分布式管理仓库的特点:每个本地仓库都拥有完整的代码和历史记录。保存记录的功能无需要联网,可以先保存在本地。 执行 git commit 就是把代码提交到本地仓库。

工作区(workspace):对应的是本地分支代码,是我们平时写代码的地方。

暂存区(index):暂存区标记了当前工作区中那些内容是被 Git 管理的。git add会把内容加到暂存区。添加到暂存区不会有记录。我们的代码没有完成,可以先暂存,等差不多了,再提交。

建立远程仓库

为了能方便练习,最好能建一个远程仓库。

创建仓库

打开 https://gitee.com/projects/new gitee 的新建仓库页面

输入仓库名称 git-learn,其它的都可以不填,点下面的 “创建” 按钮。

新建成功后显示如下界面

点右边的复制按钮(红框内的图标)把地址复制下来,粘贴到 git clone 后面。

git clone [email protected]:iam17/git-learn.git

首次执行的时候,会问你

Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入 yes 回车,拉取失败了。

fatal: Could not read from remote repository.

因为我们用的是 ssh 方式,所以需要把公钥放到 gitee 上面。

生成公钥很简单,看这个 帮助页面

放好公钥后,再次执行clone 命令

git clone [email protected]:iam17/git-learn.git

warning: You appear to have cloned an empty repository.

输出个 warning,说 clone 了一个空的仓库,这个不用管它,本来就是空的。

你也可以用 github,不过可能会不打开,而且速度可能很慢。

git clone

执行 clone 命令默认会拉取远程仓库的所有内容。

git clone [email protected]:iam17/git-learn.git

clone 命令是一个复合命令,相当于连续执行了下面三个命令。

git remote add origin [email protected]:iam17/git-learn.git
git fetch
git checkout master

首先添加远程仓库 origin

origin 是约定俗成的远程仓库的默认名,没什么特别的含意。如果不满意,可以修改

git remote rename origin bananer 

没有特别的原因,这个名字最好别改。

然后从远程仓库拉取所有代码

所有远程分支在本地是只读的。可以查看已经拉取的远程分支

git branch --remote  或 git branch -r

远程分支存放在位置在

.git/refs/remotes/origin/

最后根据远程默认分支建立本地分支

远程分支是只读的,不能修改。要想在本地修改,需要建立本地分支。clone 命令默认会根据远程默认分支建立本地分支。

  cat .git/refs/remotes/origin/HEAD
  
  输出:ref: refs/remotes/origin/master

确认远程默认分支为 master 后,clone 命令接着建立本地 master 分支,并和远程 master 分支做关联。

clone 命令完成后,我们现在就可以在本地 master 分支修改,提交,最后执行 git push,把 master 分支更新到远程仓库。git push 是省略写法。因为现在只有一个仓库,本地 master 也只有一个远程跟踪分支。完整写法:

git push origin master:master

执行 git push 这个简写命令如果失败,请检查 git 配置 push.default=simple

git 的默认设置就是 simple。 如果没有动过,就不用管它。查看 git 配置:

git config --list

修改远程仓库的其它分支

如果想修改其它远程仓库的其它分支怎么办?很简单,只需要一句命令:

git checkout dev

这个命令完成了两项工作。

  1. 建立本地分支 dev
  2. 本地 dev 跟踪远程 dev

我们在本地分支 dev 下修改,提交,最后执行 git push,把 dev 分支更新到远程仓库的 dev 分支。

git checkout 的分支必须已经 fetch 到本地,否则报错。可能得请先执行 git pull

新建远程仓库没有的分支

如果新建的分支远程仓库里没有,需要先新建本地分支。

# 建立本地分支 feature
git checkout -b feature

# 做修改,提交到本地. git commit ...

# 提交到远程,会在远程新建 feature 分支
git push --set-upstream origin feature 

git push --set-upstream origin feature 有两个作用

  1. 让本地分支 feature 跟踪远程分支 feature。
  2. push feature 到远程,远程仓库如果没有,新建。

你肯定好奇,如果远程仓库有 feature 分支会怎么样?那肯定失败。如果远程仓库有 feature ,请按上面的 “修改远程仓库的其它分支” 的方案执行。

git ls-remote ,这个命令直接访问远程仓库,查看获得远程分支的完整列表。根据这个列表,你就知道是新建还是修改了

按上面的方法来做,无需自己去设置跟踪分支,git 自动给你完成,push 、pull 命令也会简化。虽然在技术可以从一个远程分支 check 出多个本地分支,但在实操上不建议这么做。一个远程分支只 check 一个同名的本地分支。如果有多个任务同时进行,可以从这个本地分支 check 出多个分支。任务完成,所有分支合并到这个唯一本地跟踪分支,由这个分支同步到远程仓库。

clone 整个仓库

clone 命令默认是 clone 整个仓库。虽然有两个参数,可以 clone 部分仓库,--depth--single-branch ,但是对于新手来说,不要用这两个参数。因为设置这两个参数后, 大概率会影响后面的正常使用。收益只是首次 clone 的时候快一些而已,得不偿失。

如果仓库确实需要放很多很大的文件,可以考虑用中央式版本管理系统,比如 svn。

本文到这里就结束了,谢谢观看。

猜你喜欢

转载自blog.csdn.net/m0_55635384/article/details/128964698
今日推荐