• 转玩转git,让git成为个人工作备份利器


    http://www.cnblogs.com/dabaopku/archive/2012/01/09/2316772.html

    前言

    不要把这篇文章当做给编程人员的技术文章,即使你对编程一无所知,按照这篇文章的指引一步步学习,仔细模仿,也可以很容易地学会如何去做。更重要的是,这篇文章将让你介绍如何让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即可!

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

  • 相关阅读:
    javascript运行机制
    ios-scroll 和系统设置overflowscroll后卡顿
    input属性autocomplate背景颜色
    img 的onload事件和complate事件区别
    image图片之间缝隙bug解决方法
    gulp使用指南
    getQueryString
    decodeURI()和decodeURIComponent()函数
    css样式实现水平方向滚动
    I2C
  • 原文地址:https://www.cnblogs.com/kex1n/p/2748870.html
Copyright © 2020-2023  润新知