从svn到git开发转变

前言:目前的公司的开发技术还是处于刀耕火种的年代,react,vue已经火到不行了,可是还在用jQuery一遍遍处理着dom。版本控制用的是svn,这里也不是说svn不好,在windows下svn的“傻瓜式操作”非常的简单,对于开发人数很少的团队,也够用,但是如果开发人数比较多,开发交叉比较大的情况下,git的优势就非常明显。

一,SVN

(1)svn的操作比较简单,官网上下载安装完之后,在空白处鼠标,如下图就表示安装成功了

从svn到git开发转变

(2)导出,从远程库导到本地

这里下载的是汉化版的,填好远程库和本地地址之后,点确定即可导到本地。这里直接讲到客户端的操作,因为没在服务器建立仓库的经验啊

从svn到git开发转变

(3)右键,点设置

从svn到git开发转变

我们可以看到svn也可以设置分支。但是要注意这个分支实际是一个完整的目录,当你新建一个分支的时候,每个人都会拥有这个分支

(4)进入下载到的本地库文件里,右键,我们可以看到有,SVN更新和SVN提交的选项。在提交之前先更新,然后手动处理冲突之后再提交即可

总之,svn的图形化操作非常的简单,其他的一些操作这里就不去详解了,毕竟这篇的重点是git,还是稍稍总结一下svn和git的区别,以及为什么要转为git,git的好处在哪里?

二,svn和git的区别

其实我是先接触git的,所以刚到公司用svn的时候我心里是有些拒绝的。直到有一天在知乎上看到一个回答,终于理解了为什么很多公司倾向于svn

从svn到git开发转变

svn:集中式版本控制,只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。这也是最大的缺陷,如果服务器宕机,将影响到所有的开发人员,而且如果中心服务器的磁盘坏掉,如果代码没有备份的话,就相当麻烦了。即使把本地代码进行合并得到一个相对完整的本本,再把这个代码重新部署到服务器的新仓库时,会丢失所有的历史版本以及日志。

svn必须要联网才能工作

svn是按文件的方式来存储的,关心的是文件内容的具体差异

svn提交的时候必须授权,如果没有写权限,提交会失败

svn提交并非每次都能成功,先更新再提交,先提交的会与后提交的发生冲突。

当然,用svn我们可以看到项目中其他人的开发进度,这便于领导管理。

从svn到git开发转变

git:分布式版本控制,首先git也是有自己的集中式版本库和服务器,但它更倾向于分布式模式。每个开发人员从中心版本库/服务器上check out代码克隆一份到自己的机器上。客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操作,实际上都是一次对代码仓库的完整备份。每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端。

git是把内容按元数据方式存储,不保存前后变化的差异数据,若文件没有变化,git不会再次保存,只对上次保存的快照做一个链接。

git每个clone的版本库都是平等的

git的提交不会被打断,push给他人或者他人pull你的版本库,合并会发生在pull和push的过程中,不能自动解决的冲突会提示手工完成。

git没有一个全局版本号,但是svn是有的

git每个历史版本都存储完整文件,便于恢复,svn存储差异文件,历史版本不可恢复

 三,git多人协作开发流程

首先在windows下安装git,直接在官网上安装,next默认安装即可。

因为git的分布式,安装完之后,还需要进一步设置

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

注意:git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

(1)创建版本库,并把目录变成git可以管理的仓库

$ mkdir test
$ cd test
$ pwd //用于显示当前目录
$ git init

(2)把文件添加到暂存区

$ git add readme.txt

(3)把暂存区文件提交到仓库

$ git commit -m "write a readme file"

-m后面输入的是本次提交的说明,可以输入任意内容

commit可以一次提交多个add的文件

(4)查看仓库当前状态

$ git status

可以看到文件被修改了(没有被提交),但是要看具体修改了什么内容,用以下命令:

$ git diff readme.txt 

(5)版本回退

如果文件改错,或者误删,可以从最近的一个commit恢复

在这之前:我们可以用以下命令查看提交记录,由近到远,如果嫌输出信息太多,可以试试加上--pretty=oneline参数:

$ git log

界面上显示的一大串数字就是commit id(版本号)

在git中,用HEAD表示当前版本,上一个版本HEAD^,再上一个版本HEAD^^

$ git reset --hard HEAD^

如果你已经版本回退,但是后悔了,只要找到版本id,例如3628164(不用写全,也不能太短),回退到指定版本

$ git reset --hard 3628164

如果把界面关闭,该如何查找版本id,如下的命令会记录你的每一次命令

$ git reflog

(6) 查看工作区和版本库里最新版本的区别

$ git diff HEAD -- readme.txt

(7)撤销修改

1.撤销工作区的修改,让这个文件回到最近一次git commitgit add时的状态。

$ git checkout -- readme.txt

注意:-- 这个很重要,没有的话就变成切换分支

2.已经git add到暂存区,还没有提交。用以下命令把暂存区的修改撤销掉

$ git reset HEAD readme.txt

3.如果已经提交到版本库,可以用版本回退

(8)删除文件

1.从版本库中删除文件

$ git rm test.txt

2.从工作区中误删,版本库中还有

$ git checkout -- test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

(9)添加远程库(github)

1.把本地库与远程库关联

$ git remote add origin git@github.com:michaelliao/learngit.git

远程库的名字就是origin,这是Git默认的叫法,也可以改成别的。

2.把本地库的内容推送到远程,

$ git push -u origin master

第一次推送master分支时,加上了-u参数

只要本地作了提交,就可以通过命令:

$ git push origin master

3.从远程库克隆到本地

$ git clone git@github.com:michaelliao/gitskills.git

Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。

(10)创建与合并分支

1.创建分支dev

$ git checkout -b dev

加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev   //创建
$ git checkout dev //切换

查看当前分支:会列出所有分支,当前分支前面会标一个*号。

$ git branch

把dev分支的工作合并到master主分支(此时master是当前分支)

$ git merge dev

合并完之后,就可以删除分支dev

$ git branch -d dev

(11)解决冲突

当不同分支修改了同一个文件合并时,会发生冲突,Git用<<<<<<<=======>>>>>>>标记出不同分支的内容

把需要修改的分支修改后重新提交

用以下参数查看分支的合并情况(分支合并图):

$ git log --graph --pretty=oneline --abbrev-commit

(12)分支策略

master主分支应该仅用来发布新版本

在dev分支上干活,每个人都在自己的分支修改代码,时不时的在dev分支上合并

从svn到git开发转变

上一篇:MSSQL2005-由嵌套失误感受到的强大智能优化功能


下一篇:luogu P4396 [AHOI2013]作业