zoukankan      html  css  js  c++  java
  • 玩转git,让git成为个人工作备份利器(即使是电脑小白也推荐学习)

    前言

    不要把这篇文章当做给编程人员的技术文章,即使你对编程一无所知,按照这篇文章的指引一步步学习,仔细模仿,也可以很容易地学会如何去做。更重要的是,这篇文章将让你介绍如何让git成为你的工作日志,成为你的备份工具,成为你的项目管理软件。没错,git让这一切变得如此简单。

    背景

    OK,什么是git? Wikipedia(http://en.wikipedia.org/wiki/Git_(software))告诉我们:“Git (/ɡɪt/) is a distributed revision control system with an emphasis on speed.“ 这是一个分布式版本控制系统。听起来似乎很霸气,那么它是谁开发的呢?这个名字就更霸气了, Linus Torvalds——Linux之父。

    什么叫版本控制系统呢?

    我们来举个例子。比如说,你要写个商业策划书,经过几天熬夜,总算在2012-01-01写了一个初稿 proposal.doc。又经过两天的奋战,你对之前的文档做了更深入的细化,于是把之前的文件改名成了 proposal-2012-01-01.doc 作为备份。后来经过你和老板的激烈讨论,并对文档反复修改,终于在2012-01-09把第7版交给了老板,算是完成了这份工作。回头看看当前的工作文件夹,呵,充满了名为 proposal-2012-01-01.doc,proposal-2012-01-03.doc。。。proposal-2012-01-09.doc 的文件。你不舍得删了它们,顺手打个包压缩下扔进了自己的归档文件夹里,也许永远都不会看它们了;即使半年后想要来参考一下,你也顶多是看看最新版的文件,那些历史版本文件之间的关系恐怕永远也记不起来了。

    这是个很普遍的例子,任何用电脑写过报告的人都会有这种经历。保存某个修改的文件时我们习惯于给较早的版本加个日期(或者其他你感兴趣的方式)做为备份,生怕自己对稍后的某个修改不满意好恢复回去;如果有强迫症,估计你恨不得写一行备份一次——如果你学会了git,恐怕这种强迫症会更加强烈,因为用起来实在是太爽了。这就是一个非常朴素的版本控制系统,你人为的给某个文件加上时间的标记,把编辑的某些里程碑保存下来,方便自己将来查阅、备份、恢复。

    既然我们有这么普遍而强烈的需求,版本控制系统软件自然备受关注,并不断更新升级。从 CVS 到 SVN 再到 GIT,版本控制系统的管理模式从集中向分布演变。git的分布式特点就在于,虽然我们可以有一个最核心的中央服务器来管理所有的文件,你可以在本地生成一个局部的版本控制系统,你的版本历史都可以先在本地保存,直到获得一个满意的版本后,再提交到服务器中。对于个人来说,甚至完全不用理会中央服务器是否存在,自己玩单机版的版本控制就足够了——本文的目的也就在于教会你怎样玩转单机版git。

    准备

    工欲善其事,必先利其器。我们需要的软件很少,只有两个,TortoiseGit(http://code.google.com/p/tortoisegit/downloads/list)和msysgit(http://code.google.com/p/msysgit/downloads/list),前者是与 windows 的资源管理器(linux和mac用户借过一下)整合的git管理软件,后者是git的功能软件。

    安装好TortoiseGit之后,重启电脑,鼠标右键里就会有这几个新的程序,git的相关功能都可以从这里访问到,连开始菜单都不要,是不是很方便?

    (svn是另一个软件,请无视)


    请选择setting,我们需要配置一下git的路径。

    在红框里,我们要设置一下 git 的路径,就是你安装 msysgit的bin文件夹,比如说我的是 F:\software\develop\svn\git\PortableGit-1.7.8-preview20111206\bin,里面会有 git.exe 这个程序。

    如此,我们的环境就配置好了,是不是非常简单?


    实战

    基础知识

    接下来,我们要具体看看git如何成为我们备份的利刃。

    先随便创建一个空白文件夹,作为我们实践的平台。

    进入这个文件夹,鼠标右键选择 “ Git Create repository here...",弹出的对话框不用管,那个复选框不要选,ok即可。这个文件夹里就会出现一个隐藏的 .git 文件夹。如何显示隐藏文件夹?这个请放狗去搜吧。

    ok,一个版本库我们就创建出来了。走到上级目录,你也许会看到,文件加上出现了一个绿色的对勾符号,表示这个文件夹已经受到了版本的控制。(这个图标的出现不一定实时,也许你要多刷新几次,甚至重启电脑才行)

    常见的图标有

     这个文件(夹)很干净,是最新版本文件

    这个文件(夹)发生了修改,需要提交

    这个文件(夹)要添加进版本库

    这个文件(夹)没有在版本库中,需要添加进来(转为上一个图标的状态),或者忽略(转为下一个图标的状态)

    这个文件(夹)被忽略,不受版本控制

    这个文件(夹)里的内容发生冲突(这是最危险的情况,但是对于个人用户来说,几乎不会出现,出现的情况是两个人同时对一个文件做修改,后提交的人在更新时无法与前者完美融合时,这个不需要深入理解)

    通过这么直观的图标暂时,你就能对自己的工作文件夹了如指掌,那些文件做了修改,当前工作是否需要提交,都一目了然。

     版本分支

    在进行更进一步操作时,有必要了解一下版本分支(Branch)的概念。版本分支意味着,你从当前的项目中弄出来一个拷贝,按照自己的想法胡乱修改,你之后的所有版本历史都保存在这个分支里。如果你对这个分支很满意,就可以把这个分支合并到原来的主分支里(Merge),甚至直接让这个分支作为主分支;或者你感觉到越改越糟糕,就直接回到主分支工作,仿佛什么也没有发生一样(当然这个新的分支要通过某些复杂的操作来删除,你也可以留着,作为自己惨痛教训的警钟)。也就是说,分支为你提供了一个尝试某些新道路的空间。

    作为个人用户来说,有一个主分支和一个工作分支就够了。主分支作为基准一直不变,工作都在工作分支上进行,这样主分支与工作分支之间的变化就记录了你的所有工作历史。

    我们来具体实践一下。

    首先,git有个不太人性化的“bug“,不能够添加空白文件夹,因此我们需要先添加一个空白文件,比如 test.txt,然后在文件夹上右键选择 “Git commit"

    选择添加的那个文件,写点message(git每次提交必须写上一些文字说明这次更新的内容,从而让你知道每个版本有什么变化)提交即可

    在刚才的工作文件加上右键,选择 “Create Branch“

     随便取名比如 develop,确定即可。

     依然右键选择 “Show log“,出现如下对话框

     可以看到,我们已经有了一个版本历史,它详细记录了我们的改变。上面有两个颜色标签,红色的master和绿色的develop,这个代表了我们的分支。master是我们第一次提交时系统自动生成的分支;develop是我们手动创建的。红色的代表当前的工作分支,绿色的代表存在的历史分支。我们需要把工作分支切换到 develop。

    在文件夹上右键选择 “Switch/Checkout", Branch里选择develop,再查看历史,我们就会发现,develop变成了红色。

    开始工作

    接下来我们就可以随心所欲的工作了。编辑一下test.txt,新建文件夹,添加word,excel文件,总之,随便工作。你会看到,修改的文件加了红色的叹号,新加为被版本控制的文件加了蓝色的问号,对于蓝色问号,你可以选择右键里的 “Add“让它变成蓝色的加号(或者有时会一步到位变成绿色的对勾,这个不重要),或者不管他。

    然后在根文件上,选择 Commit,再来看看历史,就会发现你的工作记录了

    Commit时会有一个让你输入用户名的问题,这个完全不重要,你随便写个用户名和邮箱即可.

    可以发现,develop进步了一个版本,master还停留在原处。历史显示,test.txt被修改,一个word和excel被添加;文件夹信息不回被记录。

     双击下面的test.txt文件,它甚至会给你展示出这个文件发生了哪些变化。甚至连 excel 和 word 的变化也会给你选择合适的方式进行比较。

    令人震惊吧!没错,git会完全忠实的记录的一点一滴,只要你commit,系统就会为你保存下来一个历史记录(不必担心空间,它会采用很先进的方式进行增量保存,远比你每次都复制要节省空间得多)

    结束语

    差不多已经把如何用git来进行工作的方法介绍完了,还有一个非常重要的功能没有说,怎么样恢复历史版本的文件呢?很简单,在想要恢复的文件上查看历史,选择revert即可!

    即使你完全不懂编程,相信上面的讲解也可以教会你怎么样来使用了吧。赶紧来试试吧!

  • 相关阅读:
    CS229 6.4 Neurons Networks Autoencoders and Sparsity
    CS229 6.3 Neurons Networks Gradient Checking
    【Leetcode】【Easy】Min Stack
    【Leetcode】【Easy】Merge Sorted Array
    【Leetcode】【Easy】ZigZag Conversion
    【Leetcode】【Easy】Valid Palindrome
    【Leetcode】【Easy】Reverse Integer
    【Leetcode】【Easy】Palindrome Number
    【Leetcode】【Easy】Length of Last Word
    【Leetcode】【Easy】Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/dabaopku/p/2316772.html
Copyright © 2011-2022 走看看