GIT版本控制
一、版本控制的历史及作用
版本控制的作用:
对于IT这个行业来说,经常会遇到一个问题:代码分散的拷贝在各个分区之中,不知道哪个代码文件是最
新的,哪个代码文件是最优的。失败的复制、替换经常会导致原来尚能运行的代码遭到破坏。于是,针对
以上的问题就产生了一种解决方案,这种方案我们成为版本控制。版本控制系统是能够随着时间的推进记
录一系列文件的变化以便于你以后想要的退回到某个版本的系统。
版本控制的历史:
1)CVS:最早期的版本控制工具称为CVS,于1985年由荷兰阿姆斯特丹VU大学的Dick Grune教授完成开
发,奠定了后续版本控制软件的模型基础。CVS采用C/S模型,版本库位于服务端,实际上存储的文件可以
理解为一个RCS容器。每一个RCS文件以‘.v‘作为后缀,保存该文件的每一次更改历史,使得其存储十分有
效。然而CVS也存在如下缺点:1.效率不高,服务端文件越多,处理速度越慢。2.合并困难重重,经常会遇
到严重冲突。3.不能直接对文件和目录的重命名进行版本控制,会破坏数据。
2)SVN:SVN全名为subversion,由collabNet公司于2000年开发,目的是为了弥补CVS的不足,创建一
个性能更加强大的版本控制系统来取代CVS。到了2001年的时候,SVN已经可以用于市场环境。SVN拥有
以下几个特征:1.轻量级拷贝。2.以授权文件的方式来实现版本库的授权。2.在工作区的隐藏目录下会保存
一份冗余的原始拷贝。然而,SVB比起CVS在本质上并没有突破。到2009年年底,SVN被交由APACHE社区
管理,至此svn成为了apache的一个子项目。
3)GIT:GIT由linux之父linus于2005年开发,在结构上比起SVN和CVS有很大的提升。可以说GIT是世界上
目前最优秀的版本控制系统之一。GIT的每个功能都作为一条独立的命令,导致git庞大的命令集,但这并不
妨碍各大程序人员对于GIT的喜爱,原因就在于它一个分布式的版本控制系统。此外:GIT虽然是基于linux
操作系统开发的,但目前已经可以跨平台运行在多种操作系统之上,包括linux,MAC OS X,Windows
等。
版本控制系统的分类:
版本控制主要分为三大类:本地版本控制系统,集中式版本控制系统和分布式版本控制系统。
本地版本控制:将文件的各个版本以一定的数据格式存储在本地的磁盘,这种方式在一定的程度上解决了
手动复制黏贴的问题,但无法解决多人协作的问题。
集中式版本控制:比起本地版本控制多了一个中央服务器,各个版本的数据存储在中央服务器,管理员可
以控制开发人员的权限,而开发人员也可以从中央服务器拉取数据。集中式版本控制解决了团队协作问
题,但缺点是所有数据存储在中央服务器,服务器一旦宕机,会造成不可估量的损失。SVN和CVS都是集中
式版本控制。
分布式版本控制,系统保存的不是文件变化的差两,而是文件的快照。分布式版本控制系统是分布式的,
当你从中央服务器拷贝下来代码时,你拷贝的是一个完整的版本库,包括历史纪录,提交记录等,即使某
一台机器宕机,也能够找到文件的完整备份。GIT就是分布式版本控制。
二、git 安装
[root@Ansible ~]#yum -y install git
[root@Ansible ~]# git --version
git version 1.7.1
[root@Ansible ~]# cp /usr/share/doc/git-1.7.1/contrib/completion/git-completion.bash /etc/bash_completion.d/
[root@Ansible ~]# source /etc/bash_completion.d/git-completion.bash
添加用户和邮箱
[root@Ansible ~]# git config --global user.name "carol"
[root@Ansible ~]# git config --global user.email lijiayi@uplooking.com
新建存储目录(工作平台)
[root@Ansible /]# mkdir /myproject
初始化工作平台
[root@Ansible myproject]# git init
Initialized empty Git repository in /myproject/.git/
第一次提交文件
1)先在工作区生成一个文件
[root@Ansible myproject]# echo hello >welcome.txt
[root@Ansible myproject]# ls
welcome.txt
[root@Ansible myproject]# cat welcome.txt
hello
2)为了将这个新建立的文件添加到版本库,需要执行以下指令
[root@Ansible myproject]# git add welcome.txt
[root@Ansible myproject]# git commit -m "frist"
[master (root-commit) ff38d0d] frist
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 welcome.txt
1)git diff:用来显示工作区和暂存区文件的差异
[root@Ansible myproject]# echo test >>welcome.txt
[root@Ansible myproject]# ls
welcome.txt
[root@Ansible myproject]# cat welcome.txt
hello
test
[root@Ansible myproject]# git diff welcome.txt
diff --git a/welcome.txt b/welcome.txt
index ce01362..b2b9cc9 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,2 @@
hello
+test
2)git status:用来查看改过的内容
[root@Ansible myproject]# git status
#on branch master
#Changed but not updated:
#(use "git add <file>..." to update what will be committed)
#(use "git checkout -- <file>..." to discard changes in working directory)
#modified: welcome.txt
#no changes added to commit (use "git add" and/or "git commit -a")
3)git log: 用来查看历史提交的日志
[root@Ansible myproject]# git log
commit ff38d0d40f471d840c49d9a1cba007763e5f6efa
Author: carol <lijiayi@uplooking.com>
Date: Mon Mar 26 13:51:50 2018 +0800
frist
4)git reset 用来做回滚
恢复工作区的文件到上一个提交的版本:
[root@Ansible myproject]# echo hello daivd >> welcome.txt
[root@Ansible myproject]# cat welcome.txt
hello
testok
hello daivd
[root@Ansible myproject]# git add welcome.txt
[root@Ansible myproject]# git commit -m "six"
[master 8568164] six
1 files changed, 1 insertions(+), 0 deletions(-)
[root@Ansible myproject]# git log --graph --online
fatal: unrecognized argument: --online
[root@Ansible myproject]# git log --graph --oneline
原文地址:http://blog.51cto.com/hwg1227/2092978