版本控制是一种记录一个或若干个文件内容变化,以便未来查阅特定版本修订状况的系统。能够对任何类型的文件进行版本控制。java
有了版本控制就能够将某个文件回溯到以前的状态,甚至将整个项目都回退到过去某个时间点的状态。而且能够很清晰对比出修改点,从而找出问题出现的缘由。linux
分类 | 优势 | 缺点 |
---|---|---|
集中式版本控制系统 | * 管理方便,逻辑明确,操做简单,上手快。 * 易于管理,集中式服务器更能保证安全性。 * 代码一致性很是高。 * 有良好的目录级权限控制系统。 |
* 必须联网。若是不能链接到服务器上,基本上不能够工做,若是服务器不能链接上,就不能提交,还原,对比等等。 * 分支的管控方式不灵活 * 对服务器性能要求高,数据库容量常常暴增,体量大。 |
分布式版本控制系统 | * 适合分布式开发,每个个体均可以做为服务器。 * 公共服务器压力和数据量都不会太大。 * 速度快、灵活,分支之间能够任意切换。 * 离线工做,不影响本地代码编写, |
* 学习周期相对而言比较长 * 代码保密性差,一旦开发者把整个库克隆下来就能够彻底公开全部代码和版本信息。 |
Linux 内核项目组当时使用分布式版本控制系统 BitKeeper 来管理和维护代码。可是,后来开发 BitKeeper 的商业公司同 Linux 内核开源社区的合做关系结束,他们收回了 Linux 内核社区无偿使用 BitKeeper 的权力。 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出本身的版本系统,而且对新的版本控制系统作了不少改进。git
Git 与其余版本管理系统最主要的区别就是对待数据的方式。github
大部分版本控制系统(CVS、Subversion、Perforce、Bazaar 等等)都是以文件变动列表的方式存储信息,这类系统将它们保存的信息看做是一组基本文件和每一个文件随时间逐步累积的差别, 而 Git 采用的是直接记录快照的方式 。数据库
Git
有三种状态:windows
由此引入 Git
项目的三个工做区域的概念:安全
1. 在工做目录中修改文件。 2. 暂存文件,将文件的快照放入暂存区域。 3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
yum install -y git
1) 安装 homebrewruby
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2) 安装 git服务器
brew install git
1) 先前往官网 下载安装包
2) 一路安装便可curl
1) 打开命令行工具
2) 配置用户信息
git config --global user.name "你的用户名" git config --global user.email "你的邮箱"
注:--global
选项表示全局应用。
3) 检查配置信息,确认配置成功
git config --list
方式一:在现有目录中初始化仓库
1) 命令行工具进入现有目录 2) 执行 git init 命令
方式二:从服务器克隆一个现有 Git 仓库:
执行 git clon [url] 自定义本地仓库名称
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
若是本地仓库和远程服务器没有链接,须要先创建链接:
git remote add origin serverUrl
将改动推送至远端仓库:
git push origin master
注:分支的概念咱们以后会详细介绍,这么只须要知道 master
表示主分支,能够换成其余你想要的分支。
重命名
git remote rename 原名称 新名称
移除
git remote rm 仓库名称
查看全部的提交记录
git log
查看指定人的提交记录
git log --author=username
查看最近 n 条记录
git log -n
覆盖上次提交(将暂存区的文件提交)
git commit --amend
取消暂存的文件
git reset filename
撤消对文件的修改:
git checkout -- filename
丢弃本地全部更改,以远程仓库为主
git fetch origin git reset --hard origin/master
抓取
git fetch [remote-name]
查看
git remote show [remote-name]
有些命令过长致使咱们操做体验感不好,Git 提供了别名操做可让咱们将长命令转为短小的命令
git config --global alias.短命令 原来命令
例如:
git config --global alias.ci commit
以后咱们只须要使用 git ci
就能够执行提交操做了。
有些命令记不住,能够经过 git help
命令获取帮助。例如,要想得到 config 命令的手册:
git help config
分支:
每一次提交建立的点链接成的线叫作分支。
master 分支:
在 Git 仓库建立的时候就会默认生成的一个 master 分支也叫主分支,其余全部的分支都围绕这个分支作扩展。
子分支:
在 master 分支的基础上建立的分支叫作子分支,它是独立存在的和主分支互不干扰。
指针:
每一根分支中都会有一个指向这个分支的指针,这个指针指向了当前版本库中使用的提交版本,也就是指向分支线上指定的点。master 分支就有一个master指针,其余分支的指针也有对应名称的指针。
HEAD 指针:
指向当前版本库使用的分支指针。
新建分支
git branch 新分支名称
切换分支
git checkout 新分支名称
新建、切换合并命令
git checkout -b 新分支名
切换到主分支
git checkout master
合并分支(可能存在冲突)
git merge 新分支名
查看全部分支
git branch
删除新分支
git branch -d 新分支名称
将分支推送远程仓库
git push origin
在多人协做的时候有一台可靠的公用仓库是一个很是实用的方案。
Git 支持如下几种协议:
关于这几种协议的优缺点大家能够参考 服务器上的 Git - 协议
相比于只是单单在服务器搭建一个 Git 仓库来讲,选择更现代,功能更全的 Git 服务器是一个更好的选择。推荐的几个好用的 Git 服务器:
以上几个 Git 服务器都提供了开源版本,能够在咱们本身的服务器上搭建。
若是不想本身搭建的话,也能够直接采用现成的第三方托管。