设为首页 收藏本站
查看: 1119|回复: 0

[经验分享] GIT 的安装和基本使用

[复制链接]

尚未签到

发表于 2018-9-16 11:01:15 | 显示全部楼层 |阅读模式
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 ..." 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: 用来查看历史提交的日志
  [root@Ansible myproject]# git log
  commit ff38d0d40f471d840c49d9a1cba007763e5f6efa
  Author: carol
  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


  • 8568164 six
  • e9c66fd third
  • ff38d0d frist  [root@Ansible myproject]# git reset --hard ff38d0d
      HEAD is now at ff38d0d frist
      [root@Ansible myproject]# ls
      welcome.txt
      [root@Ansible myproject]# cat welcome.txt
      hello
      5)git reflog用来查看历史记录,可以结合reset完成恢复数据的操作
      [root@Ansible myproject]# 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
      [root@Ansible myproject]# git reset --hard HEAD@{1}
      HEAD is now at 8568164 six
      [root@Ansible myproject]# ls
      welcome.txt
      [root@Ansible myproject]# cat welcome.txt
      hello
      testok
      hello daivd




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-584463-1-1.html 上篇帖子: git打tag 下篇帖子: linux服务器上搭建gitolite实现对git server的版本库的权限控制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表