zoukankan      html  css  js  c++  java
  • git学习,哇瑟说实话我想要的

    1.
    Git 简介及安装
    Git是目前世界上最先进的分布式版本控制系统(没有之一)。
    它的诞生也颇具传奇,Linux创始人Linus花了两周时间自己用C写了
    一个分布式版本控制系统,这就是Git!有兴趣的话,可查看 Git的诞生
    什么是版本控制?
    版本控制(Revision control)是一种软体工程技巧,
    籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。
    版本控制系统/软件提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,
    是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理活动,
    追踪多个版本的开发和维护活动,及时发布软件。
    常用的版本控制系统/软件有 VSS、CVS、SVN 以及 Git 等。简介详见 百度百科
    什么是分布式?
    分布式版本控制 (DVCS) 是一种不需要中心服务器的管理文件版本的方法,但是它也可以使用中心服务器。
    更改可以被合并到 DVCS 的任何其他用户的系统中,因此可以实现非常灵活的工作流。
    DVCS 的两个主要优点是:它比集中的版本控制更灵活,因为它除了支持传统的(集中式)工作流,
    还支持其他各种工作流;它比集中式服务器快得多,因为大多数操作在客户机本地进行,而不需要网络操作。
    为什么选择 Git ?
    实际上,相对于 CVS、SVN 等主流版本控制软件,
    Git 的学习成本会更高。SVN等的图形操作界面,对于用惯 Windows 系统的用户来说,
    使用和理解上都比较易学。
    而对于 Git 用户,需要理解更多更复杂的概念,包括文件、
    快照、工作树、索引、本地资源库、远程资源库、远程、提交、分支和 Stash 等。
    那相比于 CVS 与 SVN,Git 的优势到底体现在哪里?
    第一,Git 底层自行维护的存储文件系统
    CVS、SVN 底层采用的为增量式文件系统 。
    增量式文件系统的特点是:当文件变动发生提交时,该文件系统存储的是文件的差异信息。
    管理修改
    为什么Git比其他版本控制系统设计得优秀,
    因为Git跟踪并管理的是修改,而非文件。为达成这一目的,
    暂存区存在的意义就在于此。
    此外,先依据 .git/index (暂存区文件)中记录的时间戳、
    长度等信息判断工作区文件是否改变。如果工作区的文件时间戳改变,
    说明文件的内容可能被改变了,需要要打开文件,读取文件内容,
    和更改前的原始文件相比较,判断文件内容是否被更改。
    如果文件内容没有改变,则将该文件新的时间戳记录到 .git/index 文件中。
    因为判断文件是否更改,使用时间戳、文件长度等信息进行比较要比通过文件内容比较要快的多,
    所以 Git 这样的实现方式可以让工作区状态扫描更快速的执行,这也是 Git 高效的因素之一。
    git/index 实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,
    记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,
    而是保存在 Git 对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。
    下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系。
    git checkout -- 1.txt 撤销
    git reset --hard <revision> 
    必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^ ... 
    如上,我们要把当前版本回退到最新版本,就可以使用命令行 git reset --hard ,
    若使用命令行 git reset --hard HEAD^,则回滚为上一版本,此时 git log 仅显示了当前版本及其之前的信息
    命令可输入版本号,前几位即可(通常前7位);显然,若回滚了昨天的版本后,又反悔了的这种情况还是时有发生的
    ,这时,就需要输版本号了;然则,版本号忘了怎么办。。这时,需要另一个命令帮助:
    git reflog  显示操作的日志
    该命令可显示操作日志,且显示了对应的版本号及信息,可查询到之前的版本号并再次回滚,
    如 git reset --hard 6de39b3 。
    Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,
    当你回退版本的时候,Git仅仅是把HEAD指向改变
    分支管理
    几乎每一种版本控制系统都支持分支。使用分支意味着你可以从开发主线上分离开来,然后不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。

      作为优越的版本控制系统,Git 对分支的管理是极其轻便易用的。本文具体说明Git是如何进行分支管理的,如分支的创建、查看、切换、删除等,以及分支的合并及冲突解决。分支对于多人协作是及其重要,内容较多,慢慢来~

    有人把 Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来。Git 有何特别之处呢?Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多一样快。和许多其他版本控制系统不同,Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系。理解分支的概念并熟练运用后,你才会意识到为什么 Git 是一个如此强大而独特的工具,并从此真正改变你的开发方式。



    何谓分支

    分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,
    然后每个猴子(程序猿)做自己的事情互不干涉,等到所有猴子做完之后,
    猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了。
    其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,
    这些版本控制系统创建和切换分支比蜗牛还慢,
    简直让人无法忍受,结果分支功能成了摆设,大家都不去用。
    但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!
    无论你的版本库是1个文件还是1万个文件。
    为了理解 Git 分支的实现方式,我们需要回顾一下 Git 是如何储存数据的。
    或许你还记得第一章的内容,Git 保存的不是文件差异或者变化量,而只是一系列文件快照。
    这就使得 Git分支创建及切换等操作就如拔毛一样迅速。
    创建分支、查看及切换
    在本地仓库操作一章中,可知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。
    只是目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。
    HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,
    所以,HEAD指向的就是当前分支。每次提交,master分支都会向前移动一步,
    这样,随着你不断提交,master分支的线也越来越长。
    冲突解决
    之前的merge即合并分支章节,有提及冲突;现在,来具体说明下冲突的产生及 Git是如何解决冲突的。
    首先,了解下冲突的产生,如在时间节点a,从master上分支出feature1分支,feature1分支上对文件f做了更新,
    此时准备merge至master;如master分支在 a时间节点后已对文件f做了更新并提交;此时,就可能产生冲突。
    git 冲突就收工修改,再合并提交,over

  • 相关阅读:
    redis
    libevent简述
    IPC-本地套接字
    广播和组播
    UDP实现并发服务器
    select
    epoll
    BUUCTF-[极客大挑战 2019]HardSQL 1
    CTFHUB-Injection V2.0
    SQL注入中登录框只验证用户名情况下的绕过
  • 原文地址:https://www.cnblogs.com/Jt00/p/7444273.html
Copyright © 2011-2022 走看看