面试过程中,可能会问及一些关于版本控制的问题,理解下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. 连接SQL Server执行SQL语句

    public static DataTable GetData() { string Connect = ConfigurationManager.AppSettings["Connecti ...

  2. Ubuntu下安装Nginx

    转载自:http://www.cnblogs.com/skynet/p/4146083.html 1.Nginx安装 我使用的环境是64位 Ubuntu 14.04, Nginx是Nginx 1.10 ...

  3. 禁用编译器自动生成的函数(Effective C++之06)

    如果想让你的类定义出来的对象是独一无二的,即对象无法被复制,或者使用赋值操作符赋给另外一个对象,那么最好的方法就是禁用拷贝构造函数和赋值操作符.下面介绍几种禁用的方法.(方法来自Effective C ...

  4. Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 (转)

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: h ...

  5. 在Salesforce中创建Web Service供外部系统调用

    在Salesforce中可以创建Web Service供外部系统调用,并且可以以SOAP或者REST方式向外提供调用接口,接下来的内容将详细讲述一下用SOAP的方式创建Web Service并且用As ...

  6. hdu 5833 Zhu and 772002 高斯消元

    Zhu and 772002 Problem Description Zhu and 772002 are both good at math. One day, Zhu wants to test ...

  7. 我的 Unity2D 屏幕适配

    以下方法纯属我YY,切勿当真!!! 确定一个设计尺寸,比如 devWidth = 960,devHeight = 640, 按照这个尺寸进行设计游戏. 方式一: 不管什么屏幕尺寸,都和设计的尺寸对应. ...

  8. 【java基础】]IO流

    IO流 概念: 流的概念源于unix中管道(pipe)的概念,在unix中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备,外部文件等 一个流,一定能够会有源和去向(目的地),他 ...

  9. 【bootstrapValidator 不验证】使用bootstrapValidator 验证效果不起作用

    虽然在页面ready的时候 就绑定了验证表单 ,但是在点击提交按钮之后 依旧没有验证的效果 . 那就在提交按钮的点击事件中 添加一句话: $(document).ready( function () ...

  10. [工作bug]一个weblogic跨应用导致session丢失的bug之旅

    近来,发布一个应用,开发和本地测试一切都好,一旦部署到测试环境之后,坑爹的问题随之而来,应用程序不定时的超时,导致用户正在操作过程中被踢了出来,纠结了几天,终于在今天将此问题搞定: 1.系统架构 系统 ...