美文网首页
GIT--版本控制系统

GIT--版本控制系统

作者: Bigbang_boy | 来源:发表于2017-11-26 15:41 被阅读0次

    一.简介

    我们在学习一样知识的时候,总会问到:

    • 1 . 为什么要学?
    • 2 . 学了有什么好处?
    • 3 . 其他知识能否代替这个?

    我们会发现这些问题在没有大量相关知识的时候是不能立即解决的,所以我们在这方面知识的逐渐掌握中为我们的学习寻找方向。

    前几天在修改别人的GitHub开源项目的时候,总会遇到一个问题:我copy代码A,改成代码B,发现错误,想要改回A,如果文本没有关闭还好,可以直接撤回,可是“撤回”也是有一定的局限性,万一文本关闭了,又得去做那些重复的事情;亦或者建立一大堆副本,



    到最后却把自己搞混了;此时若你的项目同伴也在和你一起做项目,你就需要把项目打包给他,而两人修改期间需要大量的版本交换才知彼此进度和修改内容,实在麻烦。

    如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同伴协作编辑,这样就不用管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?

    版本控制系统(Version Control System)应此而生。其实早在上世纪80年代已经出现了,这里有详细历史发展(点我跳转)。我们的文本保存也算是一种版本控制系统,不过能撤回的范围很有限。

    版本控制系统分为两类,集中式(有CVS、SVN)和分布式(Git),集中式会有一个大大的主机来储存你的代码,每次提交和更改的日志都会直接输送至主机上;分布式则在电脑储存日志和版本,必要的时候可以把代码托管到服务器上,但并非是完全托管,只是方便你和你的合作人交换修改日志,就算不托管在网上,你和你的合作人也可同时管理项目,只是相对麻烦而已。这里可以看到集中式比较依赖主机的性能和维护,在网络不好的时候上传一个项目相当耗时间。

    对于经常修改代码的程序员来说,Git的学习也应是一门必修课。

    二. 安装与使用

    Windows下要使用很多Linux/Unix的工具时,需要很多环境的支持,这里已经有人整合成一个exe,可直接下载(点我跳转)
    安装过程会弹出比较多选项,可直接默认,我们入门只需要使用基础功能即可。安装完毕打开即可。

    主界面
    创建

    Git的所有操作都需要命令来支持。
    在使用Git之前,首要任务是做一些简单的配置,最重要的是用户名及邮箱,打开终端,执行以下命令。

    $ git config --global user.name "My Name" 
    $ git config --global user.email myEmail@example.com
    

    这样Git就知道谁会去操作这个版本库了。

    然后我们需要在本地创建一个版本库:

    //我们需要把项目放进自己喜欢的路径下
    $ mkdir 目录名            //mkdir用来创建一个目录,Git默认的根目录是c/Users/Administrator
    $ cd 目录名              //转至该目录
    $ pwd              //显示当前目录          
    

    建好目录后,通过git init变成Git的本地仓库


    .git是版本仓库,千万不要去改动里边的文件,可能会破坏一些功能比如版本倒退。

    添加文件到版本库

    在介绍如何添加文件之前,需要大家去理解一些概念:


    • Workspace:你的工作目录。真正持有你的文件的地方。
    • Index:暂存区(stage, index),临时保存你准备提交修改文件的地方,是 Git 最重要的概念之一,可以理解成一个"提交任务"。所有文件提交后会先放在stage内,通过status查看改变的内容,再从stage上传到Repository(存库区),完成一个版本的完整添加。
    • Repository: 版本库或者是仓库,英文名Repository,其实啊说白了就是一个目录而且,这个目录中的所以文件都被git管理而且,不管你做什么操作都会被记录,包括:增加、删除、修改文件等,都会被记录下来,以便后来跟踪与修改相关记录,甚至被还原。
    • Remote:远程托管你的项目,使你的同伴和你一起共享进度。

    Git提交一个文件只要两步:
    1 .add
    2 .commit
    先创建一个文本文件,任意编程格式都行,放入你刚刚创建的Git仓库。注意,Git只能识别在它管理的Git目录下的.txt和所有的程序代码,图片和视频格式只能识别修改前后的储存大小。
    内容随意。

    使用命令把文件添加至stage(缓存区)中:

    $ git add 98k.txt
    

    如图,成功加入暂存区后是没有任何提示,所谓没有消息就是好消息。add指令可以多个添加文件到暂存区。

    提交文件到版本库,生成版本号:

    $ git commit -m "Add new weapon"
    

    commit后面是本次提交的说明,能更轻松让你和你的伙伴知道到底修改了什么,这是一个好习惯。
    这样,完成了一个文件的提交。

    status状态的说明

    可以列出当前目录所有还没有被git(git add)管理的文件和被git管理且被修改但还未提交(git commit)的文件.。

    我们先修改一下文本:



    此时使用命令:

    $ git status
    

    可至少知道你修改了文件,但不知道修改了什么

    Changes not staged for commit
    

    表示文件未在缓存区,等待上传中...这时候add文件,再次使用git status


    预备上传中...
    commit后在使用status就不会出现新的状态了。这时候表示版本上传完成,工作区清空(working tree clean)。
    diff指令

    diff(different)用来对比某两次的修改,有以下作用:

    • 查看尚未暂存的文件更新了哪些部分,不加参数直接输入
      git diff
      此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异
      也就是修改之后还没有暂存起来的变化内容。

    • 查看已经暂存起来的文件(staged)和上次提交时的快照之间(Repository)的差异
      git diff --cached
      git diff --staged
      显示的是下一次commit时会提交到Repository的内容(不带-a情况下)

    • 显示工作版本(Working tree)和Repository的差别
      git diff HEAD

    • 直接将两个分支上最新的提交做diff
      git diff topic master 或 git diff topic..master

    • 输出自topic和master分别开发以来,master分支上的changed。
      git diff topic...master

    diff指令是很常用的指令,

    它能告诉你哪个地方做了改动,如图红色字表示被删减的部分



    再如绿色的增加部分。注意,我之前尚未提交(git add)我删减那部分,所以它显示了我上次已经修改但是未提交(git add)到缓存区的修改信息。如上文所述,diff有多个对象对比的指令,需要熟练使用。

    对Git的介绍暂时到这里,下次讲如何使用版本返回和“时光穿梭”,本文会在一周内进行补充。

    本文部分内容参考以下链接:
    廖雪峰--Git教程
    wish123--git diff命令详解

    --------------------------11.27-UPDATA--------------------------
    官网给出的很清晰的图片教程,很有用,建议去看看(点我跳转)

    相关文章

      网友评论

          本文标题:GIT--版本控制系统

          本文链接:https://www.haomeiwen.com/subject/vndkbxtx.html