一篇文章搞定git

时间:2024-05-20 11:05:02

git学习

一、背景(当成故事去读)

Linus 虽然创建了 Linux,但 Linux 的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为 Linux 编写代码,那 Linux 的代码是如何管理的呢?

  事实是,在 2002 年以前,世界各地的志愿者把源代码文件通过 diff 的方式发给 Linus,然后由 Linus 本人通过手工方式合并代码!

于是 Linus 选择了一个商业的版本控制系统 BitKeeper,BitKeeper 的东家 BitMover 公司出于人道主义精神,授权 Linux 社区免费使用这个版本控制系统。

开发 Samba 的 Andrew 试图破解 BitKeeper 的协议(这么干的其实也不只他一个),被 BitMover 公司发现了,于是 BitMover 公司收回 Linux 社区的免费使用权。

Linus 花了两周时间自己用 C 写了一个分布式版本控制系统,这就是 Git!一个月之内,Linux 系统的源码已经由 Git 管理了!牛是怎么定义的呢?大家可以体会一下。

  Git 迅速成为最流行的分布式版本控制系统,尤其是 2008 年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub,包括 jQuery,PHP,Ruby 等等。

  历史就是这么偶然,如果不是当年 BitMover 公司威胁 Linux 社区,可能现在我们就没有免费而超级好用的 Git 了。

二、是什么?(定义/概念)

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

  • 工作区(Working Directory

    就是你在电脑里能看到的目录,比如上文中的 gafish.github.com 文件夹就是一个工作区

  • 本地版本库(Local Repository

    工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

  • 暂存区(stage

    本地版本库里存了很多东西,其中最重要的就是称为 stage(或者叫index)的暂存区,还有 Git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD

  • 远程版本库(Remote Repository

    一般指的是 Git 服务器上所对应的仓库,github`仓库就是一个远程版本库

  • 工作区暂存区本地版本库远程版本库之间几个常用的 Git 操作流程如下图所示:

    一篇文章搞定git

  • 分支(Branch

    分支是为了将修改记录的整个流程分开存储,让分开的分支不受其它分支的影响,所以在同一个数据库里可以同时进行多个不同的修改

  • 主分支(Master

    前面提到过 masterGit 为我们自动创建的第一个分支,也叫主分支,其它分支开发完成后都要合并到 master

  • 标签(Tag

    标签是用于标记特定的点或提交的历史,通常会用来标记发布版本的名称或版本号(如:publish/0.0.1),虽然标签看起来有点像分支,但打上标签的提交是固定的,不能随意的改动,参见上图中的1.0 / 2.0 / 3.0

  • HEAD

    HEAD 指向的就是当前分支的最新提交

四、怎么样用?(方法)

  • git clone:从服务器拉取代码(克隆)
  • git config:配置开发者用户名和邮箱
  • git branch
    • git branch daily/0.0.0 : 创建分支
    • git branch -m daily/0.0.0 daily/0.0.1 :重命名分支
    • git branch :查看当前项目的分支列表
    • git branch -d daily/0.0.1:删除分支
  • git checkout:切换分支
  • git status:查看文件变动状态
  • git add:添加文件变动到暂存区
  • git commit :提交文件变动到版本库
  • git push:将本地的代码推送到服务器
  • git pull :将服务器上的最新代码拉取到本地
  • git log :查看版本提交记录
  • git tag:为项目标记里程碑

六、特点(优点、合同类型之间的区别)

  • 集中式(CVS、SVN)和分布式(Git)
 集中式版本控制系统:版本集中存放在*服务器,使用的时候先down,改完再提交。(我之前也用SVN,没有网是没办法提交的,局域网效率还好,如果是外网而且网速还不好,那真是shei用shei知道!不要不要的!)

分布式版本控制系统:

        首先,分布式版本控制系统根本没有*服务器,每个电脑上都是完整的版本,如果多人协作开发,只要推送各自的修改就行了。但是人多的话,一般还是会有一台充当*服务器,单纯是为了方便大家修改。

        拥有一个强大的分支管理系统

七、git使用规范

阮一峰: http://www.ruanyifeng.com/blog/2015/08/git-use-process.html

八、git教程(很全很受用)

廖雪峰: https://www.liaoxuefeng.com/wiki/896043488029600/900062620154944