• [git]git的基本原理|git branch|git


    继续写一篇git的文章,介绍下git的历史和基本原理。

    介绍下git的历史,据砖家考究,遥想当年,linux的创始人,牛人李纳斯,开发linux用的版本控制工具BitKeeper,出于公益或友好, 是免费的,但是李纳斯手下的几个黑客试图破解BitKeeper的协议,结果被BitKeeper公司发现,就从免费转向收费。

    牛人李纳斯一努之下,两周就用C撸了一个新的版本控制系统,这就是Git.

    彪悍的牛人,就是这么嚣张!

    下面说下它的基本原理:(以下所有内容都可以从它官网得到:https://git-scm.com/doc)

    其实git本身是一个文件系统,是一个分布式文件系统,而文件系统中最常见的数据结构也就是一个树,一个多叉树。

    Git 以一种类似 UNIX 文件系统但更简单的方式来存储内容。所有内容以 tree 或 blob 对象存储,其中 tree 对象对应于 UNIX 中的目录,blob 对象则大致对应于 inodes 或文件内容。一个单独的 tree 对象包含一条或多条 tree 记录,每一条记录含有一个指向 blob 或子 tree 对象的 SHA-1 指针,并附有该对象的权限模式 (mode)、类型和文件名信息。

    这是git的文件对象图:

    那么怎么创建origin?

    直接在一个空目录用命令:

    git init

    就自动创建了一个Git仓库.git创建一个仓库后,我们以这个仓库为个中心版本库。在你创建仓库的时候,master 是"默认的"分支。

    这个时候,git在本地创建了几个重要的目录区:

    workspace---->git index--->git repository

    如果这时你相把你现在创建的本地仓库与一个运程的git仓库相连,用什么命令呢?

    用这样的命令:

     git remote add pb https://github.com/paulboone/ticgit
    其中,pb,是这个远程仓库的别名。
    现在你可以在命令行中使用字符串 pb 来代替整个 URL。 例如,如果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch pb
    git fetch pb

    用这个命令,git就会从远程git仓库:

    https://github.com/paulboone/ticgit

    下载最新的代码。git fetch [remote-name]会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。

    如果,你想从远程git仓库直接下载并合并到你的workspace用什么命令呢?

    $ git pull <远程主机名> <远程分支名>:<本地分支名>
    这里,可以用这样的命令:
    git pull pb master:master

    
    
    

    如果,你想从远程git仓库里直接下载或复制一个git仓库,而不是在本地用git init命令创建,可以用类似命令:

     git clone https://github.com/schacon/ticgit
    这样,本地仓库与远程仓库的关系如下图:

    那怎么查看当前目录是否与远程仓库相连呢?

    用命令:

     git remote -v

    如果有另外一个用户B在他的电脑,也clone了相同的git仓库,这时候(我们假设只有两个用户A,B从服务器URL:

    https://github.com/schacon/ticgit

    clone或add到local repository)

    这时候,这几个git仓库应该是这样的:



    我们跟远程的git仓库建立关联关系后,我们在本地电脑修改,修改后怎么提交到远程git仓库呢?

    如果在本地创建了几个C文件,和license文件,用下面三个命令:

    $ git add *.c
    $
    git add LICENSE
    $ git commit -m 'initial project version'
    然后,push到的远程git仓库:

    git push origin master

    现在我们在本地创建了一个git仓库origin,

    我们现在想得到这样的多个分支,如下 :

    那怎么从origin中创建另一个分支bob呢:

    用命令:

    #切换到master分支

    git checkout master

    #创建bob分支

    git branch bob

    用同样的方式创建另一个clair分支

    git branch clair

     这时候,三个仓库是相同的版本树形式分别保存在不同的电脑或服务器里的,如下图:

    所以,这里三个仓库已经是保存了完整的版本信息。
    那么,在本地更新了文件后怎么提交到master服务器里呢?
    用命令:
    #切换到bob分支
    git check bob
    #提交到bob分支
    git commit -a -m "your comments"

    #切换到master,也是origin

    git checkout master
    #把bob分支合并到master git merge bob




     
    本人精通java高并发,DDD,微服务等技术实践,专注java,rust技术栈。 本人姓名郭莹城,坐标深圳,前IBM架构师、咨询师、敏捷开发技术教练,前IBM区块链研究小组成员、十多年架构设计工作经验,《区块链核心技术与应用》作者之一, 现聚焦于:区块链创投与交易所资源对接和技术咨询。 工作微信&QQ:360369487,区块链创投与交易所资源对接,加我注明:博客园+对接,技术咨询和顾问,加我注明:博客园+顾问。想学习golang和rust的同学,也可以加我微信,备注:博客园+golang或博客园+rust,谢谢!
  • 相关阅读:
    Dreamweaver中SourceAnyWhere的使用
    访问被拒绝:“AjaxPro”的解决方案
    NDoc1.3.1使用手册
    程序中操作Excel
    模拟提交程序相关专题
    利用SMTP服务发送电子邮件
    如何使用树形控件
    GDI+简单使用例子
    程序中操作Word
    签名工具使用介绍
  • 原文地址:https://www.cnblogs.com/gyc567/p/5496868.html
Copyright © 2020-2023  润新知