天天看点

版本控制 - SVN常见的源代码管理工具/软件:SVN命令总结

什么是源代码管理(版本控制)工具: 就是用来管理我们源代码的一个软件。

常见的源代码管理工具/软件:

1. CVS

        开启版本控制之门。1990年诞生,“远古时代”的主流源代码管理工具。

2. SVN —— 集中式(全称 Subversion)

        是集中式源代码管理工具。它是版本控制之王,它是CVS的接班人,速度比CVS快,功能比CVS强大,在国内使用最为普遍(70%-90%),源代码只有在公司才可以拿走,公司为了维护利益采用SVN。

3. GIT —— 分布式

        是分布式源代码管理工具。目前被越来越多的开源项目使用,在国外比较火,国内还没有大范围普及,不在公司也可以被随意把源代码拿走。

SVN

  1. 概念:

            1> Repository 代码仓库,保存代码的仓库

            2> Server 服务器,保存所有版本的代码仓库

            3> Client 客户端,只保存当前用户的代码仓库

            4> 用户名&密码 访问代码仓库需要使用自己的”用户名和密码”,从而可以区分出不同的人对代码做的修改

  2. 操作:

            1> checkout 将服务器上最新的代码仓库下载到本地,”只需要做一次”

            2> update 从服务器上将其他人所做的修改下载到本地,”每天上班必须要做的事情”

            3> commit 将工作提交到服务器,”每天下班之前至少做一次”

  3. SVN服务器端的安装配置:

            使用源代码管理工具,实际上是服务器端在帮我们管理源代码。写完源代码后,把源代码托管到服务器上,服务器帮我们管理。当我们需要更新/提交源代码时,只需要去服务器里进行提交,在服务器里进行更新。

  4. 操作流程:

            项目经理初始化项目:项目经理先在服务器上创建一个代码仓库,然后程序员才能在这个代码仓库里共享代码。

            1) 把服务器仓库里全部代码下载到本地。这个操作一般是第一次做,以后每次只需更新一下即可。下载整个项目工程(只做一次):

    svn checkout 服务器地址 --username=用户名 --password=密码

            项目经理在本地初始化一个项目,即创建一个基础项目。初始化完项目后,需要把创建的项目提交到服务器上。以供其他人下载。

            2) 提交代码(常用):

    svn commit -m "注释/备注

    ,即本次提交的描述,都提交了些什么内容”

            3) 下载/更新代码(常用):

    svn update

  5. SVN的使用环境

    要想利用SVN管理源代码,必须得有2套环境

    1) SVN服务器:

            用于存储客户端上传的源代码

            可以在Windows上安装 Visual SVN Server 软件

             http://www.visualsvn.com/server/download/

            大部分情况下,公司的开发人员不必亲自搭建SVN服务器,项目经理会搭建。

    2) 客户端 :

            上传本地的源代码到服务器,或者更新服务器的代码到本地,保持同步 。可以在Mac上使用命令行、Versions、Cornerstone、Xcode图形化管理软件(这些软件的本质是集成了命令,是对命令进行了封装)

            开发人员就属于客户端这个角色

    3) UNIX常用命令

cd  改变工作目录
pwd 输出当前工作目录的绝对路径

在UNIX中要执行什么命令,一定要知道自己当前所在的工作目录
    ls   查看文件
    ls -a  显示所有文件
    ls -l  列表显示文件
    ls -la 列表显示所有文件

创建文件:touch main.m 
打开文件:open main.m
连续查看文件内容:cat main.m
分页查看文件内容(分页查看:内容太多会分页):more main.m

查看svn有哪些命令:svn help 
错误提示:"is not a working copy",必须在svn的工作目录下才能正确使用svn的命令
查看文件的状态(判断文件是否已添加到代码仓库):svn status

第列本地文件状态说明:描述文件被添加、删除或其他修改

    '?' 新建的文件还没有被添加到本地仓库管理里。svn不识别该文件,或者该文件被删除过, 或者该文件是新添加的文件还没有被本地代码仓库进进行管理。
    'A' 文件被添加到本地代码仓库,但是还未添加到服务器中(服务器的仓库还未管理该文件)文件已经被添加到本地仓库管理中(执行了svn add命令),但是还未添加到服务器中(服务器的仓库还未管理该文件)。
    'M' 本地文件被修改。该文件已经被本地仓库管理,并且服务器仓库也有该文件。该状态表示新修改了文件,修改的内容还没有被提交到服务器。
    'D' 被删除。该文件已经在本地进行了删除,但是还没有将删除操作共享给服务器。
    ' ' 没有修改
    'C' 冲突
    'I' 被忽略
    'R' 被替换
    'X' 外部定义创建的版本目录
    '!' 文件丢失或者不完整(不是通过svn命令删除的文件)
    '~' 受控文件被其他文件阻隔
--------------------------------------------------------
将新的文件添加到SVN本地代码仓库中:svn add main.m 
    (用touch创建的文件,必须要写这条命令;如果是用Xcode创建的文件,Xcode会自动帮我们添加到本地仓库中,不需要再执行add命令)

将本地仓库中的文件提交到服务器仓库中:svn commit -m “注释”
解决冲突:svn resolved person.h
查看更新的版本日志:svn log
           

【新人加入公司一般要做什么事情】:

  1. 配置电脑和开发的软件环境。
  2. 向项目经理要 SVN服务器的地址 、SVN账号、密码。(项目经理会去SVN服务器里配置一个user,然后把你加入到代码仓库的某一个组里面)

    获取公司项目代码:svn checkout 服务器地址 –username=用户名 –password=密码

  3. 需求文档(知道:功能有哪些、界面有哪些、怎么布局、详细需要做哪些需求,产品人员提需求)
  4. 接口文档(知道:怎么去服务端请求数据)
  5. 效果图 (界面布局的详细参数,设计来做)

命令总结

1.  将服务器完整的代码下载到本地(只做一次)
    svn checkout 服务器地址 --username 用户名 --password 密码
2.  将文件添加到svn本地仓库管理(只限用命令touch创建的文件,用Xcode创建的文件省略这一步)
    svn add 文件名
3.  提交代码
    svn commit -m "提交的注释说明"
4.  更新代码
    svn update  
           

文件冲突:

• 报错:…out of date:文件过期

• 解决:

把本地的代码更新到最新版本,再提交。

再提交如果有冲突(conflict)需解决一下冲突问题,再提交就OK。

• 什么情况下不能提交代码?

当本地的版本号小于服务器的版本号时代码是不能提交。

• 出现冲突时,终端会让你选择下一步的操作select:

(p) postpone:对比所有的冲突(会生成几个临时文件)。

(mc) mine-conflict:使用我的。当发生代码冲突的时候,使用我的代码。覆盖服务器代码。

(tc) theirs-conflict:使用对方的。当发生代码冲突的时候,使用服务器的代码。覆盖本地代码。

注意:使用mc和tc总会覆盖一个人的代码。

冲突代码对比:
<<<<<<<< .mine
表示该位置是我的代码
=============
该位置是服务器的代码
>>>>>>>> .r11 
           

SVN版本回退:

思路一:

○ 本地回退到第6个版本:svn update -r 6

○ 然后对本地版本6进行少许编辑,目的是再提交使产生冲突。

○ 冲突后,选择使用我的代码(mc)以提交后覆盖服务端的代码。

○ 提交:svn commit -m “回退到第六个版本”

思路二(推荐):

○ 本地回退到第6个版本的内容。合并命令:svn merge -r 11:6 main.m

(将文件mian.m的内容从 版本11的内容 回退到 版本6的内容)

○ 提交:svn commit -m “回退到第六个版本”

Cornerstone 图像化管理工具

1. 添加一个远程仓库(可以通过图形化界面工具查看远程仓库里有哪些代码,之前我们是通过浏览器和服务器才能查看)

点击Add Repository —》选择HTTP Server —》填写服务器地址、端口、路径、昵称、用户名、密码。

2. 导出代码库到本地,点击checkout按钮下载整个仓库

3. 本地目录下使用Xcode新建项目(注意:不要勾选 git,两套源代码管理同时存在会发生冲突)

4. 提交代码(一般不用xcode来提交源代码,因为会提交一些无效的代码,如:记录、日志、路径配置等文件)

注意:多个人不能同时修改storyboard,这样很容易出现冲突,不好修改。
           

如何上传静态库?

打包成静态库(.a文件),可以把一些文件打包成.a静态库。(如,可以把所有的.m文件打包成静态库)

.a静态库必须使用命令行才能把它加入到我们的本地仓库管理里。

如:svn add libRegex.a

忽略一些不需要上传的文件:

提交文件时需要忽略的文件有(提交的文件要都是别人用得着的文件):

xcode的配置文件:

xcshareddata文件:记录了远程仓库的地址,每个人都有自己的远程仓库地址,你不需要把自己的地址共享给别人。

xcuserdata文件:它里面包含了文件夹的打开结构/当前用户停留在哪一个文件中/用户打的断点。

项目经理初始化项目时,需要删除一些不需要的文件(如配置文件、这些文件在开发中不需要每个人都提交),删除后,程序员在开发中提交代码时就会自动忽略掉这些不需要的文件。

SVN仓库目录结构:

• trunk(主干目录:项目最新版本的开发目录,目前项目正在开发的版本,通常进入公司之后在该目录下开发)

• tags(备份目录:做重大项目版本的备份,可以备份项目的某一个版本。一般存放已经上线的重大版本)

• branches(分支目录:做旧版本修复。操作步骤:先把备份目录中的需要修复的版本项目拷贝到分支目录中,然后进行修复工作,修复完后再把修复的版本在tags目录下备份一份,最后把修复的版本和trunk主干目录下的最新版本进行合并)

当历史版本发生重大bug或者有新需求时,需要在branches目录下进行开发。

SVN思维导图:

SVN笔记PPT