SVN,Git

一.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 commit -m"",会报冲突错误 diff-full
    此时可以使用三种方式处理 tc(theirs-conflict) mc(mine-conflict) p(postpone)
    tc:使用服务器数据覆盖我的本地数据,以服务器为准
    mc:使用我的数据覆盖服务器数据,以我的数据为准,然后再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 config user.name "zsy"
    git config --global user.name "zsy"
    git config --global user.email git config alias.别名 "操作" //eg: git config --global alias.别名 "操作" //给所有git管理项目git操作起别名
  • git本地提交
    在目录下创建一个文件main.h,然后查看文件状态
    git add main.h
    git add . --add所有文件
    main.h显示绿色,new file main.h,相当于A状态,需要执行git add
    git add 操作,再执行git rm 文件名
    此时main.h文件显示绿色,deleted: main.h 直接$git commit操作就行
    注意:红色表示修改不在git暂缓区,需要add操作,绿色表示可以直接提交
  • 查看版本信息
    git reflog 加强log,可以看到版本回退信息
  • 回退版本
    修改但为未提交状态,退回上个版本
    git reflog 命令查看各个版本号信息
    $git reset --hard 版本号 //版本号指定前5位就行
  • 从远程仓库获取数据
    $git clone 路径
  • 从远程仓库拉取代码
    $git pull
  • 把数据推送到远程仓库
    $git push
2.文件结构

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

3.使用xcode+git工作

已经拥有git托管的项目,直接clone下来开发:
A.创建空文件夹,在其中克隆项目 git add .gitignore
然后 git push
C.配置git信息,用户名邮箱
git config user.email "邮箱"
D.git pull git commit git push
注意:Xcode中?标记的文件需要使用$git add添加到暂缓区,再提交。

创建仓库导入已有未被git托管项目(不同的地方是步骤B):
A.创建空文件夹,在其中克隆项目 git add . 操作
C.git pull $git push

三.区别

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

四.应用

  • 有新的远程地址,有已存在文件夹
    cd existing_folder
    git init
    git remote add origin http://git.taotiangou.net/zhousiyang/1111.git
    git add .
    git commit -m "Initial commit"
    git push -u origin master

  • 有已存在文件夹和其他远程地址
    cd existing_repo
    git remote rename origin old-origin
    git remote add origin http://git.taotiangou.net/zhousiyang/1111.git
    git push -u origin --all
    git push -u origin --tags

你可能感兴趣的:(SVN,Git)