Git(一):Git与版本控制简介

Intro

版本控制系统是什么

版本控制系统(Version Control System,VCS)可以帮助我们记录和跟踪项目中各文件内容的修改变化。它可以帮我们保存项目的各个版本,以及修改原因,我们可以借用此工具回到项目曾经的某个状态。除此之外,版本控制系统也是帮助人员进行协作开发的利器。

Git是什么

Git是一个分布式版本控制系统(Distributed Version Control System,DVCS)。与传统的集中式版本控制系统(如CVS、Subversion和ClearCase)相比,Git具有以下优势:

  • 分布式体系结构:可以完全断网工作,不受网络连接的限制
  • 分支与合并操作很容易:创建分支简单、经济、快速,这与其他版本控制系统不一样。Git把分支上所有修改合并回父分支,即使多次,也只是一眨眼的功夫
  • 跟Subversion进行交互:Git可以从SubVersion的版本库中导入所有的历史,并把你在Git中的改动发送回Subversion的版本库

版本库

版本库(Repository)是版本控制系统用来存储所有历史数据的地方。大多数版本控制系统在版本库中存储各个文件的当前状态、历史修改时间、谁做的修改、以及修改的原因、还有修改的内容。

常见的版本控制系统可以分为两种类型。一种是集中式版本库(Centralized Repository),所有的程序员都会把他们的改动提交到服务器上的一个公共版本库。具体来说,每一个程序员在本地有一个工作目录树,其内容是该版本库中最新的代码。当他们在工作目录树中完成代码的修改后,就把改动提交回该版本库中。这种方式有一定局限性,在本地工作目录树中,只能看到代码的最新版本。如果想查询历史修改记录,就必须与服务器上的版本库打交道,就必须要使用网络。如果没有网络,也无法记录当前已修改后的项目版本。

另一种就是分布式版本库(Distributed Repository)。使用分布式版本控制系统,在本地就有自己的版本库,所有的历史记录都会记录在本地的版本库中,提交代码的时候不用连接到远程版本库,而是记录在本地的版本库中。git就是这样的一种版本控制系统。那么git是怎样将本地的修改上传到项目的主版本库中的呢?有两种方式:1.
通过push操作直接把修改上传到主版本库。2.生成包含少量修改的补丁包,把补丁包提交给项目维护人员,再由他更新主版本库。

工作目录树

工作目录树是版本库的一个"断面视图"。它包括了开发该项目所需要的全部文件,包括源代码文件、构建文件、单元测试文件等。

在Git中,版本库不在服务器上,而存储在本地工作目录树中的".git"目录中。工作目录树是怎么创建出来的呢?有两种方法。1. 用Git相关的命令初始化版本库,也就是生成".git"目录,于是".git"目录的父目录就成了工作目录树。2. 克隆(Clone)一个已有的版本库,也就连带创建了相应的工作目录树。

克隆一个已有的版本库,就是创建该版本库的一个拷贝,并把版本库中主分支(Master Branch)的内容检出(check out)到工作目录树。在Git中,检出是指把工作目录树更新,并使其内容与版本库中某个特定的历史版本相同。

代码修改与文件同步

代码在修改之后,需要提交(commit)这些改动。每次提交操作都使得版本库中新增一个版本(Revision)。除了记录改动内容本身外,版本库还记录改动的日志信息(log
message)
或称提交留言(commit message),这是代码的变动原因。

我们在开发的过程中,有时需要将本地的改动共享。为此,需要把变动推入(push)上游版本库(upstream repository)。上游版本库是一个公共版本库。

与push相反,我们也应该能够把公共版本库中内容取到本地版本库中来。需要两步操作。第一步,把改动取来(Fetch),把远程版本库中的版本和分支复制到本地版本库中。第二步,在本地版本库中,把从远程版本库里取来的改动与自己本地的改动合并(Merge)。一般来说,取来操作和合并操作总是先后执行的。因此,在Git中可以用一个命令完成这两步操作:拖入(Pull)

标签

标签以一个简单的名称(即标签名)来标记版本库历史中某个特定的点。它可以是一个重要的里程碑,比如对外正式发布的版本;也可以是相对普通的时间点,比如在修复一个缺陷后打个标签。

本质上,标签是一个对于使用者来说易于理解易于记忆的名字,用来标识版本库中一个难读难记的内部版本号,以此帮助使用者跟踪版本历史。

分支

使用分支(branche)可以使你的项目有多条路径可以前进。下图展示了分支原理。主分支(Master Branch)是研发的主线,一些版本控制工具也把主分支称作主干(trunk)

分支非常自由,分支后面可以合并到主分支上,也可以选择不合并。甚至,你也可以把分支看成是另一个主干,别人可以从你的分支上再拉取一个分支。

合并

合并操作会把两条及两条以上的分支合并到一起。Git会比较各分支上的变化,确定变化在哪里发生、哪个文件的哪个位置,当不同的变化发生在文件的不同部分时,Git能够自动合并。但当发生在同一位置时,就会提示冲突,等待人工介入。而合并的所有操作会被Git所记录下来,便于以后能回归(revert)或者查看。

总结

在本章中,介绍了Git中最核心的几个概念:版本库、版本、分支、合并。版本库是项目的相关内容的容器,而版本是项目在每个时刻下的视图。分支、合并则为团队之间的协作提供支持。

时间: 2024-10-19 13:05:31

Git(一):Git与版本控制简介的相关文章

版本控制简介,git使用----使用GitHub托管代码

关于版本控制: 很久以前,人们苦于对写过的代码进行版本的管理,经常过了一段时间想恢复原来写过的代码却又忘了不知道丢到哪儿去了,有的人用加上时间后缀来命名文件的方法,便于后期维护,但是这样做的麻烦也很大,时间一长,自己也会忘了什么时候保存文件是干嘛用的,而且万一自己的电脑坏掉了造成文件丢失,那么先前的努力都要从头再来.于是人们就想能否有好的版本控制系统来控制版本并能方便的回溯. ----下面是从git-scm.com上摘抄过来的一段关于版本控制的说明(关于Git的一本向导书籍,在线网址是http:

转-----在Xcode中使用Git进行源码版本控制

在Xcode中使用Git进行源码版本控制 http://www.cocoachina.com/ios/20140524/8536.html 本文翻译自Understanding Git Source Control in Xcode (译者myShire)欢迎您加入我们的翻译小组. 在应用程序开发过程中,很重要的一部分工作就是如何进行源码的版本控制.当代码出现问题时,我们就需要将代码恢复到原先正常的版本.如果是多个人共同开发一个项目,那么代码的控制就会非常复杂.幸运的是,开发者不需要自己控制这些

Git原理基础(版本控制机制)

Git 基础 那么,简单地说,Git 究竟是怎样的一个系统呢? 请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余. 在开始学习 Git 的时候,请努力分清你对其它版本管理系统的已有认识,如 Subversion 和 Perforce 等:这么做能帮助你使用工具时避免发生混淆. Git 在保存和对待各种信息的时候与其它版本控制系统有很大差异,尽管操作起来的命令形式非常相近,理解这些差异将有助于防止你使用中的困惑. 直接记录快照,而非差异比较 Gi

软件版本控制[0] -> git -> 使用 git 进行版本控制

版本控制 / Version Control 目录 git-版本控制 / git-Version Control git-常用命令 / git-Freq Command git-文件忽略 / git-.gitignore git-自动补全 / git-Auto Completion git-衍合原则 / git-Rebase Principle git-回滚仓库 / git-Reset Repository git-重命名分支 / git-Rename Branch 1 git-版本控制 / g

Git学习01 --git add, git commit , git log ,git status, git reset --hard, head

特点:Git极其强大的分支管理:分布式版本 集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器.中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆.集中式版本控制系统最大的毛病就是必须联网才能工作. 使用Git 1.创建版本库 首先,选择一个合适的地方,创建一个空目录,通过git init命令把这个目录变成Git可以管理

Git Manual / Git使用手册 / Git, GitLab, Git Bash, TortoiseGit

Git使用手册 目录 1     引言 2     Git.GitLab简介 2.1      Git 2.2      GitLab 2.3      Git基本概念 3     运行环境 4     基本操作 4.1      安装Git 4.2      使用GitLab服务器上的帐号 4.2.1      常见页面 4.2.2      设置头像 4.2.3      设置SSH Keys 4.2.4      新建项目 4.2.5      合并请求 4.3      使用Git Ba

[git]git的基本原理|git branch|git

继续写一篇git的文章,介绍下git的历史和基本原理. 介绍下git的历史,据砖家考究,遥想当年,linux的创始人,牛人李纳斯,开发linux用的版本控制工具BitKeeper,出于公益或友好, 是免费的,但是李纳斯手下的几个黑客试图破解BitKeeper的协议,结果被BitKeeper公司发现,就从免费转向收费. 牛人李纳斯一努之下,两周就用C撸了一个新的版本控制系统,这就是Git. 彪悍的牛人,就是这么嚣张! 下面说下它的基本原理:(以下所有内容都可以从它官网得到:https://git-

Git 教程 - Git 基本用法

Git 是当前最流行的版本控制程序之一,文本包含了 Git 的一些基本用法 创建 git 仓库 初始化 git 仓库 mkdir project  # 创建项目目录 cd project  # 进入到项目目录 git init  # 初始化 git 仓库.此命令会在当前目录新建一个 .git 目录,用于存储 git 仓库的相关信息 初始化提交 touch README git add .  # 将当前目录添加到 git 仓库中, 使用 git add -A 则是添加所有改动的文档 git com

git学习——git命令之创建版本库

原文来至 一.创建版本库 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以"还原". 所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit pwd命令用于显示当前目录.在我的Mac上,这个仓库

[批处理教程之Git]001.Git 常用命令大全

基本技巧 1.安装后的第一步 安装git后,第一件事你需要设置你的名字和邮箱,因为每次提交都需要这些信息. $ git config --global user.name "Some One"$ git config --global user.email "[email protected]" 2.是基于指针的 git上的所有东西都是储存在文件里的,当你创建一次提交时,它会创建一个包含你的提交信息和相关数据(名字,邮箱,日期/时间.上一次提交等等) 的文件并连接一