继续写一篇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,也是origingit checkout master#把bob分支合并到master
git merge bob

 

转载于:https://www.cnblogs.com/gyc567/p/5496868.html

[git]git的基本原理|git branch|git相关推荐

  1. Git详解(2)——Git基础

    文章转载自:http://www.open-open.com/lib/view/open1328069733264.html 版权归原作者. 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的 ...

  2. GIT 学习笔记(2) —— GIT 基础

    基本操作 git init : 初始化工作空间,产生.git目录,用于存放数据及资源. git add filename : 将file添加到被跟踪文件中(即版本控制中):修改后的文件发布新的版本也需 ...

  3. Git详解之二:Git基础

    Git详解之二:Git基础 2012/08/24 | 分类: IT技术, 书籍与教程 | 0 条评论 | 来源: <PRO GIT>     | 标签: GIT, PRO GIT, 版本控 ...

  4. git pull git add git commit git branch git更新代码git提交git分支管理

    常用git命令整理 1. 拉取最新代码 2. 提交代码 3. 分支管理 3.1 查看所有分支(包括本地分支和远程分支) 3.2 查看远程所有分支 3.3 追踪远程分支 4. 强制用远程代码覆盖本地代码 ...

  5. 关于git中,两个branch自动同步的问题和解决

    关于git中,两个branch自动同步的问题和解决 1问题描述 2问题原因 3解决方法 1问题描述 在git中,如果在一个branch中对代码进行了修改,切不做任何操作直接checkout另一个bra ...

  6. git push 出现 The current branch dev has no upstream branch.的问题

    git push 出现 The current branch dev has no upstream branch.的问题 原因:本地分支没有和远程分支关联,导致无法push 解决方法:git pus ...

  7. git的一些简单命令(git clone,git branch,git checkout。。。)

    1.git clone 命令 $ git clone <版本库的网址> 比如,克隆jQuery的版本库. $ git clone https://github.com/jquery/jqu ...

  8. git commit 错误:On branch main Changes not staged for commit:

    当输入git commit 指令时,出现以下错误: 这里的错误提示:分支干管上,未暂存提交的更改:被改进的:README.md,未添加要提交的更改. 解决方法: 1.输入指令 git add . gi ...

  9. Git版本工具系列之一:Git常用命令

    Git基本原理 在这个图中,我们可以看到部分 Git 命令是如何影响工作区和暂存区(stage, index)的. 图中左侧为工作区,右侧为版本库.在版本库中标记为 "index" ...

最新文章

  1. usaco Ordered Fractions 顺序的分数(两种解法)
  2. kvm-桥接模式(二)
  3. 节能信标无线感应定位测试:200kHz
  4. JSP/Servlet 工作原理
  5. PYTHON2.day03
  6. An Introduction to Hashing in the Era of Machine Learning
  7. 操作系统实验报告6:进程间通信—共享内存
  8. Qt5 程序启动画面图片效果
  9. linux模拟http请求命令
  10. MOE 分子动力学模拟操作
  11. 万网空间PHP 伪静态化,disuczx版块URL伪静态目录化设置方法
  12. 质点碰撞和卢瑟福公式
  13. 【视频】离职创业感悟
  14. 计算机老师三年发展规划,信息技术专业教师个人发展三年规划汇总(全).doc
  15. 基于vue 旅游网移动开发
  16. chef infra安装和使用入门
  17. 模拟电子技术实验指导书
  18. 2022年深圳中小学生学位补贴申报时间及对象
  19. mysql怎么查看网站后台帐号密码_mysql怎么查看网站后台帐号密码
  20. 国产芯片------瑞盟MS321/358/324低功耗通用型运放,替代LM321/358/324

热门文章

  1. OpenCV中Kinect的使用(3)
  2. linux init配置文件说明
  3. GDI+ 学习记录(31) 图像颜色变换(TGPImageAttributes)
  4. 我愿意参加Qcon 2010大会,你愿意吗?
  5. 精英赛上线|冠军万元奖金
  6. ​全网首发,TensorFlow 2.0 中文视频教程来啦
  7. 【python教程入门学习】两道关于递归的练习题
  8. 程序员们之间的“鄙视链”,程序员底之间无声的战争
  9. PyTorch | torch.tensor使用方法,如何使用torch.tensor
  10. 【项目实践】:KNN实现手写数字识别(附Python详细代码及注释)