• Git 安装与使用(一)


    一、简介

       1.集中式版本控制系统(CVS):Svn
         * 版本库是集中存放在中央服务器中的,客户端需要先从中央服务器取得最新的版本,然后再干活,活干完后,再把自己的代码推送给中央服务器。
            中央服务器就好比是人事局,当你想要修改档案,得先从人事局把档案取出来,修改完,再还回人事局
         * 缺点:
           * 必须有网络才能协同工作,否则单机工作,那就乱套了
           * 当中央服务器出问题了,那所有人都得蒙逼

       2.分布式版本控制系统(DVCS):Git
         * 首先,没有“中央服务器”,每个客户端同时也是一个完整的版本库,这样工作的时候,就不需要联网了
         * 客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢         复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份.
         * 更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的         协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

       3.分布式 VS 集中式
          * 安全性
             分布式:安全性更高,因为每个人电脑都有完整的版本库
             集中式:中央政策没了,企业就蒙逼了
          * 分支管理
            集中式:也有分支管理,但是谁TM会用,谁TM敢用,建立个分支,那个墨迹,可靠性太TM低
            分布式:操作简便,合并快捷,天下武功,唯快不破

    二、原理

        1. 直接记录快照,而非差异比较

            Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而CVS(SVN)类系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数      据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这        次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。

        2.近乎所有操作都是本地执行

        3.时刻保持数据完整性

        4.文件的三种状态

           Git 内都只有三种状态:已提交(committed),已修改(modified)和 已暂存(staged)

           未被Git跟踪的状态为unstage状态; 已经被Git跟踪的状态为stage状态,因此包括staging状态和staged状态

           untrack files是指尚未被git所管理的文件;changed but not updated是指文件被git管理,并且发生了改变,但改动还没被git管理;这两种状态,都可以看成是改动还没被        git管理的状态,我们这里称非stage状态。

           changes to be commited是指进入stage状态的文件,stage是commit和未管理之间的一个状态,也叫index状态,也就是git已经管理了这些改动,但是还没完成提交。
          .gitignore(git忽略文件)中的文件,不会出现在以上三个状态中。

         5.基本的 Git 工作流程如下

            在工作目录中修改某些文件 -> 对修改后的文件进行快照,然后保存到暂存区域 -> 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中

     

    三、安装与配置

           安装就不在叙述了,根据自己的环境进行下载版本安装即可,这里主要讲解一下初次运行 Git 前的配置

           右键 -> Git Bash Here  

           * 注册用户信息

           git config --global user.name "XXX"    

           git config --global user.email "XXX@XXX"   

           git config –-list              #查看用户信息   

          * 文本编辑器(默认会使用操作系统指定的默认编辑器Vi 或者 Vim)
          git config --global core.editor emacs      

          * 差异分析工具
            决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
          git config --global merge.tool vimdiff    

    四、开始使用

          1.创建版本库

             版本库又名仓库(Repository),目录下的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,且还原

             创建一个空目录 —> 变成Git可以管理的仓库

               当前目录中,多了一个.git隐藏文件夹,这个目录是Git来跟踪管理版本库的,别动这个文件夹奥

             

         2.将文件添加到版本库中

            问:微信撩妹分几步走?分两步:找妹儿,加好友(添加到通讯录);点击妹儿头像->发送信息,进入聊天页面(告诉微信,我要开始发消息了)

            将文件从工作区添加到暂存区  ->  把文件提交到本地版本库 

           (为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件

            git add filename 添加单个文件到暂存区

            git add -A  添加当前文件夹下的所有文件

            git status   查看当前操作目录处于哪个分支 和 文件的状态

              

            git commit -m "描述信息"    将暂存区的文件提交到本地版本库

              clean 说明缓存区没有要提交的文件了

        3.时光穿梭机

           * 查看文件哪里变动了       git diff filename

             

          * 提交修改,同新增文件的用法一致(add -> commit)

          * 版本回退

             * 查看历史纪录   git log

               可以看到从最近到最远的提交记录,一大串码是commit id

            * 回退到上一个版本  git reset --hard HEAD^

              

            * 回退错了,我要回到3.0 ,  只要当前窗口没有关闭,因为你可以看见commit id,      git reset --hard commit id

                commit id 没必要写全,前几位就可以了,Git会自动去找

            * 那么问题来了,如果昨天大姨妈,心情不好,思维蒙逼了,回退到了某一个版本,但是今早醒来,疼痛去无踪,后悔回退版本了,咋整呀,别怕,老司机带你飞

               查看操作记录   git reflog

                

        4.管理修改

           * 提交修改

           举个例子, 修改了一个文件,然后add,并未commit,这个文件被提交到暂存区了,然后接着修改该文件,然后直接commit,最后版本区的文件是第一次修改的文件。

           第二次的修改为什么没在版本库中呀,我TM commit了,老妹儿,你说这是为什么呢?

           原因:commit只能将暂存区的文件提交到版本库,因为第二次修改没有add,暂存区中只保留着第一次修改后的文件,因为所以,自然道理

           解决办法: 方式一: 接着上一步, add -> commit

                           方式二: 再修改完第二次后,要先add,这样就将一次与第二次的修改合并了,然后提交到暂存去了。最后在 commit,搞定

           * 撤销修改

              如果不小心修改文件,而多加了一行 “妮,来耍一下子嘛”,咋整呀,被别人看见了咋办,敢自称老司机,自然有办法,

              使用命令    git checkout -- filename

              情况一:还未add , 想丢弃工作区的修改,也就是让工作区恢复到与版本库一致

              

               情况二:已经add , 想丢弃工作区与暂存区的修改

               

     

              情况四:已经add了,然后又修改了东西,想回到add后的状态,去掉后修改的东西

               

               情况四:已经commit了,那就 版本回退 

        5.删除文件

           情况一:未add,直接删除就好了 或者  rm filename

           情况二:已add,未commit 

                    如果直接删除,工作区删除了文件,但是暂缓区不知道工作区删除了文件

                    

                    先恢复一下被删除的文件, git checkout -- filename

                    工作区与暂存区都删除文件  git rm filename  ,然后还得add、commit   

           情况三:已commit

               

            情况四:已push,这里先不讲解,后续再说

                      要分成三步: git rm filename -> git commit -m "" -> git push

          5.远程仓库

            * 创建SSH Key

               第一步:

               ssh-keygen -t rsa -C "281345774@qq.com" , 然后一路回车

               

                id_ras是私钥,不能泄露

                id_rsa.pub是公钥,可以放心告诉任何人

                第二步:登陆github进行设置

                   登陆GitHub,点击右上角的头像 -> 选择settings -> 选择“SSH and GPG keys”页面:

                   点机“new SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:保存

                   

               为什么要用ssh key?

               因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

            * 添加远程库

               在本地已经创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,

               首先,登陆GitHub,然后,在右上角找到“+”按钮,创建一个新的仓库:

                

                   可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联

                   第一步: 关联:  在本地的git_test仓库下运行命令:

          $ git remote add origin git@github.com:xfz1987/git_test.git   后面的地址如途中所示   
     

    第二步: 查看当前关联的远程库:
    git remote -v

                   第三步: 将本地已关联的库的内容推送到远程库中

                   用git push命令,把当前本地分支master推送到远程库中的master分支上

                   由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的                master分支关联起来,在以后的推送或者拉取时就可以简化命令,第一次 clone 或 push 时,会有一个警告,不予理睬,输入 yes 即可

                   此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改

                     git push -u origin master    

                   

                   推送成功后,我们登陆github,就可以看见文件已经被推送至远程库上了

            

             * 从远程库克隆

                git clone githup远程库地址 [本地目录]    - 如果不写目录,默认为当前目录

                

                 

               git的基本使用已经介绍完毕了, 下一篇 开始讲解git 的 分支管理 与 标签管理 及 一些扩展知识

     

        

     

     

     

  • 相关阅读:
    Java8新特性3 Stream
    注解
    Base64编码
    代理
    Cglib
    快照
    Java安全模式
    Hibernet缓存详解
    中文文档
    JDK1.8时间日期函数
  • 原文地址:https://www.cnblogs.com/xfz1987/p/5672883.html
Copyright © 2020-2023  润新知