博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
了解代码版本控制
阅读量:4090 次
发布时间:2019-05-25

本文共 2943 字,大约阅读时间需要 9 分钟。

发表在

版本控制

版本控制是指能够记录、管理文件或文件集合的内容及其随着时间推移发生的变化的系统。如果你曾经遇到过这样的场景:

  • 不小心修改、删除了某个文件或者文件中某一段重要的内容,尝试使用各种软件、硬件恢复手段进行还原
  • 在工作中(编写文档或ppt、写程序等等),通过“复制-粘贴”、“另存为”等手段在文件夹中维护工作成果(doc、ppt、源代码文件)的多个版本,设置有时还通过时间戳对每一个版本进行命名。看着这些文件,只想保留一个最新版本但又怕之前的内容可能再未来某一天会用上而不敢删除。
  • 需要与他人进行协作,例如共同编辑一份文档、一起编写程序源代码来完成一个项目。在将多人的工作成果合并在一起时,需要借助QQ文件传输、Email或者U盘来合并工作成果(这个过程往往还需要大量的重复),更糟糕的是合并过程中出现了大量的错误冲突,解决它们及其枯燥繁琐并且消耗了你大量的时间和精力。

如果有这样一个软件系统,能够帮助我们记录每一个文件的每一次改动记录,如果我们误删了重要的信息或者需要找回很久以前的某一段内容,能够很容易的得到以前某一个时刻的内容,并且还能够支持大家一起来编辑协作,即使出现冲突也能够在工作过程中很快得到通知(而不是最后大家都写完了,得到了大量的冲突),那可真是一件美好的事情。

版本控制系统就是为了解决这些问题而诞生的,最早开发版本控制系统的程序员,他们将文件的每一次改动记录都存储在计算机本地,如下图所描述:

对于该版本控制系统的用户来说,他永远只会看到版本控制库中某一个版本对应的文件内容。如果他需要找回以前某个版本的内容,只需要在版本控制库中把对应的版本内容给取出来就可以了,就像坐上了可以穿越的时光机一样,再也不用为某个文件被删除之类的问题而提心吊胆了。

集中式版本控制

解决了文件内容版本控制问题以后,人们下一个需要面对的问题是与他人协作。为了告别使用Email、U盘等介质进行传输的古老协作模式,一种“集中式版本控制系统”被开发出来,它的中心思想是把版本控制库移动到一台每一个人都能访问到的“中央服务器”上,每一个协作者只是在自己的计算机上维护某一个版本的内容,一旦修改完成后将新的内容提交到“中央服务器”上形成新的版本,这种模式可以用下图来表示:

在这种集中式版本控制系统的管理下,每一个人只需要连接上“中央服务器”就可以得到任意版本的文件内容并在本地计算机上进行修改,修改完成后结果可以被提交到“中央服务器”上并形成新的版本。(简称SVN)就是一种典型的集中式版本控制系统,直到现在它仍然流行在软件开发世界中。

集中式版本控制系统解决了多人协作的问题,但它仍然有一系列缺陷:

  • 客户端必须在联网状态下(能够访问中央服务器)才能够进行工作。如果“中央服务器”突然无法工作或者无法联网,版本控制系统最基本的操作——保存修改到版本控制库都无法完成,更不用说和他人进行协作了
  • 如果一旦“中央服务器”的磁盘损坏造成数据丢失,整个版本控制库都会有无法找回的风险。当然这也要求我们做好服务器管理和备份的工作。

分布式版本控制

在分布式版本控制系统中,每一台本地计算机上保存的并不仅仅只是某一个版本对应的文件内容,而是包含整个版本控制库的所有数据内容:

这样即时服务器遭遇宕机或者数据丢失,版本控制库的数据还是能够从每一台本地计算机中获得。同时本地计算机不必再需要在联网的状态下进行工作,当你在飞机上你完全可以继续工作,将修改提交到本地的版本控制库中,当能够访问服务器后再将修改进行同步。

另一方面在这种体系结构下,“中央服务器”和“本地计算机”其实在一定程度上是对等的,因为任意一台本地计算机都具有完全替代服务器的能力,而服务器更多的作用则是作为一个协作的“中转站”。在现实情况下,大多数服务器中其实是不会包含“文件”的,仅仅是一个版本控制库来帮助项目中的每一个人进行协作。

Git

历史

Linux内核是一个开源软件项目,开发者遍布世界各地。从1991年诞生,直到2002年软件的演化都是通过patch以及归档文件来完成的。随着项目规模越来越庞大、功能特性越来越多并且很多功能都在同时进行开发,人工管理整个项目的演化过程已经越来越难,所以从2002年开始整个项目采用了一个叫BitKeeper的分布式版本控制系统。到2005年,由于某些原因Linux内核社区和开发BitKeeper软件的商业公司关系破裂,社区不再能够免费使用BitKeeper作为Linux内核项目的版本控制系统。Linux的创始人Linus Torvalds于是自己开始编写一个分布式版本控制系统,取名为Git。一个月后,Linux内核项目的所有源码都通过Git管理起来了!不仅如此,Git已经成为当前世界上最流行的分布式版本控制系统。2008年Github网站上线,为开源项目提供免费的Git代码托管功能,现在已经有数百万的项目在Github上使用Git托管。

安装Git

Windows

在Windows上安装Git需要使用msysGit项目提供的安装包,可以到GitHub的页面上下载exe安装文件并运行:

http://msysgit.github.io/

完成安装之后,就可以使用Windows Command Line来运行git了,但是我们更加推荐使用msysGit提供的Unix风格的shell来运行Git,在Unix风格的shell中,可以使用更多复杂的命令而且不必考虑Windows下空格、路径分隔符等问题。另外msysGit还提供了一个图形界面的 Git 项目管理工具。

使用Unix风格Shell的方法:

Linux

如果要在Linux上安装预编译好的Git二进制安装包,可以直接用系统提供的包管理工具。在Fedora上用yum安装:

$ yum install git-core

在Ubuntu这类Debian体系的操作系统上,可以使用apt-get安装:

$ apt-get install git

Mac

Mac在安装了命令行工具(Command Line Tools)后系统会自带Git。当然也可以通过和等包管理工具来安装:

brew install git

Mac下强烈推荐使用HomeBrew来管理各类开发软件

确认Git安装

Git安装成功后,可以在命令行下输入git --version,如果出现Git的版本号信息则说明Git安装成功

Git配置

开始使用Git的第一件事情是设置你的名字和Email地址。因为Git在记录每一次文件变化时都会使用这些信息,在与他人协作时个人信息也是非常重要的。可以通过命令行进行配置:

$ git config --global user.name "John Smith" $ git config --global user.email "johnsmith@gmail.com"

其中user.nameuser.email后的两个字符串内容,应该替换为你自己的个人信息。--global表示这个配置是一个系统全局配置,也就是说在当前系统中任何地方使用Git都会采用刚才你输入的名字和Email地址。

更多文章请访问

你可能感兴趣的文章
找工作准备的方向(4月22日写的)
查看>>
关于fwrite写入文件后打开查看是乱码的问题
查看>>
用结构体指针前必须要用malloc,不然会出现段错误
查看>>
Linux系统中的美
查看>>
一些实战项目(linux应用层编程,多线程编程,网络编程)
查看>>
原来k8s docker是用go语言写的,和现在所讲的go是一个东西!
查看>>
STM32CubeMX 真的不要太好用
查看>>
不要买铝合金机架的无人机,不耐摔,易变形弯曲。
查看>>
ACfly也是基于FreeRTOS的
查看>>
我发现七月在线的GAAS课程基本都讲到了
查看>>
电机堵转
查看>>
carzepony也在想往FreeRTOS上迁移
查看>>
可以买个好点的电烙铁
查看>>
ACfly调参记录(包括ACfly-F330和ACfly-T265)
查看>>
一定记得每飞几次或者隔一天要把螺丝和浆帽拧一次,确实会松的
查看>>
《多旋翼无人飞行器嵌入式飞控开发指南》里基于FreeRTOS的无人机软件框架
查看>>
思岚A1的SDK其实很好读懂,每个函数清晰明了,可以直接调用
查看>>
串级 PID 为什么外环输出是内环的期望?(和我之前对串级PID的总结一样)
查看>>
我刚刚才完全清楚GPS模块的那根杆子是怎么固定安装好的
查看>>
去github里面找找也没有别人无人机+SLAM的工程
查看>>