版本控制
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一 (百度百科
就是说,在完成一件事的时候,往往很难一次就做到最好,需要不停的修改迭代,直到最终达到预期的效果。

通常可以对这些文件进行标号,然后放在指定的区域中,在对当前版本进行修改的时候,需要进行备份,防止我们在修改之后,发现效果还不如没有修改之前的版本,这时候万一在之前的版本上进行修改,但是又没有进行备份,就只能哭晕在厕所了。。
实际中,版本控制的主要作用有以下几个:
- 多人协同开发
- 并行开发,提高开发效率
- 跟踪记录软件开发的整个过程
- 追踪和记载一个或者多个文件的历史记录
- 统计工作量
常见的版本控制器:
- Git
- SVN
- CVS
版本控制的分类
- 本地版本控制
在本地记录每次的更新,对每个版本做一个快照,只适合在自己的主机中使用

- 集中版本控制
就是说,所有的版本信息都保存在指定的服务器中,在开发的时候,只需要从服务器中同步更新,或者上传自己的修改

在集中版本控制时,我们都访问同一个远程仓库,开发的时候先拉取最新的版本,修改之后再进行提交。
这个时候,如果多个人同时对一个区域进行修改,当第二个人提交的时候,就会出现版本不一致的情况,这个时候就需要自己重新更新一下自己的版本,然后再提交
这样做的话,有一个很大的问题,就是如果服务器突然坏了,那么服务器中的代码就可能会丢失,后果还是比较严重的。
还有就是,在没有网络的情况下,我们的开发只能停留在当前版本,而无法从服务器中获取其他版本的信息进行开发
- 分布式版本控制
就是说在我们的本地中,也可以存有所有版本信息,就可以在本地查看所有的历史版本。
可以离线在本地进行修改,然后同步到本地的仓库,只需要在提交的时候,因为需要Push到远端的仓库,所以需要连接一下网络

所以说,在分布式版本管理中,由于每个用户本地中都保存有历史的版本信息,那么只有有一个用户的设备没有问题,就可以恢复所有的版本数据,就是比较占用本地的存储空间
不会出现因为服务器损坏,或者网络的原因,而不能工作的问题
Git与SVN的区别
SVN是集中时版本控制系统,所有的版本信息存放在中央服务器。工作时需要从中央服务器总得到最新的版本,完成工作后再进行推送,整个过程必须联网
Git是分布式版本管理系统,没有中央服务器,每个人的电脑就是一个完整的版本库,可以离线工作,只需要完成时再推送修改。
Git 的历史
首先,Git是目前世界上最先进的一个分布式版本控制系统
他的诞生也是非常传奇,他的创始人-“Linus Torvalds”,也是Linux的创始人。一开始的时候,他通过手工的方式,维护Linux中的代码,最后由于代码库越来越庞大,就选择了一个商业的版本控制系统BitKeeper。
一开始是免费使用,但是在2005年的时候,由于一些特殊的原因,BitKeeper开发商决定不再免费给Linux社区使用,然后Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!(牛
然后在一个月内,应用在了Linux内核中

Git 的原理
Git本地中有四个工作区域
-
工作目录(Working Directory),平时存放代码的地方
-
暂存区(Stage/Index),临时存放确定改动的代码,本质上是一个文件,保存即将提交的文件列表信息
-
本地仓库(Repository或者Git Directory),安全存放数据的位置,有自己提交到所以版本的数据。
HEAD指向最新放入仓库的版本

其中存储的就是当前使用的版本分支

-
远程仓库(Remote Directory),一个代码托管的服务器

Git提交的三板斧
Git的提交步骤一般是这样的:
- 添加工作目录中修改的文件到暂存区中
git add [filepath]
- 将暂存区中的文件,同步到本地仓库中
git commit -m "[对本次提交的说明]"
- 推送本地仓库代码到远端分支
git push

所有说,Git的文件就有以下四种状态:
- Untracked,未跟踪。就是在文件夹中,但是没有加到git 库,不参与版本控制,可以使用
git add使他变为Staged状态 - Staged,暂存状态。在暂存区中的文件,可以通过
git commit将修改同步到本地仓库。
此时,库中文件和本地文件一致,状态为Unmodify - Unmodify,文件已入库,未修改。就是暂存区中代码的版本和文件夹中的代码完全一致,没有修改
- Modified,文件已入库,发生了修改。就是说暂存区中的代码和文件中的代码不同。
可以使用git checkout从库中取出文件,覆盖当前修改,变成Unmodify状态;或者使用git rm [filepath]移出版本库,变成Untracked状态
查看指定文件的状态
git status [filepath]
查看所有文件状态
git status

红色即为没有被跟踪的文件 (字符集的原因导致中文文件名没有显示
忽略文件
就是,如果我们的本地文件中有一些文件不是必须要被提交的,那么每次提交的时候,我们可以手动选择这些想被提交的文件,再提交。
而Git中有一种更为方便的方式,便是在主目录下建立.gitignore文件,他里面的文件都是不需要提交的文件,其配置规则如下:
- 使用
#进行注释,并忽略文件中的空行 - 可以使用通配符,
*表示任意多个,?表示一个字符,[abc]表示可选字符的范围,{string1,string2}表示可选的字符串等
*.txt # 所有.txt文件不被提交
- 名称前有一个
!,表示不被忽略
!conf.txt # conf.txt文件除外
- 名称前面是一个路径分隔符
/,表示要忽略的文件在根目录下
/temp # 忽略根目录下的temp文件
- 名称后面是一个路径分隔符
/,表示忽略该目录下的所有文件
temp/ # 忽略当前目录下的temp文件
本文深入浅出地介绍了Git的起源、发展历程和核心原理,详细阐述了Git的工作流程,包括本地与远程仓库的交互。通过实例解析了Git的提交操作,如`git add`、`git commit`和`git push`。同时,对比了Git与SVN的区别,强调了Git的分布式特性带来的优势。此外,还探讨了`.gitignore`文件的使用,帮助开发者更好地管理版本控制。

1万+

被折叠的 条评论
为什么被折叠?



