什么是版本管理器
版本管理器:不仅仅是对代码的管理,而且还是对整个项目的管理。研发项目需要协调统一开发人员的代码,各自独立开发却又相互联系,需要对每次修改、提交、删除的代码进行记录和标识,以便于我们能够随时识别版本、追踪代码和回退撤销。简单来说,每次的提交代码就会是一个版本,我们需要记录当前提交代码的版本,记录它增加、修改和删除了哪些内容,并标识改动的时间、原因和责任人,然后把这些改动合并(增加)到上一个版本(主干代码),这就完成了一次版本的记录,其他人员只需要更新主干代码,就能把不是自己开发的代码更新到本地,而且还可以视特殊情况进行追踪责任人和回退版本,这样就实现了版本管理。
git介绍
跟CVS和SVN不同的是,Git是分布式版本控制系统,那我们就需要了解这个集中式和分布式版本控制系统到底有什么区别呢?
- 集中式版本控制系统 :(1)这个版本库是集中的存放在一个叫做中央服务器的服务器,流程如下:当你想使用时,就需要从中央服务器中先下载最新的版本到自己电脑本地,然后进行你自己的开发,开发完成后,你需要把你开发的东西传回给中央服务器,中央服务器进行合并更新,然后别人通过更新下载最新的中央服务器版本,就能把不是自己开发的工作下载到本地,这个时候才完成了版本的迭代和更替。
(2)集中式版本控制系统最大缺点就是必须联网才能进行工作,而且与网速关联很大,网速慢的时候,提交的时间就会很长,那这就很郁闷了;(3)还有就是安全性比较差,如果中央服务器出现了问题,那所有的研发人员就没法更新,没法工作了。 - 分布式版本控制系统 :(1)分布式版本控制系统就没有“中央服务器”这种说法,每个人的电脑就是一个完成的版本库,这样就解决了联网的问题。(2)当多人协作开发的时候,只需要把各自更改的文件进行推送给其他研发人员,这样就可以看到各自的修改;(3)而且分布式版本控制系统安全性是很高的,因为每一个人的电脑本地都是一个完整的版本库,如果某个人的版本库没有了,那可以随便去其他人哪里复制一份就可以了;(4)为了更好方便代码推送,一般来说,git会有一台类似于“中央服务器”的电脑,这个只是方便大家交换自己的修改,没有他也是可以一样的照样工作,只是可能有时候不方便推送自己的修改而已,比如不在一个局域网、其中一个同事电脑没访问权限或者不开机等等。
git的提交流程
1.首先,我们需要认识一下版本库Repository,工作区会隐藏有一个.git的版本库,这个git版本库存了很多的东西,我们要认识里面的stage的暂存区,还有git为我们自动创建的分支master(本地仓库),以及指向master的指针HEAD
2.第一步我们命令行 git add的时候,实际上我们是把我们需要提交的文件添加到暂存区。
3.第二步,git commit提交时,是把我们刚才添加到暂存区的所有的内容提交到我们的master(本地仓库)
4.第三部,git push,这时候对于远端的“中央服务器”电脑,我们要把我们的master(本地仓库)的更新push到远端,这样远端的“中央服务器”就会得到更改的文件,然后合并,这样就完成了提交代码推送到远端合并的操作。
git常用命令行
最常用command如下:
git status 展示当前分支的状态(是否commit,是否push)
git add git add <fileName> 增加文件/目录到当前分支;不但是用来添加不在版本控制中的新文件,也用于添加已在版本控制中但是刚修改过的文件; 在这两种情况下, Git都会获得当前文件的快照并且把内容暂存(stage)到索引中,为下一次commit做好准备。
git commit 提交变更到本地仓库; git commit -a -m '<comment>' -m参数指定注释,-a参数自动添加所有并更到本次的commit中
git branch 显示、新建或者删除一个分支; git branch 不加参数会得到当前仓库中存在的所有分支列表,星号(“*”)标识了你当工作在哪个分支下。 git branch <branchName> 新建一个分支
git checkout CheckOut一个分支并切换到该分支,从而改变了当前分支为此分支 , git checkout <branchName> 切换到该分支,git checkout . 放弃本地所有已经编辑,但未commit/push的更改,还原为和远端一样的版本
git clone 下载一个远端仓库到本地, git clone 'http(s)://[userName@]host:port/xxx/yyy/zzz.git' [dir] 使用http(s)方式从远端仓库进行clone,默认clone到本地的zzz目录,添加dir参数后则clone到dir目录内。如果添加用户名,会提示输入密码,否则使用无验证方式进行clone
git clone 'git@gitRepository:xxx/yyy/zzz.git' [dir] 使用ssh方式从远端仓库进行clone,该方式支持大文件的push和pull,需要先配置密钥,后面进行详述。
git diff 不加参数,显示未提交的本地更改内容;
加一个分支名作为参数,则将本地分支和参数指定的分支进行diff;
加2个分支名作为参数,则对这两个分支进行diff(注:这2个分支必须已经co到本地);
加参数--stat则只给出统计信息
git fetch 从远端仓库更新当前分支
git log 倒序展示commit日志, git log [--stat] 倒序展示所有的commit日志,--stat参数会显示变更的内容统计
git merge 将一个分支merge到当前分支
git merge [branchName] 将该分支合并到当前分支
git mv 在当前分支中移动文件/目录
git pull 从远端仓库更新当前分支并智能合并
git push 提交本地的所有commit到远端仓库
git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交 git revert HEAD 撤销最近一次的commit
git reset Reset current HEAD to the specified state
git rm 在当前分支中删除文件/目录