版本控制之Git小结

1、版本控制

1.1 什么是版本控制

版本控制是一种记录一个或若干个文件内容变化,以便未来查阅特定版本修订状况的系统。能够对任何类型的文件进行版本控制。java

1.2 为何须要版本控制

有了版本控制就能够将某个文件回溯到以前的状态,甚至将整个项目都回退到过去某个时间点的状态。而且能够很清晰对比出修改点,从而找出问题出现的缘由。linux

1.3 版本控制分类

分类 优势 缺点
集中式版本控制系统 * 管理方便,逻辑明确,操做简单,上手快。
* 易于管理,集中式服务器更能保证安全性。
* 代码一致性很是高。
* 有良好的目录级权限控制系统。
* 必须联网。若是不能链接到服务器上,基本上不能够工做,若是服务器不能链接上,就不能提交,还原,对比等等。
* 分支的管控方式不灵活
* 对服务器性能要求高,数据库容量常常暴增,体量大。
分布式版本控制系统 * 适合分布式开发,每个个体均可以做为服务器。
* 公共服务器压力和数据量都不会太大。
* 速度快、灵活,分支之间能够任意切换。
* 离线工做,不影响本地代码编写,
* 学习周期相对而言比较长
* 代码保密性差,一旦开发者把整个库克隆下来就能够彻底公开全部代码和版本信息。

2、认识 Git

2.1 Git 简史

Linux 内核项目组当时使用分布式版本控制系统 BitKeeper 来管理和维护代码。可是,后来开发 BitKeeper 的商业公司同 Linux 内核开源社区的合做关系结束,他们收回了 Linux 内核社区无偿使用 BitKeeper 的权力。 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出本身的版本系统,而且对新的版本控制系统作了不少改进。git

2.2 Git 与其余版本管理系统的主要区别

Git 与其余版本管理系统最主要的区别就是对待数据的方式github

大部分版本控制系统(CVS、Subversion、Perforce、Bazaar 等等)都是以文件变动列表的方式存储信息,这类系统将它们保存的信息看做是一组基本文件和每一个文件随时间逐步累积的差别, 而 Git 采用的是直接记录快照的方式数据库

2.3 Git 的三种状态

Git 有三种状态:windows

  • 已提交(committed):数据已经安全的保存在本地数据库中。
  • 已修改(modified):已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存(staged):表示对一个已修改文件的当前版本作了标记,使之包含在下次提交的快照中。

由此引入 Git 项目的三个工做区域的概念:安全

  • Git 仓库(.git directoty)
  • 工做目录(Working Directory)
  • 暂存区域(Staging Area)

2.4 Git 基本工做流程

1. 在工做目录中修改文件。
2. 暂存文件,将文件的快照放入暂存区域。
3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

3、Git 安装

3.1 在 Linux 系统安装

yum install -y git

3.2 在 mac 系统安装

1) 安装 homebrewruby

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2) 安装 git服务器

brew install git

3.3 在 Windows 系统安装

1) 先前往官网 下载安装包
2) 一路安装便可curl

3.4 初次运行 Git 的配置

1) 打开命令行工具
2) 配置用户信息

git config --global user.name  "你的用户名"
git config --global user.email "你的邮箱"

注:--global 选项表示全局应用。

3) 检查配置信息,确认配置成功

git config --list

4、Git 快速入门

4.1 获取 Git 仓库

方式一:在现有目录中初始化仓库

1) 命令行工具进入现有目录
2) 执行 git init 命令

方式二:从服务器克隆一个现有 Git 仓库:

执行 git clon [url] 自定义本地仓库名称

4.2 记录更改到仓库

1) 检查当前目录状态:git status
2) 设置忽略文件: 在 .gitignore 文件中编辑规则
3) 提出更改(将更改内容提交到暂存区)
    * 针对指定文件:   git add filename 
    * 针对全部文件:   git add *
    * 支持通配符形式: git add *.txt
4) 提交更新:    
    git commit -m "本次提交内容"
5) 跳过暂存区更新(该命令下不须要执行 git add 步骤):
    git commit -a -m "本次提交内容"
6) 移除文件(从暂存区移除):
    git rm filename
7) 对文件重命名:
    git mv filename newFilename

4.3 推送更改到远程仓库

  • 若是本地仓库和远程服务器没有链接,须要先创建链接:

    git remote add origin serverUrl
  • 将改动推送至远端仓库:

    git push origin master

    注:分支的概念咱们以后会详细介绍,这么只须要知道 master 表示主分支,能够换成其余你想要的分支。

4.4 远程仓库重命名和移除

  • 重命名

    git remote rename 原名称 新名称
  • 移除

    git remote rm 仓库名称

4.5 查看提交记录

  • 查看全部的提交记录

    git log
  • 查看指定人的提交记录

    git log --author=username
  • 查看最近 n 条记录

    git log -n

4.6 撤消操做

  • 覆盖上次提交(将暂存区的文件提交)

    git commit --amend
  • 取消暂存的文件

    git reset filename
  • 撤消对文件的修改:

    git checkout -- filename
  • 丢弃本地全部更改,以远程仓库为主

    git fetch origin
    git reset --hard origin/master

4.7 其余远程仓库操做

  • 抓取

    git fetch [remote-name]
  • 查看

    git remote show [remote-name]

4.8 别名

有些命令过长致使咱们操做体验感不好,Git 提供了别名操做可让咱们将长命令转为短小的命令

git config --global alias.短命令 原来命令

例如:

git config --global alias.ci commit

以后咱们只须要使用 git ci 就能够执行提交操做了。

4.9 帮助

有些命令记不住,能够经过 git help 命令获取帮助。例如,要想得到 config 命令的手册:

git help config

5、Git 分支

5.1 相关概念

分支:

每一次提交建立的点链接成的线叫作分支。

master 分支:

在 Git 仓库建立的时候就会默认生成的一个 master 分支也叫主分支,其余全部的分支都围绕这个分支作扩展。

子分支:

在 master 分支的基础上建立的分支叫作子分支,它是独立存在的和主分支互不干扰。

指针:

每一根分支中都会有一个指向这个分支的指针,这个指针指向了当前版本库中使用的提交版本,也就是指向分支线上指定的点。master 分支就有一个master指针,其余分支的指针也有对应名称的指针。

HEAD 指针:

指向当前版本库使用的分支指针。

5.2 分支的好处

  • 多人协同工做,互不影响
  • 能够并行开发多个新功能

5.3 分支相关命令

新建分支

git branch 新分支名称

切换分支

git checkout 新分支名称

新建、切换合并命令

git checkout -b 新分支名

切换到主分支

git checkout master

合并分支(可能存在冲突)

git merge 新分支名

查看全部分支

git branch

删除新分支

git branch -d 新分支名称

将分支推送远程仓库

git push origin

6、服务器上的 Git

在多人协做的时候有一台可靠的公用仓库是一个很是实用的方案。

6.1 协议

Git 支持如下几种协议:

  • 本地协议(Local)
  • HTTP 协议
  • SSH(Secure Shell)协议
  • Git 协议

关于这几种协议的优缺点大家能够参考 服务器上的 Git - 协议

6.2 在服务器上架设 Git 仓库

相比于只是单单在服务器搭建一个 Git 仓库来讲,选择更现代,功能更全的 Git 服务器是一个更好的选择。推荐的几个好用的 Git 服务器:

  • GitLab
  • Gogs

以上几个 Git 服务器都提供了开源版本,能够在咱们本身的服务器上搭建。

6.3 第三方托管

若是不想本身搭建的话,也能够直接采用现成的第三方托管。

相关文章
相关标签/搜索