Git从入门到熟练第十讲 cloning

这篇具有很好参考价值的文章主要介绍了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文件和源文件是有关系的)

git clone --bare,Git从入门到熟练,git,github

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仓库的目录下,右击,git clone --bare,Git从入门到熟练,git,github

git clone --bare,Git从入门到熟练,git,github

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

git clone --bare,Git从入门到熟练,git,github

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

10.1.2 克隆的分支

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

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

git clone --bare,Git从入门到熟练,git,github

然后我们进入math.clone1文件,查看分支,如下图git clone --bare,Git从入门到熟练,git,github

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

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

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

输入下面命令

git branch --all

结果如下图

git clone --bare,Git从入门到熟练,git,github

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

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

git clone --bare,Git从入门到熟练,git,github

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

10.1.3  checking out branches

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

git checkout another_fix_branch

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

git clone --bare,Git从入门到熟练,git,github

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

git clone --bare,Git从入门到熟练,git,github

 根据图像,我们可以看到,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,Git从入门到熟练,git,github

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

11.2.1 克隆裸仓库

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

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

从裸仓库克隆命令如下

git clone math.git math.clone3

git clone --bare,Git从入门到熟练,git,github

 git clone --bare,Git从入门到熟练,git,github

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

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

git clone --bare,Git从入门到熟练,git,github文章来源地址https://www.toymoban.com/news/detail-640532.html

到了这里,关于Git从入门到熟练第十讲 cloning的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 熟练使用git之git撤回操作

    需要关注持续更新的朋友可以关注下面的链接: git操作合集地址 1、执行了merge但没有commit 2、撤回上次或者上上次提交代码 要撤销上一次提交或上上次提交的代码,有两种常用的方法可以实现: 2.1. 使用 git revert 撤销提交: 撤销上一次提交: git revert HEAD 撤销上上次提交:

    2024年02月12日
    浏览(34)
  • git clone -mirror 和 git clone 的区别

    Git是一款强大的版本控制系统,通过Git可以方便地管理代码的版本和协作开发。在使用Git时,常见的操作之一就是通过 git clone 命令将远程仓库克隆到本地。 本文将讨论 git clone --mirror 和 git clone 两者之间的区别,以及它们在实际使用中的不同场景。 特性 git clone --mirror git c

    2024年02月05日
    浏览(26)
  • 使用Git clone失败 : ‘git clone xxx‘ 一直卡在Cloning in xxx

    使用 \\\'git clone xxx\\\' 一直卡在这个界面不动          在网上搜了很多教程,大多数都是如何加快 clone 的速度,都没能解决问题。最后把 Git 卸载了重新安装,就可以正常 clone 了。         应该是因为我的 Git 版本太老了,很久没有用了。。。换了最新版本立马起飞(所以

    2024年02月11日
    浏览(83)
  • Git——git clone私有仓库

    在clone的时候,在https://后面先加上github-username:github-token,再@项目的链接即可把项目clone下来。 GitHub:加的是token;(Token设置:设置Token) Gitee:加的是password; example: kyrle 是我的用户名 设置密码不用反复输入 http ssh 设置ssh链接:github ssh密钥配置 如果ssh无反应则尝试:

    2024年02月11日
    浏览(50)
  • Git | 如何git clone 历史版本

    首先git clone 最新版本 再通过git checkout id号 可以退回历史版本 可以在提交里面,找到需要版本的id号

    2024年02月02日
    浏览(26)
  • 解决Git Clone失败,浏览器可以访问github项目,但是git clone失败

    记录一次git clone github上的项目,浏览器可以访问,但是git clone失败的处理过程 一,确认是否能ping通 如果不能ping通,先处理ping问题,详见如下链接 Github无法ping通的解决策略 二,clone项目(第4步才成功) 1,git clone https://… 2,改https为git,git clone git://… 3,重置 http.proxy 4,设置

    2024年01月23日
    浏览(51)
  • Git:git clone 之 --recursive 选项

    在git的repo中,可能会有子项目的代码,也就是\\\"git中的git\\\"  --recursive是递归的意思,不仅会git clone当前项目中的代码,也会clone项目中子项目的代码。 我们有时在git clone的时候漏掉 --recursive选项,导致编译无法通过。因为如果没有加 --recursive选项,那么代码库中的一些subpro

    2024年02月08日
    浏览(34)
  • git clone与git pull区别

    从字面意思也可以理解,都是往下拉代码,git clone是克隆,git pull 是拉。 但是,也有区别: 从远程服务器克隆一个一模一样的版本库到本地, 复制的是整个版本库 ,叫做clone.(clone是将一个库复制到你的本地,是一个本地从无到有的过程) 从远程服务器获取到一个branch分支

    2024年02月10日
    浏览(41)
  • git 安装后,右键没有 git clone

    两种方法: 1.   shift + 右键  2.   桌面(或其上级目录,上上级……)显示隐藏文件,把隐藏的 .git 目录删掉。  参考: tortoisegit 安装后没有git clone选项,setting设置也不行_百度知道 TortoiseGit 右键没有 gitClone 和 Setting_Young_Time的博客-CSDN博客_tortoisegit 没有clone

    2024年02月16日
    浏览(53)
  • 猫咪与Git 解决git clone 443问题

    系统配置 Ubuntu 20.04 代理为经典的猫咪logo软件 参考链接 问题描述 打算通过Git Clone一个第三方程序库时出现了下面的错误: 解决方法 首先需要知道代理给我们分配的IP与端口号, 小猫咪分配的是: 127.0.0.1:7890 所以此时需要启动git配置端口号 取消相关设置的命令是: 查看相关的配

    2024年01月25日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包