Git使用大全

Git使用大全


1.Git起源

     Git的创始人是Linus Torvalds,当时创建Git的原因是因为要管理庞大的linux内核源码(刚开始使用BitKeeper,由于某种原因最后不能被免费使用了)所以决定开发一套自己的版本控制系统,Linus Torvalds仅仅花了两周时间就完成了Git的第一版,Linuxs对Git的要求是

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持
  • 完全分布式
  • 有能力管理类似Linux内核一样的超大规模项目

2.Git的基本原理

2.1直接记录快照,而非差异比较

      Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。这类系统(CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,下面是其他版本管理工具的做法

此处输入图片的描述

      Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。Git 的工作方式就如下图所示。

此处输入图片的描述

2.2近乎所有操作都是本地执行

      在 Git 中的绝大多数操作都只需要访问本地文件和资源,不用连网。但如果用 CVCS 的话,差不多所有操作都需要连接网络。因为 Git 在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。

      举个例子,如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。如果想要看当前版本的文件和一个月前的版本之间有何差异,Git 会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本地来作比较。

2.3时刻保持数据完整性

      在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。换句话说,不可能在你修改了文件或目录之后,Git 一无所知。这项特性作为 Git 的设计哲学,建在整体架构的最底层。所以如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。

Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串。该字串由 40 个十六进制字符(0-9 及 a-f)组成,看起来就像是:

24b9da6552252987aa493b52f8696cd6d3b00373

Git 的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名

2.4多数操作仅添加数据

      常用的 Git 操作大多仅仅是把数据添加到数据库。因为任何一种不可逆的操作,比如删除数据,都会使回退或重现历史版本变得困难重重。在别的 VCS 中,若还未提交更新,就有可能丢失或者混淆一些修改的内容,但在 Git 里,一旦提交快照之后就完全不用担心丢失数据,特别是养成定期推送到其他仓库的习惯的话

2.5文件的三种状态(重要)

      对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。
1.已提交表示该文件已经被安全地保存在本地数据库中了;
2.已修改表示修改了某个文件,但还没有提交保存;
3.已暂存表示把已修改的文件放在下次提交时要保存的清单中。
由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库

此处输入图片的描述

    Git目录: 每个项目都有一个 Git 目录(如果 git clone 出来的话,就是其中 .git 的目录;如果 git clone –bare 的话,新建的目录本身就是 Git 目录。),它是 Git用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
    暂存区域: 暂存区域只不过是个简单的文件,一般都放在 Git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。

基本的 Git 工作流程如下:
1.在工作目录中修改某些文件。
2.对修改后的文件进行快照,然后保存到暂存区域。
3.提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中

3.Git基本配置(在新的系统上,第一次需要配置一下Git工作环境)

Git提供一种叫做git config的工具来专门配置或者读取配置的环境变量,也是这些环境变量决定了Git在各个环节的具体工作方式和行为,这些变量主要存放在三个地方,分别代表全局通用的配置,该用户的配置,该项目的配置

  • /etc/gitconfig 系统对所以用户都适用的配置,一般使用git config –system就是读写这个文件
  • ~./.gitconfig 用户家目录下的隐藏配置文件,一般使用git config –global配置这个文件
  • 具体项目下的.git/config文件, 针对当前项目有效

下面我们来配置一下我的Ubuntu下的git环境
1.配置name和email

study@ubuntu:/$ git config --global user.name "chenqian"
study@ubuntu:/$ git config --global user.email "1768031241@qq.com"

使用vi查看一下~/.gitconfig,可以看到我们上面配置的name和email写入了配置文件

[user]
        name = chenqian
        emali = 1768031241@qq.com

2.绑定远程仓库
参看码云教程(针对GitHub同样适用):http://git.mydoc.io/?t=154712

4.Git Command

4.1本地命令

git init:    在本地的当前目录里初始化git仓库
git clone address:  从网络上某个地址拷贝仓库(repository)到本地
git status:  查看当前仓库的状态。碰到问题不知道怎么办的时候,可以通过看它给出的提示来解决问题
git diff: 查看当前状态和最新的commit之间不同的地方
git add file: 增加文件到暂存区域
git checkout -- file: 撤销对file文件的操作
git commit -m "info":  把暂存区域的文件进行提交操作,info为保存的信息
git log:  查看当前版本及之前的commit记录
git reflog:   HEAD(分支)的变更记录
git reset --hard 版本号 : 版本回退
git branch name:  添加新的分支名称为name
git checkout name:  切换到name分支
git branch:  查看所有分支
git branch -D name: 删除name分支
git merge otherbranch : 其他分支合并到主分支
git tag: 为当前版本打一个标签

4.2使用远程仓库的命令

如何绑定远程仓库的命令说过了就不在说


//下面的master代表的是本地主分支,可以更改为其他分支
git push origin mster -f //把当前主分支同步上去
git pull origin mster -f //把远程仓库的内容拉下来

4.3GitHub的”Fork+Pull”模式

在这种模式下,项目参与者不必向项目开发者提交申请权限,而是在自己的托管空间建立项目的派生项目,相当于将主仓库的代码复制了一份

总结

  • (1)Fork主仓库得到派生项目
  • (2)通过git clone或者git pull把派生项目的代码拉倒本地
  • (3)修改更新代码
  • (4)通过add和commit提交代码到本地
  • (5)通过git pull从主仓库对应的分支更新代码,如有冲突解决冲突
  • (6)将本地代码提交到派生项目对应的分支中
  • (7)向主仓库发送pull request请求
  • (8)主仓库管理员合并Pull request请求
  • (9)完成一轮合作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值