赞
踩
目录
什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在本书所展示的例子中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。
如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。
Figure 1. 本地版本控制.
其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。
Figure 2. 集中化的版本控制.
这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面,有好有坏。 这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
Figure 3. 分布式版本控制.
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
Git是一款分布式源代码管理工具(版本控制工具) 。
Git得其数据更像是一系列微型文件系统的快照(这个快照和虚拟机中创建快照异曲同工之妙)。使用Git,每次提交或保存项目状态时,Git都会把代码仓库完整地镜像下来,包括完整的历史记录,并存储对该快照的引用。为了提高效率,如果文件没有改变,Git不会再次存储文件,只是指向它已存储的上一个相同文件的链接。Git认为它的数据更像是一个快照流,会将数据作为项目的快照存储一段时间。可以有效、高速地处理从很小到非常大的项目版本管理。 也是”Linux之父“,即Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
随着计算机技术的发展,软件的结构变得越来越复杂,规模也越来越大,软件开发中的版本控制、代码托管及协同开发也变得越来越重要。Git
是一个分布式的版本控制系统,它功能强大、操作简单,并且能很好地解决以上问题。
当你需要做一个大工程的时候,这其中文件的管理是非常庞大的,因为你需要不断的修改更新文件内容,同时可能还要保留旧版本保证可以复原,这样就需要备份多个版本的文件。
并且在大多数情况下一个工程需要在多数人来共同维护,那么这种情况下不同人之间修改内容的合并也是非常麻烦的,这时使用git就可以很轻松的解决这些问题。还有在日常编写项目的时候,有效的项目版本控制能给自己带来很大的便利和很高的容错率!
直接利用cmd进入命令行界面
初始化文件夹:使用git init
命令,将其初始化为一个本地版本库
来文件夹下验证
这个后缀名为.git得文件很重要,不要删
由于Git是一个分布式的版本控制系统,所以当利用它进行分工协作时,必须区分不同的机器。这一点可以通过配置机器的名字和邮箱完成。Git
初始使用时,也会提示进行配置。配置命令如下:it config –global u
$ git config --global user.name "Your Name" // 配置git的用户名
$ git config --global user.email "email@example.com" // 配置git的邮箱地址
在实际的使用过程中,可以将“Your Name”
、“email@example”
替换为自己实际的名字和邮箱。
根据上边讲解的git使用流程,本地版本库就相当于一个存放在本地的仓库,里面记录了我们本地文件的各种版本及不同版本之间的差异。当我们添加、删除或者修改了文件之后,我们必须将修改添加至工作区以暂时保存。添加修改,并保存至工作区,需要用到git add
命令,git add
命令的使用方式如下所示:
# 添加所有的修改到暂存区
git add .
# 添加指定的文件到暂存区,比如这里指定的就是hello.txt
git add hello.txt文件
上图:先创建一个测试的文件,hello.txt
当你创建完hello.txt
,而且没有将其添加到暂存区域时,如果使用git status
命令,你会得到类似于下面的输出(中文):
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# hello.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪
这是什么?这是提示你工作区有被修改的文件,未提交至暂存区。 当你执行完git add
之后,会得到类似于下面的输出:
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
# (使用 "git rm --cached <file>..." 撤出暂存区)
#
# 新文件: hello.txt
#
至于No commits yet:这是在提醒你,暂存区有哪些内容需要提交到本地仓库。
其实git status
命令用来查看当前工作区的状态,即有哪些已经修改,还尚未提交到暂存区的文件。在实际的开发过程中,面对复杂的程序文件,你经常需要查看一下,自己对哪些文件做了修改,此时git status
命令就很有用了。
详解:
git checkout -- filename的作用是把filename文件在工作区的修改撤销到最近一次git add 或 git commit时的内容
例如,工作区的check.txt文件,初始时里面放一行内容“one”,然后进行git add,随后git commit
此时,编辑check.txt再加入一行内容"two",此时check.txt尚未被add也未被commit
调用cat check.txt会看见,check.txt的文件内容确实已被更改
此时调用git checkout -- check.txt
调用结束后,check.txt内容重新回到只有一行内容的时候,因为最近一次关于check.txt的操 作是commit操作!所以工作区的check.txt内容被撤销到了最近一次commit操作时check.txt的内容。
在git中,checkout是“检出”的意思,该命令用于切换分支或者恢复工作树文件,语法为“git checkout branchName”或者“ git checkout 参数 选项 分支”。
checkout
命令用法如下:
git checkout hello.txt
在我们将项目得版本修改为v2.0之后,未做任何得添加或提交,突然发现项目得业务逻辑错误,此时就可以使用git checkout 文件名来将项目还原到最近得一次提交或暂存区得状态里边,刚才我们已经将v1.0的进行提交了,现在执行git checkout 文件名
再次查看文件内容;
将修改添加到暂存区,只是将你的工作暂时保存,并没有添加到本地的仓库中。这个过程可以类比写文件,将修改添加至暂存区,就相当于把内容先放入缓存区。因此,我们必须将工作区的内容提交到本地版本库去,才算是真正地保存了修改。
提交修改到本地仓库,使用命令git commit
,其使用方式如下所示:
git commit -m "示例提交"
-m
参数后面跟的是本次提交的具体内容,用来说明你这次的提交,主要是做了哪些修改,这个说明内容是必须的。
本地的讲解到此结束!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。