Git 详解

1.1 关于版本控制

开始之前先看一个没有版本控制的例子

Git 详解_第1张图片

1.1.1 本地版本控制

本地版本控制系统许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的 好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

1.1.2 集中化的版本控制系统

如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。这类系统,诸如 CVS、Subversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

Git 详解_第2张图片

1.1.3 分布式版本控制系统

在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

Git 详解_第3张图片

1.2 Git简介

1190037-20171130170749808-269525315.png

官网:Git

git是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

Git 官方中文手册 Git - Book

1.2.1 Git历史

自2002年开始,林纳斯·托瓦兹决定使用BitKeeper作为Linux内核主要的版本控制系统用以维护代码。因为BitKeeper为专有软件,这个决定在社区中长期遭受质疑。在Linux社区中,特别是理查德·斯托曼与自由软件基金会的成员,主张应该使用开放源代码的软件来作为Linux核心的版本控制系统。林纳斯·托瓦兹曾考虑过采用现成软件作为版本控制系统(例如Monotone),但这些软件都存在一些问题,特别是性能不佳。现成的方案,如CVS的架构,受到林纳斯·托瓦兹的批评。

2005年,安德鲁·垂鸠写了一个简单程序,可以连接BitKeeper的存储库,BitKeeper著作权拥有者拉里·麦沃伊认为安德鲁·垂鸠对BitKeeper内部使用的协议进行逆向工程,决定收回无偿使用BitKeeper的授权。Linux内核开发团队与BitMover公司进行蹉商,但无法解决他们之间的歧见。林纳斯·托瓦兹决定自行开发版本控制系统替代BitKeeper,以十天的时间,编写出第一个git版本

1.3 安装git

1.3.1 环境说明

[root@git ~]# rpm -qa centos-release
centos-release-7-4.1708.el7.centos.x86_64
[root@git ~]# uname -a
Linux gitlab 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@git ~]# getenforce 
Disabled
[root@git ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

本文使用的linux系统均为该系统

本文使用的windows系统为 Microsoft Windows [版本 10.0.15063]

1.3.2 Yum安装Git

centos 自带git

[root@git ~]# rpm -qa git
git-1.8.3.1-11.el7.x86_64

安装方法

[root@git ~]# yum install git -y

1.3.3 编译安装

编译安装可以安装较新版本的git

Git下载地址: Releases · git/git · GitHub

# 安装依赖关系

[root@git ~]# yum install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel autoconf gcc perl-ExtUtils-MakeMaker
# 编译安装 
[root@git ~]# tar -zxf git-2.0.0.tar.gz
[root@git ~]# cd git-2.0.0
[root@git ~]# ./configure --prefix=/usr/local/git # 没有文件可以略过
[root@git ~]# make  
[root@git ~]# make install  

1.4 初次运行 Git 前的配置

1.4.1 配置git

命令集

git config --global user.name "username"  #配置git使用用户
git config --global user.email "[email protected]"  #配置git使用邮箱
git config --global color.ui true  #语法高亮
git config --list # 查看全局配置

配置过程

[root@gitlab ~]# git config --global user.name "newrain"  #配置git使用用户
[root@gitlab ~]# git config --global user.email "[email protected]"  #配置git使用邮箱
[root@gitlab ~]# git config --global color.ui true  #语法高亮
[root@gitlab ~]# git config --list # 查看全局配置
user.name=newrain
[email protected]
color.ui=true

生成的配置文件

[root@gitlab ~]# cd
[root@gitlab ~]# cat .gitconfig 
[user]
        name = newrain
        email = [email protected]
[color]
    ui = true

1.4.2 获取帮助

使用Git时需要获取帮助,有三种方法可以找到Git命令的使用手册:

git help 
git  --help
man git-

例如,要想获得配置命令的手册,执行

git help config

1.5 获取 Git 仓库(初始化仓库)

1.5.1 创建裸库

[root@gitlab ~]# useradd git
[root@gitlab ~]# passwd git
[root@gitlab ~]# mkdir /git-root/
[root@gitlab ~]# cd /git-root/
[root@gitlab git-root]# git init --bare shell.git
Initialized empty Git repository in /git-root/shell.git/
[root@gitlab git-root]# chown -R git:git shell.git

1.5.2 创建本地库

[root@gitlab opt]# ssh-keygen
[root@gitlab opt]# ssh-copy-id [email protected]
[root@gitlab opt]# git clone [email protected]:/git-root/shell.git
[root@gitlab opt]# ls
rh  shell
[root@gitlab opt]# cd shell/
[root@gitlab shell]# vim test1.sh
[root@gitlab shell]# git add test1.sh
[root@gitlab shell]# git commit -m 'first commit'
[master (root-commit) 33c5fbf] first commit
 1 file changed, 2 insertions(+)
 create mode 100644 test1.sh
[root@gitlab shell]# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:/git-root/shell.git
 * [new branch]      master -> master
[root@gitlab shell]# 
[root@git objects]# tree
.
├── 5d
│   └── 0921ada98b7d356699974ca580a3a54dd95590
├── 70
│   └── 8232789ba22b76030c944bea934bfc23da9c3d
├── a0
│   ├── 8d7672007b588ed57414127b845e410eed3af0
│   └── d08fd1a09409e5bba8cc8d079b47ec92e4d4b1
├── a1
│   └── 06dd26e56429e9bc2d624f748b88ce3462dec8
├── bd
│   └── 133c756c8cd6f3c17e49afdb4999a5bbc02c0e
├── info
└── pack
​
#显示文件内容
[root@git objects]# git cat-file -p  5d0921ada
junjiezhenshuai
​
# 显示文件类型
[root@git objects]# git cat-file -t  5d0921ada
blob
​
# 显示文件大小
[root@git objects]# git cat-file -s  5d0921ada
16

1.6 Git命令常规操作

常用命令说明

命令 命令说明
#add 添加文件内容至索引
bisect 通过二分查找定位引入 bug 的变更
#branch 列出、创建或删除分支
#checkout 检出一个分支或路径到工作区
#clone 克隆一个版本库到一个新目录
#commit 记录变更到版本库
#diff 显示提交之间、提交和工作区之间等的差异
fetch 从另外一个版本库下载对象和引用
grep 输出和模式匹配的行
#init 创建一个空的
#log 显示提交日志
#merge 合并两个或更多开发历史
#mv 移动或重命名一个文件、目录或符号链接
#pull 获取并合并另外的版本库或一个本地分支
#push 更新远程引用和相关的对象
rebase 本地提交转移至更新后的上游分支中
#reset 重置当前HEAD到指定状态
#rm 从工作区和索引中删除文件
show 显示各种类型的对象
#status 显示工作区状态
#tag 创建、列出、删除或校验一个GPG签名的 tag 对象

常用操作示意图

Git 详解_第4张图片

文件的状态变化周期

Git 详解_第5张图片

你可能感兴趣的:(elasticsearch,大数据,搜索引擎)