当前位置: 首页 > article >正文

Git从入门到熟练第十讲 cloning

前言:

上一讲我们了解了git分支合并和合并冲突,这里我们讲解git clone,即从源复制项目到本地,这是我们说明git远程协同合作功能中第一讲(一共四讲)。

课前准备:

https://download.csdn.net/download/qq_17204647/86969196

下载这个资源然后解压,运行文件make_math_repo.sh,在同一目录下会生成math文件夹,本章所有操作围绕这个文件夹展开。

10.1 git clone 复制源项目到本地

在git中,通过git clone克隆到本地的文件依旧和原先仓库保持链接(这也是和复制的区别),因此可以提交(push)和接收(pull)对这个仓库内容的修改。(如下图所示,文件的箭头表示git clone文件和源文件是有关系的)

10.1.1 git clone

git clone source destination_dir   //克隆源文件到目标位置

 其中source可以是URL或者是本地的文件位置,是的,git仓库也支持对本地源文件进行克隆。而我们这一讲的内容都是git对本地文件的克隆。

当我们进入math文件,想要切换到master分支时,发现提醒有错误,因为我们another_fix_branch有修改没有提交,我们可以提交修改或者用stash挂起,这里因为对后面没有啥影响,所以我直接先提交修改。

git commit -a -m "Adding a third variable"
git checkout master

回到上一目录,输入git clone指令

cd ..
git clone math math.clone1

这样我们就能发现目录下多了一个math.clone1文件夹。当然我们也能够通过git GUI实现这个操作,在没有git仓库的目录下,右击,

 选择方框中选项,出现下图

 输入源文件地址和克隆模板地址,也能够进行克隆。

10.1.2 克隆的分支

我们知道克隆的本地文件和源文件有链接,具体是怎么实现的却并不十分清楚,这里我们使用git branch命令来搞清楚git克隆分支是如何与源进行协同的。

首先,我们进入math文件,查看分支,如下图

然后我们进入math.clone1文件,查看分支,如下图

 这个时候,我们也许会有疑问,为什么只有克隆的math.clone1文件只有一个master分支了?难道是git出问题了吗?

其实这是Git克隆的机制,当git克隆时,只会显示你克隆时源文件HEAD指针指向的分支(即如果你克隆时的源文件HEAD指向new_feature分支,那么克隆的本地文件也只会显示new_feature分支,有空可以尝试)

 那么,其他分支难道就无法显示吗?

输入下面命令

git branch --all

结果如下图

 底下显示的三个分支是克隆的远程源文件所有的三个分支,而它们被remotes/origin/保护,说明这些分支有一个名为origin的远程控制追踪。remote指的是克隆端到源文件中间的链接,详细的我会在下一章讲解。

因此,克隆的实际情况如下图

 根据这个图,我们可以更形象的理解,刚刚我们克隆操作,分支的实际情况。除了master分支外,其他分支依旧处于名为origin的远程(remote)中,而本地如何访问这些分支?我会在下一小节介绍。

10.1.3  checking out branches

在git clone时,虽然只会显示克隆时源文件HEAD指针指向的分支,但是git仓库所有的记录都是一起被复制过来的,因此我们可以使用git checkout重建源文件中的所有分支。

git checkout another_fix_branch

输入命令后,我们得到git如下输出

 我们同样通过图来解释这个输出的意思,

 根据图像,我们可以看到,another_fix_branch分支有两个指针,一个是本地的another_fix_branch,另一个则是来自远程源文件的。

实际上,上一个git checkout another_fix_branch是下面命令的简写

git checkout -b another_fix_branch  remotes/origin/another_fix_branch

这表示这里git checkout不单单是切换分支,而是以remotes/origin/another_fix_branch作为分支起点,创建了名为another_fix_branch的新分支。(对这个命令有些疑问的,可以回到第8讲分支创建进行回顾)

对这个概念的理解非常重要,因为如果你理解上面那张图,就可以理解origin是怎么存在于不同用户端,以及不同的人如何对远程源文件协同操作。

10.2  理解并使用裸仓库(bare repository)

在最开始几章中,我们讲解了在指定工作目录下创建git仓库,即隐藏的 .git 文件以及其工作目录。

裸仓库(bare repository)指的是除了git仓库不包含其他工作文件的仓库,可以通过git clone --bare来生成。

cd ..
git clone --bare math math.git             //生成裸仓库

创建裸仓库,我们依旧先来分析图

 git clone --bare是生成裸仓库的命令,因此 math.git 也就是裸仓库。从图中我们可以形象的知道git仓库目录几乎占了裸仓库的所有的空间,没有内存再放下你的工作目录文件。因此你不能对math.git有任何git命令操作,但是你可以克隆这个math.git目录或者向它提交修改。

11.2.1 克隆裸仓库

裸仓库有一个重要的特征,就是它没有指向源仓库(original repository)的指针,是一个完全独立的仓库。

而且它也没有工作目录,所占内存很小,因此我们需要克隆源文件时,常常使用源文件的裸仓库作为正式的仓库分享给其他用户(github 分享的clone链接也都是裸仓库)。

从裸仓库克隆命令如下

git clone math.git math.clone3

 

 比较math.clone1和math.clone3,也可以打开两个文件,可以看出除了HEAD指针指向分支有差别,其他完全是一样的。

下图是不同的用户从math.git克隆,可以看到,git裸仓库克隆后生成的是工作目录+git仓库。

http://www.lryc.cn/news/2415103.html

相关文章:

  • Mac安装brew,支持m芯片,5分钟安装成功亲测有效
  • 浅谈网络共享之samba服务
  • CSS预处理语言~~Less安装与使用
  • Java的byte类型详解
  • ICMP协议与ARP协议
  • unity基础(2)——3D对象基础概念与简单操作
  • 发现数学之美--微积分的起源和用途(一文搞懂微积分)
  • QEMU简介
  • 基于微信PC端小程序抓包方法
  • Hex文件解析
  • 超详细一文到底!软件测试基本流程
  • 富文本编辑器汇总
  • 一篇了解使用springSecurity
  • jar包的概念及作用(二)运行jar包、查看jar包内容
  • 推荐开源项目:NSFW Filter — 图片安全性智能检测库
  • 【机器学习】SGD,SGDM,NAG,Adagard,AdaDelta,RMSpro,Adam原理
  • 【Python/绘图】python绘图
  • [计算机效率] 文件搜索工具:Listary(附详细使用教程)
  • IO的详细介绍
  • CPP/C++学习笔记01
  • Evaluation中Percision和Recall的理解
  • Animation 开源项目教程
  • SonarQube代码质量检查平台
  • 深入理解异或运算 xor 的含义——再探不使用加减乘除实现加法运算、不使用额外空间交换两个变量的值
  • 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?
  • Dev-C++/Cpp使用入门详解
  • Angular简介(大神可略过)
  • Linux shell编程学习笔记69: curl 命令行网络数据传输工具 选项数量雷人(中)...
  • gateWay网关组件及工作原理
  • 一次性搞定!思源字体安装、使用及常见问题解答