Git的历史及使用精讲

Git

主讲人:王静

目录

  1. Git简史
  2. Git与Svn的区别
  3. Git的使用
  4. Git杂症
  5. 适合我们Git工作流

   

1 Git简史

 

1.1 Git是什么?

  • Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
  • 关于版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统

1.2 Git简史

  • Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上,2002年,整个项目组开始 启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
  • 2005年,bitKeeper与Linux解约,Linux开发了自己的版本系统Git(速度、简单、非线性、 分布、大数据)

1.3 版本管理历史

   

本地版本控制(Local Version Control Systems)

  1. 复制文件(记错、混淆、覆盖文件)
  2. 数据库记录历次更新的差异
  3. 在硬盘上保存补丁集

 

     

集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS SVN)

1)不同操作系统同步代码

2)集中管理版本的服务器,通过客户端请求服务器获取最新的代码,或提交 新的代码

3)好处:项目成员之间可以大致了解彼此都做了什么工作,管理CVCS更容易 一些

 

     

分布式版本控制系统(DVCS Git)

1)Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提 取最新版本的文件快照,而是把代码仓库完整地镜像下来。

2)系统都可指定和若干不同远端代码仓库进行交互。你可以 在同一个项目中,分别和不同工作小组的人相互协作。

 

   

2 svn与git的区别

 

2.1 svn与git的区别

  • 1)git是分布式的,svn是集中式

(Local Repository,即使OffLine也可Commit,查看Log,创建项目分支等操作,等OnLine时 Push到Server端。)

  • 2)git是每个历史版本都存储完整的文件,便于恢复,svn是存储差异文件,恢复比较麻烦, 耗时。
  • 3)svn必须先Update才能Commit,忘记了合并时就会出现一些错误,git可以先提交, push的时候再做更新。
  • 4)若有5个Branch,svn需要复制5个版本的文件到本地,而且每次找版本还要跟之前作比 较;git则只需获取.git的仓库,拉取master分支到本地。(so fast)
  • 5)Branch:svn一人建一个分支,创建到远程仓库里,git则可实行分支开发,开发好再合 并到主干,不影响别人。

常用的svn与git命令对比如下:

svn admin create ——————————> git init

svn co ——————————> git clone

svn update ——————————> git pull

svn add ——————————> git add

svn commit ——————————> git add, git commit

svn status ——————————> git status

svn switch <branch> ————————> git checkout <branch>

svn merge <branch> ————————> git merge <branch>

svn revert <file> ——————————> git checkout <file>

2.2 Git优点

   

  • 1)直接记录快照,而非差异 比较

 

       

  • 2)近乎所有操作都是本地执 行(Local Repository)
  • 3)Git 保证完整性(SHA-1哈 希算法)

 

     

  • 4)Git 一般只添加数据(便于恢复)
  • 5)三种状态:已修改 (modified)、已暂存(staged)和 已提交(committed)(出错可及时 修改)

 

     

  • 6)分布式(Branch开发方 便)

 

   

3 Git的使用

 

3.1 Git安装与配置

  • 配置
  • 1)配置用户信息:
  • $ git config –global user.name “wangjing”
  • $ git config –global user.email “wangjing5@up366.com”
  • 2)创建并配置SSH
  • ssh-keygen -t rsa -C “wangjing5@up366.com” 按3个回车,密码为空
  • 先执行 eval `ssh-agent` 再执行 ssh-add ~/.ssh/rsa(自己的存放路径)成功cd ~/.ssh
  • 在GitLab添加SSH Key,即添加“id_rsa.pub”里面的公钥、
  • Git Gui可以直接Help->Show SSH Key
  • 3)在自己的分组下边找到自己的项目,根据地址拉取(git clone 地址)

Git命令

   

3.2 Svn转Git

  • 将svn项目转成git项目克隆到本地仓库
  • $ git svn clone http://svn.up366.com/svn/up366school/trunk/up366school/src/com/up366/ school/actions/base

3.3 Git基本命令

  • $ git clone https://github.com/libgit2/libgit2
  • $ git init
  • $ git pull
  • $ git add .
  • $ git commit -m ‘initial project version’
  • $ git push
  • $ git status
  • $ git log
  • 图形界面都可以实现
  • 注:项目文件下边右键Git Brash,或IDEA项目下边直接Terminal,都可以直接使用Git命令

3.4 Git .gitignore

.gitignore文件的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
  • 各种版本的忽略规则:https://github.com/github/gitignore

Git高级——TAG

   

  • Tag是一种final类型的指针
  • 为了记录发布的版本
  • 即标签

 

Git高级——分支

   

3.5 Git高级——分支

  • 分支(branch)
  • $ git branch v2
  • $ git rebase v3
  • $ git merge v3
  • 1)新建分支:$ git checkout -b iss53

 

 

  • 2)分支代码改变:

 

 

  • 3)分支合并:$ git merge iss53 (两边都 有提交时先 $ git rebase master)

 

 

4)分支合并完成

 

  • 3.6 实例操作一下
  • 1)创建一个分支new Branch:branch1
  • 2)branch1修改两遍代码,提交两次branch1,2
  • 3)Master上修改一遍代码,提交一次Master1
  • 此操作就相当于,分支一直修改代码,当你想合并时,可以去主分支先拉取一下代码,然 后回来发现主分支有代码提交,可能存在冲突,则进行如下操作:
  • 4)切回到branch1,将主分支的修改Rebase onto自己的branch,可以看到在一条主线
  • 执行rebase操作另一个分支提交的代码将会合并到branch1,2的前边,但是提交时间等不会 变化
  • 5)再回到master,执行Merge操作,就将所有代码合并到主分支了
  • 注:如果分支只是改一个小bug,只进行一或两次提交,可以直接master将两次提交直接 Cherry-Pick过来,提交;如果没有Rebase,直接Merge到master,会出现Merge问题,解决 如下:

Git杂症

 

4.1 Git Merge

 

4.1.1 出现原因

  • 1)提交自己写的代码到本地
  • 2)拉取远程代码到本地
  • 3)造成Merge,及时处理,千万不要直接Push

4.1.2 解决Merge

  • 1)将最后一个版本建立一个分支B
  • 2)回归到主分支master,Reset Current Branch To Here 回退到自己提交代码的上一个别人 提交的版本
  • 3)将B分支自己提交的那个代码Rebase到主分支
  • 4)将GitLab上的远程分支改成unprotected,然后将代码force push到服务器就可以了,删 除分支,变为一条线
  • 注:记得将GitLab上的远程分支的权限再改回protected哦

4.1.3 规避Merge

  • 1)VCS在Commit Changes的之后,不需要再去Update Project,这样本地就会出现Merge
  • 2)直接Push提交到远程,自动会去拉取远程提交的代码,如果有Merge,直接Rebase就好
  • 3)提交到服务器

4. 2 为什么要去解决Git Merge

 

一条线看起来整洁,便于多个项目一同管理,便于查看提交

适合我们的Git工作流

 

5. Git哪种分支更适合我们?

  • 1) master 为 发布分支。
  • 提测后,只能提交测试提出来的bug修改代码。
  • 新加功能,另开分支开发。
  • 2)个人新开功能,新开本地分支,开发完毕后同步到主线分支.
  • 3) 修改底层公用代码,尽早同步完成。同步完通知大家,各分支做内容合并。
  • 4)几个人同时开发新功能,上线时间不确定时,切出来一个分支。该分支只提交与该新功 能有关代码(其他bug不做同步)。完成后将代码同步主分支。

 

Git书籍推荐

 

https://git-scm.com/book/zh/v2

Git书

  使用 Sway 创建

创建和共享交互式报表、演示文稿、个人故事等。

 

本sway地址:https://sway.com/p8D2UphSK1o3Dmdz

 

    原文作者:静待花开*^_^*
    原文地址: https://www.cnblogs.com/wangjinger/p/Git.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞