• Git使用初步


     

    1.什么是版本控制

    版本控制(Revision control),也叫版本管理,是一种软件工程技巧,藉以在开发的过程中,确保由不同人所编辑的同一档案都能得到更新,大大方便了多人协作完成同一个工程。版本控制通过文档控制(documentation control)记录工程中每一个模块的改动,并为每次改动编上序号,以此可以方便的查询或者是恢复到以前版本。
     
    2.为什么需要版本控制?
    没有版本管理工具的协助,在开发中我们经常会遇到下面的问题:
    a.无法跟踪文件改动。有人删除或者添加了一个文件时,你很难发现;这种情况也会发现在我们自己身上,有时候误删的事也会有。或者还会有不小心的覆盖等。
    b.解决代码冲突困难。大家同时修改一个公共文件时,解决冲突也是个很头疼的问题。最原始方法是手动打开冲突文件,逐行比较,再手工粘帖复制。
    c.参考a,b。
    此外,还有一个很有诱惑里的用法,你可以一会儿在笔记本上改,一会儿在台式机上改,不用担心,操作的都是同一个文件。有点像云服务,不过不同计算机间同步在分布式的版本控制系统上实现更方便。
     
    3.版本控制系统的发展历史
    a.最原始的方法是为不同的版本新建一个文件夹。ok,亲身经历过不小心把整个文件夹shift+delete的悲剧。后来有种流行的东西叫rcs,通过记录文件的改动来达到版本控制的目的,俺没用过。
    b.集中式版本控制系统。如著名的CVS,SVN等,抱歉,我也就知道这两个。故名思议,集中式版本管理系统就是有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这个服务器,取出最新的文件,修改,上传。当然,如果服务器罢工了,大家可以坐下来喝喝茶聊聊天。
    c.分布式管理系统。可以简单理解为人人都是服务器,其中代表就是我们即将要使用的Git。和SVN的最显著区别是,Git不只是从服务器取最新版本的文件快照,而是把原始的代码仓库完整复制过来。这样,可以用任意一个工作站中的镜像来还原服务器。同时,另一个好处是,两个工作站可以协同修改后再同步到服务器去。
     
    4.常用名词解释
    先介绍用git来管理本地的文件。
    1)init----可以理解为新建一个Git管理项目。
    2)add----添加新的文件(文件夹)到Git项目中,如果添加文件夹,该文件夹下所有文件将被包含。同时可以使用rm,mv从git项目中删除或是重命名文件(文件夹)。
    3)commit----告诉Git你想要记录现在的操作,Git会保留一个当前修改过文件的快照。
    4)reset----如果你正在编辑的文件乱了,可以选择从前面的commit点(假设是a点)重新开始编辑,通常是选择恢复到上一个编辑点。
    5)check out----可以理解为在branch间切换。
    4)branch----唔,所谓branch,可以理解理解为两个子版本,当前版本出现了两个不同分支。
    5)merge----如果我正在编辑一个新版本a,有人在编辑新版本b,我们想把两个版本合成一个,就可以用merge。当然,合的过程中,有时候会检出有哪些地方不一样,询问到底要保留哪一个,需要手动处理不同的地方。事实上,这更像一个审查的过程。
    6)diff----找出两个文档或目录的不同,有个qq游戏叫找茬。
    7)revert----回卷到指定的commit。
     
    然后开始和远处服务器的互动:
    1)clone----从目标服务器得到整个用Git管理项目的拷贝。
    2)pull----类似与SVN中的update动作,如果你N久前clone得到某项目的一份拷贝,用pull可以更新到最新版本。
    3)push----故名思议,把当前的这份拷贝push到服务器。
     
    其他:
    1)working tree:刚check out过来,并未修改的文件。其实也就是你在对哪些文件进行操作。
    2)index(staging area):有修改但是还没有commit的文件,新加进来的文件也在这里。
    3)git directory(repository):修改并commit后,一个文件快照被推送到这里,被保存起来。
     
    5.几个初学比较麻烦的名词
    1)log和status:log是查看commit的历史;而status是查看是否有文件未commit,没有的话,当前的Git project是clean的。
    2)reset和revert:首先,‘reset --hard’到某commit点后,用log查看,该点后所有commit都看不到了,文件被恢复到commit点时的样子;而revert到某commit点之后,用log查看,可以看到多了一个commit点,查看文件内容,被恢复到commit点。还有,必须是project clean时,才能执行revert。
    3)branch和master。这两个之间的关系通常也比较让人头大,master通常都是神秘的。事实上,master也是一个branch,而且默认你是从master开始工作的。但是,怎样知道自己在哪个branch呢?有个神秘变量叫HEAD,它指向的branch就是你现在正在操作的branch,你可以用checkout让HEAD指向名为a,b,c。。。d的任意branch,或者是master。
     
    6.工具不是万能的
    再聪明工具也得正确使用,人才是操作主体。比如:
    1)如果你做的事别人都不感兴趣,那你最好多找几个开放的服务器,把你的的git项目push上去,免得哪天自己电脑罢工了欲哭无泪。
    2)你可以先pull下来服务器上的版本,和本地文件合并branch之后再push上去,这样貌似可以保持服务器上的文件最新。但是你push的时候,别人也可能在push。坐下来聊聊谁该听谁的吧,要不每人保持一个branch往下走?貌似不太现实,合作就没太大意义了吧。
    3)不仅仅是管理代码,如果你愿意,放情书和xx照什么的到Git服务器上去也可以。用途请自由发挥。
     
    7.免费Git服务器
    • http://repo.or.cz/提供自由项目伺服服务,包括本文档(http://repo.or.cz/w/gitmatic.git)。
    • http://gitorious.org 是另一个支持 Git 的开源项目伺服器。(貌似要关了)
    • http://github.com 提供免费的开源项目伺服服务,包括本文档也在其中
    国内的也挺好用:
    git.oschina.net

    8.基本操作

    见另一篇《git使用记录》。

    ——————
    无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
  • 相关阅读:
    君の知らない物語
    2.OSI各层概述
    [ unittest ] 使用初体验
    1.分层结构、协议、接口、服务
    [flask] jinja自定义filter来过滤html标签
    [Flask] Flask问题集(后端模板渲染项目)
    [服务器部署] Flask + virtualenv + uWSGI + Nginx 遇到的问题
    android控件的对齐方式(转)
    AIDL
    歌词的获取
  • 原文地址:https://www.cnblogs.com/pied/p/2444159.html
Copyright © 2020-2023  润新知