GIT--版本控制系统

一.简介

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

  • 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--------------------------
官网给出的很清晰的图片教程,很有用,建议去看看(点我跳转)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容