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 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 commitgit pull git push E.解决冲突,直接在Xcode-C标记冲突文件中处理,然后git commit git pullgit push
注意:Xcode中?标记的文件需要使用$git add添加到暂缓区,再提交。

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

三.区别

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

四.应用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • &开发过程中离不开源代码的管理, 目地:为了解决在软件开发过程中,由源代码引发的各种蛋疼、繁琐的问题。 目前开发使...
    早起的虫儿子被鸟吃阅读 2,409评论 0 16
  • SVN & Git PS:本文所有$符号之后为在终端中执行的命令。 版本控制系统 版本控制 版本控制(Versi...
    羊驼先生丶阅读 543评论 1 7
  • PS:本文所有$符号之后为在终端中执行的命令。 版本控制系统 版本控制 版本控制(Version Control)...
    胡洁川阅读 523评论 0 1
  • PS:本文所有$符号之后为在终端中执行的命令。 版本控制系统 版本控制 版本控制(Version Control)...
    clarkx阅读 323评论 0 5
  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,855评论 5 147