lsyf8 发表于 2018-9-16 11:01:15

GIT 的安装和基本使用

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 安装
  #yum -y install git
  # git --version
  git version 1.7.1
  # cp /usr/share/doc/git-1.7.1/contrib/completion/git-completion.bash/etc/bash_completion.d/
  # source /etc/bash_completion.d/git-completion.bash
  添加用户和邮箱
  # git config --global user.name "carol"
  # git config --global user.email lijiayi@uplooking.com
  新建存储目录(工作平台)
  # mkdir /myproject
  初始化工作平台
  # git init
  Initialized empty Git repository in /myproject/.git/
  第一次提交文件
  1)先在工作区生成一个文件
  # echo hello >welcome.txt
  # ls
  welcome.txt
  # cat welcome.txt
  hello
  2)为了将这个新建立的文件添加到版本库,需要执行以下指令
  # git add welcome.txt
  # git commit -m "frist"
   frist
  1 files changed, 1 insertions(+), 0 deletions(-)
  create mode 100644 welcome.txt
  1)git diff:用来显示工作区和暂存区文件的差异
  # echo test >>welcome.txt
  # ls
  welcome.txt
  # cat welcome.txt
  hello
  test
  # 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:用来查看改过的内容
  # git status
  #on branch master
  #Changed but not updated:
  #(use "git add ..." to update what will be committed)
  #(use "git checkout -- ..." 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: 用来查看历史提交的日志
  # git log
  commit ff38d0d40f471d840c49d9a1cba007763e5f6efa
  Author: carol
  Date:   Mon Mar 26 13:51:50 2018 +0800
  

frist  

  4)git reset 用来做回滚
  恢复工作区的文件到上一个提交的版本:
  # echo hello daivd >> welcome.txt
  # cat welcome.txt
  hello
  testok
  hello daivd
  # git add welcome.txt
  # git commit -m "six"
   six
  1 files changed, 1 insertions(+), 0 deletions(-)
  # git log --graph--online
  fatal: unrecognized argument: --online
  # git log --graph--oneline


[*]8568164 six
[*]e9c66fd third
[*]ff38d0d frist  # git reset --hard ff38d0d
  HEAD is now at ff38d0d frist
  # ls
  welcome.txt
  # cat welcome.txt
  hello
  5)git reflog用来查看历史记录,可以结合reset完成恢复数据的操作
  # git reflog
  ff38d0d HEAD@{0}: ff38d0d: updating HEAD
  8568164 HEAD@{1}: commit: six
  e9c66fd HEAD@{2}: HEAD@{3}: updating HEAD
  e825d96 HEAD@{3}: commit: second
  e9c66fd HEAD@{4}: e9c66fd: updating HEAD
  8728c6f HEAD@{5}: commit: th4
  e9c66fd HEAD@{6}: commit: third
  ff38d0d HEAD@{7}: HEAD^: updating HEAD
  25bb637 HEAD@{8}: commit: second
  # git reset --hard HEAD@{1}
  HEAD is now at 8568164 six
  # ls
  welcome.txt
  # cat welcome.txt
  hello
  testok
  hello daivd



页: [1]
查看完整版本: GIT 的安装和基本使用