SVN,Git

作者: 宙斯YY | 来源:发表于2018-06-22 14:34 被阅读80次

    一.SVN

    1.基本操作
    • 下载远程仓库到本地(cd目录下)
      $svn check out 仓库路径 --username=用户名 --password=密码
    • 查看本地仓库文件状态
      ?-未同步到svn目录 A-添加的文件 M-修改的文件 D-删除的文件 C-冲突 R-被替换 |-忽略
      $svn status
    • 添加文件到svn目录下
      注意:默认情况下,xcode中新建文件都是 A 状态的,也就是执行隐性执行了$svn add
      但是,有一种情况下,需要手动执行该命令,就是静态库.a文件 在xcode中显示 |-忽略状态
      .a文件(不让看源码实现的静态库)在svn中默认被忽略,需要使用$svn add 文件名操作手动添加
      $svn add 文件名
    • 提交代码到远程仓库
      $svn commit -m"提交信息" 具体文件名(不写代表全部)
    • 更新到最新版本
      $svn update
    • 查看版本提交日志
      $svn log
    • 解决版本冲突
      提交之后发现版本滞后 out of date
      先$svn update
      再$svn commit -m"",会报冲突错误 diff-full
      此时可以使用三种方式处理 tc(theirs-conflict) mc(mine-conflict) p(postpone)
      tc:使用服务器数据覆盖我的本地数据,以服务器为准
      mc:使用我的数据覆盖服务器数据,以我的数据为准,然后再$svn commit -m""
      p:找到冲突文件,删除其中三种特殊字符<<<< === >>>>,按需解决冲突,然后$svn resolved 文件名(告诉svn解决完冲突了),最后提交$svn commit "解决冲突" 冲突文件名
      可参考:
      https://www.jianshu.com/p/7d28a0863810
    2.Cornerstone使用注意:

    xcuserdata文件包含断点文件夹打开目录等信息,这个文件在svn使用中可以忽略掉。
    具体做法是:
    A.第一次提交代码的时候,点击ignore(不点commit anyway),然后再commit
    B.通过cornerstone删除两个xcuserdata开头的文件,然后commit
    C.在xcode中任意改一行代码,打一个断点,然后编译,生成新的xcuserdata
    D通过cornerstone找到这两个新的xcuserdata,右键选择ignore,再次commit
    E.完成忽略操作

    3.文件结构应用场景

    场景:
    团队开发1.0上线完成之后,着手2.0开发,此时发现1.0版本有紧急Bug,找几个人去修复Bug,在1.0的基础上发布1.1版本,然后把修复的内容合并到即将发布的2.0版本中。
    解决流程:

    我们先了解一下svn三个重要文件夹
    trunk
    一般存放目前正在开发的项目文件,主分支
    tag
    可以理解为项目的里程碑,也可以说是快照,凡是放在tag里的代码都不变了。凡是放在tag里的代码都是经过测试,认定稳定之后才放进去的。
    branches
    分支
    
    • A.开发完1.0版本之后,除打包发布外,还需要备份(每个发布版本都需要备份),备份存放在tag文件夹中。
      使用cornerstone的话,在svn服务器端右键Tag打标签,备份到tag文件夹下。
    • B.遇到紧急Bug时,把tag文件夹下的1.0版本创建一个新的1.0fixbug版本放到branches下,然后在该目录中去修改bug。
      使用cornerstone的话,在svn服务器端tag文件夹中右键Branches,在branches文件夹中创建分支。
    • C.修改完bug之后,备份1.1版本文件到tag文件夹中,再把分支代码合并到trunk主分支。
      使用cornerstone的话,在本地仓库主分支上点击merge,选择branches文件夹中项目进行合并。
    • D.合并完之后可以删除分支
      使用cornerstone的话,在svn服务器端branches文件夹中delete。

    二.Git

    1.基本操作
    • git初始化和配置
      初始化一个git本地仓库(cd到将要创建git仓库的目录下)
      $git init
      配置仓库的用户名和邮箱---保存在.git/config文件中
      $git config user.name "zsy"
      $git config user.email "zsy@qq.com"
      全局配置仓库的用户名和邮箱---保存个人/.gitconfig文件中
      $git config --global user.name "zsy"
      $git config --global user.email "zsy@qq.com"
      优先使用自己目录下的配置信息,如果没有,使用全局的配置信息。
      给git命令操作起别名
      $git config alias.别名 "操作" //eg: $git config alias.ci "commit -m"
      $git config --global alias.别名 "操作" //给所有git管理项目git操作起别名
    • git本地提交
      在目录下创建一个文件main.h,然后查看文件状态
      $git status
      main.h显示红色,该文件还没有被git管理,相当于?状态,需要执行$ git add main.h
      $git add 文件名 --add该文件
      $git add . --add所有文件
      main.h显示绿色,new file main.h,相当于A状态,需要执行$git commit -m"添加main.h"
      注意:默认情况下,xcode中新建文件都是 A 状态的,也就是执行隐性执行了$git add
      $git commit -m"提交信息"
      显示 1 file changed, 1 insertion(+)
      修改main.h文件内容,状态变成红色 modified main.h,此时需要执行$git add 操作,再执行$git commit操作
      删除文件
      $git rm 文件名
      此时main.h文件显示绿色,deleted: main.h 直接$git commit操作就行
      注意:红色表示修改不在git暂缓区,需要add操作,绿色表示可以直接提交
    • 查看版本信息
      $git log 版本号使用SHA加密
      $git reflog 加强log,可以看到版本回退信息
    • 回退版本
      修改但为未提交状态,退回上个版本
      $git reset --hard HEAD
      修改已经提交了,退回指定版本
      先根据$git reflog 命令查看各个版本号信息
      $git reset --hard 版本号 //版本号指定前5位就行
    • 从远程仓库获取数据
      $git clone 路径
    • 从远程仓库拉取代码
      $git pull
    • 把数据推送到远程仓库
      $git push
    2.文件结构

    工作区:.git文件目录以外的内容
    版本库:.git文件目录信息
    .git/config->记录配置信息
    .git/HEAD->指向当前分支
    .git/Log->记录提交信息
    $git add 是把数据提交到暂缓区,$git commit是把暂缓去内容提交到当前分支。

    3.使用xcode+git工作

    已经拥有git托管的项目,直接clone下来开发:
    A.创建空文件夹,在其中克隆项目 $git clone 路径
    B.如果没有.gitignore文件,则创建忽略文件.gitignore并且写入内容https://github.com/github/gitignore/blob/master/Objective-C.gitignore
    然后 $git add .gitignore
    然后 $git commit -m"添加忽略文件.gitignore"
    然后 $git push
    C.配置git信息,用户名邮箱
    $git config user.name "用户名"
    $git config user.email "邮箱"
    D.$git commit $git pull $git push
    E.解决冲突,直接在Xcode-C标记冲突文件中处理,然后$git commit $git pull $git push
    注意:Xcode中?标记的文件需要使用$git add添加到暂缓区,再提交。

    创建仓库导入已有未被git托管项目(不同的地方是步骤B):
    A.创建空文件夹,在其中克隆项目 $git clone 路径 (远程仓库为空)
    B.把项目拖进文件夹中,做一次$git add . 操作
    C.$git commit $git pull $git push

    三.区别

    SVN是集中式管理,所有代码管理都是在服务器端(只有服务器端有代码仓库),客户端只能够下载服务器端代码;
    Git是分布式管理,除了在服务器端有代码仓库外,本地也有代码仓库,可进行本地代码管理;
    Git分支管理比SVN更容易;
    Git文件每次添加修改之后都需要先执行$git add,再执行$git commit操作,而SVN只会在第一次添加执行$svn add,以后修改直接$svn commit

    相关文章

      网友评论

          本文标题:SVN,Git

          本文链接:https://www.haomeiwen.com/subject/bxykyftx.html