面试过程中,可能会问及一些关于版本控制的问题,理解下SVN和Git的原理,记住常用命令即可。

SVN

  • SVN 是集中式源代码管理工具
概念:
1> Repository 代码仓库,保存代码的仓库
2> Server 服务器,保存所有版本的代码仓库
3> Client 客户端,只保存当前用户的代码仓库
4> 用户名&密码 访问代码仓库需要使用自己的"用户名和密码",从而可以区分出不同的人对代码做的修改 操作:
1> checkout 将服务器上最新的代码仓库下载到本地,"只需要做一次"
2> update 从服务器上将其他人所做的修改下载到本地,"每天上班必须要做的事情"
3> commit 将工作提交到服务器,"每天下班之前至少做一次"
  • SVN服务器安装(略)
  • SVN常用命令
切换工作目录
$ cd 工作目录
checkout服务器上的代码仓库
$ svn co http://xxx/svn/xxxx --username=manager --password=manager 提示:checkout(co)之后,命令行会记录用户名和密码,后续操作不用再另行指定 查看本地代码库状态
$ svn st
错误提示:"is not a working copy",必须在svn的工作目录下才能正确使用svn的命令
查看svn日志
$ svn log
查看某一个文件的日志
$ svn log filename
查看某一个文件某个版本的日志
$ svn log filename@1 创建文件
$ touch main.c
打开并编写文件内容
$ open main.c 查看工作目录状态
$ svn st
将文件添加到本地版本库中
$ svn add main.c/main.*
将文件提交到服务器的版本库中
$ svn ci -m "备注信息"
注意:一定要养成写注释的良好习惯 删除文件
$ svn rm Person.h
提交删除
$ svn ci -m "删除了文件"
注意:不要使用文件管理器直接删除文件 撤销修改
$ svn revert Person.m 恢复到之前的某个版本
$ svn update -r 5 冲突解决
(p) postpone 对比
(mc) mine-conflict 使用我的
(tc) theirs-conflict 使用对方的 svn st 显示的文件状态 ' ' 没有修改
'A' 被添加到本地代码仓库
'C' 冲突
'D' 被删除
'I' 被忽略
'M' 被修改
'R' 被替换
'X' 外部定义创建的版本目录
'?' 文件没有被添加到本地版本库内
'!' 文件丢失或者不完整(不是通过svn命令删除的文件)
'~' 受控文件被其他文件阻隔

Git

  • git是一款开源的分布式版本控制工具
$ git help
查看git所有命令的帮助
$ git help 子命令 要退出帮助信息,按"q"
翻看下页,按"空格"
翻看上页,按"CTRL+B"
要搜索相关文字,按"/"然后输入"相关文字" 创建代码仓库
$ git init 配置用户名和邮箱
$ git config user.name manager
$ git config user.email manager@gmail.com
以上两个命令会将用户信息保存在当前代码仓库中 如果要一次性配置完成可以使用一下命令
$ git config --global user.name manager
$ git config --global user.email manager@gmail.com
以上两个命令会将用户信息保存在用户目录下的 .gitconfig 文件中 查看当前所有配置
$ git config -l 创建代码,开始开发
$ touch main.c
$ open main.c 将代码添加到代码库
查看当前代码库状态
$ git status
将文件添加到代码库
$ git add main.c
将修改提交到代码库
$ git commit -m "添加了main.c"
在此一定要使用 -m 参数指定修改的备注信息
否则会进入 vim 编辑器,如果对vim不熟悉,会是很糟糕的事情 将当前文件夹下的所有新建或修改的文件一次性添加到代码库
$ git add . 添加多个文件
$ touch Person.h Person.m
$ git add .
$ git commit -m "添加了Person类"
$ open Person.h
$ git add .
$ git commit -m "增加Person类属性"
注意 使用git时,每一次修改都需要添加再提交,这一点是与svn不一样的 查看所有版本库日志
$ git log
查看指定文件的版本库日志
$ git log 文件名 回到当前版本,放弃所有没有提交的修改
$ git reset --hard HEAD
回到上一个版本
$ git reset --hard HEAD^
回到之前第3个修订版本
$ git reset --hard HEAD~3
回到指定版本号的版本
$ git reset --hard e695b67 查看分支引用记录
$ git reflog

为什么要用源代码管理工具

  • 能追踪一个项目从诞生一直到定案的过程
  • 记录一个项目的所有内容变化
  • 方便地查阅特定版本的修订情况

最常用的版本控制工具是什么,能大概讲讲原理么?

参考答案:

  • 最常用的版本控制工具有SourceTree(GIT)和CornerStone(SVN);
  • 原理提到svn是集中式代码管理,解释下具体意思,git也这样回答就行了。
  • 集中式代码管理(SVN)的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。
  • 分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。

文章如有问题,请留言,我将及时更正。

文/微笑和飞飞(简书作者)
原文链接:http://www.jianshu.com/p/a40a8ac3b871
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

李洪强iOS经典面试题132-版本控制的更多相关文章

  1. 李洪强iOS经典面试题156 - Runtime详解(面试必备)

    李洪强iOS经典面试题156 - Runtime详解(面试必备)   一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C ...

  2. 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)

    李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...

  3. 李洪强iOS经典面试题154- 通知与推送

    李洪强iOS经典面试题154- 通知与推送   通知与推送 本地通知和远程推送通知对基本概念和用法? image 本地通知和远程推送通知都可以向不在前台运行的应用发送消息,这种消息既可能是即将发生的事 ...

  4. 李洪强iOS经典面试题153- 补充

    李洪强iOS经典面试题153- 补充   补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...

  5. 李洪强iOS经典面试题147-WebView与JS交互

    李洪强iOS经典面试题147-WebView与JS交互   WebView与JS交互 iOS中调用HTML 1. 加载网页 NSURL *url = [[NSBundle mainBundle] UR ...

  6. 李洪强iOS经典面试题144-数据存储

    李洪强iOS经典面试题144-数据存储   数据存储 sqlite中插入特殊字符的方法和接收到处理方法. 除'其他的都是在特殊字符前面加"/",而 ' -> '' .方法:k ...

  7. 李洪强iOS经典面试题143-绘图与动画

    李洪强iOS经典面试题143-绘图与动画   绘图与动画 CAAnimation的层级结构 CAPropertyAnimation是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使 ...

  8. 李洪强iOS经典面试题142-第三方框架及其管理

    李洪强iOS经典面试题142-第三方框架及其管理   第三方框架及其管理 使用过CocoaPods吗?它是什么?CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第 ...

  9. 李洪强iOS经典面试题141-报错警告调试

    李洪强iOS经典面试题141-报错警告调试   报错警告调试 你在实际开发中,有哪些手机架构与性能调试经验 刚接手公司的旧项目时,模块特别多,而且几乎所有的代码都写在控制器里面,比如UI控件代码.网络 ...

  10. 李洪强iOS经典面试题140-UI

    李洪强iOS经典面试题140-UI   UI viewcontroller的一些方法的说明viewDidLoad,viewWillDisappear, viewWillAppear方法的 顺序和作用? ...

随机推荐

  1. 六款值得推荐的android(安卓)开源框架简介(转)

    1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduli ...

  2. 驱动中获取PsActiveProcessHead变量地址的五种方法也可以获取KdpDebuggerDataListHead

    PsActiveProcessHead的定义: 在windows系统中,所有的活动进程都是连在一起的,构成一个双链表,表头是全局变量PsActiveProcessHead,当一个进程被创建时,其Act ...

  3. Arduino101学习笔记(九)—— 中断函数

    1.设置中断函数 //***************************************************************************************** ...

  4. Linux学习笔记(19) Linux服务管理

    1. 服务的分类 Linux服务可分为RPM包默认安装的服务和源码包安装的服务.前者可细分为独立的服务(直接作用于内存中)和基于xinetd服务.xinetd本身是独立的服务,其唯一的功能是管理其他服 ...

  5. 用户视角 vs 系统视角 看性能

    如何评价性能的优劣: 用户视角 vs. 系统视角 对于最终用户(End-User)来说,评价系统的性能好坏只有一个字——“快”.最终用户并不需要关心系统当前的状态——即使系统这时正在处理着成千上万的请 ...

  6. 【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中

    问题: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示:  问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法 ...

  7. loadrunner处理HTTP重定向请求

    //place this in global.h     int HttpRetCode;  int i=0;  char depthVal[10];  char cTransactName[2000 ...

  8. no-jquery 02 DOM

    DOM Manipulation Creating Elements // IE 5.5+ document.createElement('div'); Inserting Elements Befo ...

  9. 寻找房间中心zz

    Finding the Centroid of a Room Boundary It's been a while since my last post and I'm sure most of yo ...

  10. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 K. King’s Rout

    K. King's Rout time limit per test 4 seconds memory limit per test 512 megabytes input standard inpu ...