<iOS>git-起步_gvs和git-程序员宅基地

技术标签: iOS-综合  

起步

本章介绍开始使用Git前的相关知识。我们会先了解一些版本控制工具的历史背景,然后试着让Git在你的系统上跑起来,直到最后配置好,可以正常开始开发工作。读完本章,你就会明白为什么Git会如此流行,为什么你应该立即开始使用它。

版本控制

什么是版本控制?我为什么要关心它呢?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。在本书所展示的例子中,我们仅对保存着软件源代码的文本文件作版本控制管理,但实际上,你可以对任何类型的文件进行版本控制。如果你是位图形或网页设计师,可能会需要保存某一副图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能)。采用版本控制系统(VCS)是个明智的选择。有了它你就可以将某个文件追溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。但额外增加的工作量缺微乎其微。

本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单。不过坏处也不少:有时候会混淆所在的工作目录,一旦弄错文件丢失了数据就没法撤销恢复。为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多数是采用某种简单的数据库来记录文件的历次更新差异(如下图)


其中最流行的一种叫作rcs,现在许多计算机系统上都还能看到它的踪影。甚至在流行的Mac OSX系统上安装了开发者工具包之后,也可以使用rcs命令。它的工作原理基本上就是保存并管理文件补丁(patch)。文件补丁是一种特定格式的文本文件,记录着对应文件修改前后的内容变化。所以,根据每次修订后的补丁,rcs可以通过不断打补丁,计算出各个版本的文件内容。

集中化的版本控制系统

接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统(Centraliazed Version Control System,简称CVCS)应运而生。这类系统,诸如GVS,Subversion以及Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法(如下图)


这种做法带来了许多好处,特别是相较于老式的本地VCS来说。现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌握每个开发者的权限,并且管理一个CVCS要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。这么做最显而易见的缺点是中央服务器的单点故障。如果宕机一个小时,那么在这一个小时内,谁都无法提交更新,也就无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,而被客户端偶然取出来的保存在本地的某些快照数据就成了恢复数据的希望。但这样的话依然是个问题,你不能保证所有的数据都已经有人事先完整提取出来过。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

分布式版本控制系统

于是分布式版本控制系统(Distributed Version Control System,简称DVCS)面世了。在这类系统中,像Git,Mercurial,Bazzar以及Darcs等,客户端并不只是提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份(如下图)


更进一步,许多这类系统都可以指定和若干个不同的远端代码仓库进行交互。藉此,你可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而在这以前的集中式系统中无法实现的。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zztBee/article/details/50219705

智能推荐

docker快速入门教程_nvcr.io-程序员宅基地

文章浏览阅读876次,点赞5次,收藏10次。文章目录:1 虚拟机和容器相关概念说明1.1 虚拟机1.2 Linux容器:1.3 Docker 是什么?1.4 Docker 的用途2 docker的安装、添加用户组和启动2.1 docker在不同系统中的安装2.2 验证docker是否安装成功的命令2.3 把docker添加到用户组中2.4 启动docker4 实例:hello-world镜像4.1 查看和删除本地已经有的镜像4.2 删除镜像的时候报错:Error response from daemon: conflict: unable to re_nvcr.io

离散数学与计算机编程(一)-程序员宅基地

文章浏览阅读711次。命题函数 author:misko_leeglobal var:设含有变量的命题是命题函数,记作P(X)(P(X1,X2,Xn))(若无说明,本系列全部以单变量函数为描述方式)。则有:1.∀xP(x)表示该命题论域的合取。2.∃xP(x)表示该命题论域的析取。Content:上面的定理在计算机中的描述可以表示为。ex..._数学与计算机编程

Html5新特性 canvas画板画直线和等比缩放居中裁剪图片_canvas图片放大后居中裁剪-程序员宅基地

文章浏览阅读9.4k次,点赞3次,收藏5次。介绍一下canvas的几种使用方法,画直线和裁剪图片;包含以下两个方面: 1、canvas裁剪图片:h5的这个新特性,我们可以使用canvas进行图片的处理,比如裁剪,等比放大或缩小。比如我们有个360x607宽高的目标图,如果上传图片的宽高都大于目标图,我们对目标图等比压缩,然后在剧中裁剪;如果又一边小于,我们就对上传图片等比放大,让其都满足目标大小,再居中裁剪。 2、canvas标签画多条直线_canvas图片放大后居中裁剪

qt子窗口跟随主窗口进行移动(放大和缩小也实现)_监听父窗口size变化 qt-程序员宅基地

文章浏览阅读7.6k次,点赞10次,收藏46次。子窗口跟随主窗口进行移动,需要获取子窗口相对于父窗口的位置。然后在mousemove 的时候,始终获取相对位置,然后移动子窗口即可。代码:.hprotected: void resizeEvent(QResizeEvent *e); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event);.cpp_监听父窗口size变化 qt

Android ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多_androidtv scrollview+gridview实现上拉加载-程序员宅基地

文章浏览阅读771次。ScrollView 效果ScrollView 说明一个ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新的demo。主要是重写了GridView和LsitView中的onMeasure 方法。写的比较简单,希望对初学者有帮助。[java] view plaincopy_androidtv scrollview+gridview实现上拉加载

Atom - 介绍和使用方法(好用的文本编辑器,代码提示高亮、Markdown)_atom编辑器-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏6次。一,Atom介绍Atom&nbsp;是&nbsp;Github&nbsp;开源的文本编辑器,这个编辑器完全是使用Web技术构建的(基于Node-Webkit)。启动速度快,提供很多常用功能的插件和主题,可以说Atom已经足以胜任“半个IDE”了。个人感觉有如下几个优点:(1)多平台支持(Windows、..._atom编辑器

随便推点

使用递归方式求最大公约数和最小公倍数_递归法求最小公倍数-程序员宅基地

文章浏览阅读2.7k次,点赞6次,收藏7次。#include int gcd (int a,int b){ if(a%b==0) return b; else return gcd(b,a%b);}_递归法求最小公倍数

the security of smart contract- 2-程序员宅基地

文章浏览阅读488次。出处:https://cloud.tencent.com/developer/article/1192548深度解析Solidity的17个坑及超详细避坑指南写的很好,好好学习1. Re-Entrancy重新入口,可重入性本博客the security of smart contract- 1中已经解释过原因,这里用例子说明:pragma solidity ^0.4.23;..._payable函数,依靠claim reward方法名让你误以为领取了0.11eth

不使用第3个变量,实现两个数的对调C/C++_不使用第3个变量,实现两个数的对调-程序员宅基地

文章浏览阅读9.7k次,点赞7次,收藏10次。本关任务:不用第三个变量,实现将两个数进行对调的操作。输入:3 4输出:a=3 b=4a=4 b=3输入:7 85输出:a=7 b=85a=85 b=7#include<stdio.h> int main(void) { int a,b; //Enter a and b: scanf("%d%d",&a,&b); printf("a=%d b=%d\n",a,b); /*********Begin*****_不使用第3个变量,实现两个数的对调

java毕业设计仓库管理系统(附源码、数据库)_java编写仓库管理系统-程序员宅基地

文章浏览阅读419次。Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。Springboot + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。2. 前端:vue+css+javascript+jQuery+easyUI+highcharts。2. 使用IDEA/Eclipse/MyEclipse导入项目,修改配置,运行项目;_java编写仓库管理系统

一篇文章带你搞定 MATLAB 求解方程和方程组_matlab中u(n+1,:)-程序员宅基地

文章浏览阅读1.8w次,点赞15次,收藏85次。文章目录一、solve() 语句符号求解1. 解单变量方程2. 解数值方程3. 解超越方程4. 解方程组二、fsolve() 数值求解:非线性方程三、fzero():解方程组的根四、roots() 语句的用法:求解多项式的根五、求解线性方程组一、solve() 语句符号求解1. 解单变量方程2. 解数值方程>> syms x;>> eqn= x^3-2*x^2 == x-1;>> s = solve(eqn,x)3. 解超越方程并不能得到全部_matlab中u(n+1,:)

自定义ClassLoader动态加载Class_classloader.class-程序员宅基地

文章浏览阅读5.1k次。1、自定义ClassLoader代码如下:package zmx.classloader.test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;_classloader.class

推荐文章

热门文章

相关标签