一.SVN
1.基本操作
- 下载远程仓库到本地(cd目录下)
$svn check out 仓库路径 --username=用户名 --password=密码 - 查看本地仓库文件状态
?-未同步到svn目录 A-添加的文件 M-修改的文件 D-删除的文件 C-冲突 R-被替换 |-忽略
$svn status - 添加文件到svn目录下
注意:默认情况下,xcode中新建文件都是 A 状态的,也就是执行隐性执行了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 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