• 从svn到git开发转变


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

    一,SVN

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

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

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

    (3)右键,点设置

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

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

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

    二,svn和git的区别

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

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

    svn必须要联网才能工作

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

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

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

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

    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分支上合并

  • 相关阅读:
    类对象成员函数的const增强zz
    希腊与罗马神话神名对照
    c++程序调用c函数 and otherwise zz
    百度相信中国电子书下载
    VolatileCorrectness,让编译器帮你检测竞争条件 zz
    高效计算一个bytes有几个byte是1?
    实现mybatis官网入门实例
    Windows Phone 深度探索(一) 带有(伪)元素加载动画的Panel (SlideInPanel)
    You have asked for this, it is basically your fault!
    New EC2 Instance Types of re:Invent 2021
  • 原文地址:https://www.cnblogs.com/hsprout/p/8431387.html
Copyright © 2020-2023  润新知