源代码管理工具

    为什么会出现源代码管理工具?

为了解决在软件开发过程中,由源代码引发的各种蛋疼、繁琐的问题

 

源代码会引发哪些问题?

无法后悔:做错了一个操作后,没有后悔药可以吃

版本备份:费空间、费时间

版本混乱:因版本备份过多造成混乱,难于找回正确的想要的版本

代码冲突:多人操作同一个文件(团队开发中的常见问题)

权限控制:无法对源代码进行精确的权限控制

追究责任:出现了严重的BUG,无法得知是谁干的,容易耍赖

… …

 

源代码管理工具就是为了解决上述问题而生的!此乃软件开发的一大福音!

 

CVS

开启版本控制之门

1990年诞生,“远古时代”的主流源代码管理工具

 

SVN

全称是Subversion,集中式版本控制之王者

是CVS的接班人,速度比CVS快,功能比CVS多且强大

在国内软件企业中使用最为普遍(70%~90%)

 

 

 

 

概念:

 

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

 

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

 

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

 

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

 

 

 

操作:

 

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

 

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

 

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

 

 

GIT

一款伟大的分布式源代码管理工具

目前被越来越多的开源项目使用

不过在国内企业尚未大范围普及

--------------------------------------------------------------------------------------------------------

 

基本操作

 

服务器端按照配置

 

客户端软件使用

 

与Xcode的集成

 

1.Chectout是下载服务器上得所有文件,

2.commit 是将本地修改之后的文件提交到服务器(只提交修改之后的)

3.update是将服务器上代码更新到本地(只会更新修改的文件)

SVN使用过程

 提交代码时候报 out of date的错误,就是你从服务器上拿下来的代码,你修改后提交,但是这个你拿下来的代码在服务器上,已经被别人修改过了。

这时候你要commit上传,你必须要执行 update的操作,将服务器修改过的代码拿到本地。  这时候拿到本地以后就会把服务器上和你自己修改过的合并在一起。这时候就可以commit 上传到服务器了。

策略就是: 拷贝  修改  合并 (SVC、CVS采用)

还有比如微软的VSS:  锁定  修改  解锁的方案,弊端:不能并行开发。

 

 

 

 

 

 

 

--------------------------------------------------------------------------------------------------------------------------------------

                     SVN使用环境

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

服务器

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

可以在Windows上安装Visual SVN Server

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

 

客户端

上传本地的源代码到服务器,或者更新服务器的代码到本地,保持同步

可以在Mac上使用命令行、Versions、Cornerstone

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

Visual SVN Server下载地址

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

SVN 端口号。http 为80 HTTPs为443

 HTTP : 超文本传输协议  HTTPS : HTTP + SSL   

 

-------------------------------------------------------------------------------------------------------------------------------------

    命令行

查看   svn --help 系统提示常用命令   清除命令 clear

具体某个指令怎么用  svn help  checkout

常用UNIX命令

cd 进入目录  

pwd 查看路径

cd ../ 返回上级目录

 

 

1>  SVN基本命令

 

 

命令行格式:

 

svn <subcommand> [options] [args]

 

说明

 

svn 子命令 [选项] [参数]

 

 

 

提示:

 

#   [中括号]中包含的内容是可选的

 

#   (子命令缩写)

 

 

2>  查看帮助信息

 

$ svn help

查看svn所有命令的帮助

$ svn help 子命令

 

附录:UNIX常用命令

================================================================================

1.  cd      改变工作目录

 

2.  pwd     输出当前工作目录的绝对路径

在UNIX中要执行什么命令,一定要知道自己当前所在的工作目录

 

3.  ls      查看文件

$ ls        显示文件

$ ls -a     显示所有文件

$ ls -l     列表显示文件

$ ls -la    列表显示所有文件

$ ls -G     带颜色显示

 

4.  touch   用于更改文件访问和修改时间的标准UNIX程序,也被用于创建新文件

 

$ touch myfile.txt

 

注意:touch不修改myfile.txt内容,只更改它的访问、修改时间,如果myfile.txt不存在,它会被创建

 $ open myfile.txt  打开文件,可以直接进行编辑了。

5.  cat     连续查看文件内容

 

6.  more    分页查看文件内容

 

提示:

 

1>  命令和参数之间需要添加空格

2>  如果要使用当前目录中的文件名,输入到一半时,按TAB键能够补全

 

---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- 

重新设置账号密码的时候 应该这样: svn checkout  http://192.168.15.155/svn/weibo/ --username = ls --password=ls  

在后面加上 username password 就可以了

SVN的本质是通过一个文件夹来管理源代码,默认情况下,用于管理源代码的文件夹是隐藏的,这个隐藏的文件夹的名称为:.svn

04. SVN演练准备

================================================================================

1>  显示隐藏文件夹

# 显示隐藏文件

$ defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder

# 不显示隐藏文件

$ defaults write com.apple.finder AppleShowAllFiles No && killall Finder

 ================================================================================

1.注意:新建文件或者文件夹之后如果直接提交(直接commit)

会报如下错误:is not under version control  

该错误的含义是:提示我们提交的文件没有纳入到版本控制。

2.注意: 在提交代码的时候必须写上注释(一定要明确),否则会报错误cound find  log 什么的

commit  要加注释 :SVN commit main.c -m "第一次提交"

 

如何查看哪些文件没有“入会” 加入本地管理文件夹。 指令是:SVN status  没有加入的,前面会出现?

3. 注意: svn add 只会添加到本地管理,不会添加到服务器

---------------------------------------------------------------------- ---------------------------------------------------------------------- --------------------------------------------------------

SVN客户端命令

svn checkout :下载服务器的代码到本地 (简写svn co)

svn commit :将改动的文件提交到服务器(简写svn ci)

svn update :更新服务器的代码到本地 (简写svn up)

svn add :向本地的版本控制库中添加新文件

svn delete、svn remove :从本地的版本控制库中删除文件(简写svn del、svn rm)

svn move :移动文件或者目录或文件更名

svn mkdir :创建纳入版本控制下的新目录

svn revert :撤销之前的一切修改

svn merge :将两个版本之间的差异合并到当前文件

svn info :查看文件的详细信息 

svn diff :查看不同版本的区别

svn log :查看日志信息

svn list :列出版本库下的文件和目录列表

svn status :查看文件状态(简写svn st)

svn help :获取帮助信息(比如svn help ci)

svn lock :加锁

svn unlock :解锁

 

 

      svn st 显示的文件状态

 

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

--------------------------------------------------------------------------------

' ' 没有修改

'A' 被添加到本地代码仓库

'C' 冲突

'D' 被删除

'I' 被忽略

'M' 被修改

'R' 被替换

'X' 外部定义创建的版本目录

'?' 文件没有被添加到本地版本库内

'!' 文件丢失或者不完整(不是通过svn命令删除的文件)

'~' 受控文件被其他文件阻隔

---------------------------------------------------------------------------------------------

      反悔了,撤销 revert

1.注意:如果修改文件之后,并且文件没有提交(commit)想反悔,可以使用svn revert 这个指令,让文件回到上一次提交之前的状态(上一次下载的时候),注意是没有提交,要是提交了就不行了。

例如:先进入文件的目录后:svn revert main.m 可以悔到上次。

2.如果提交了 可以用update 解决,因为update除了可以更新服务器上得最新代码以外,还可以更新到指定的版本。(每次提交后SVN的版本号就会制动加1),版本号是唯一的,所以可以通过版本号更新到指定的版本。

例如: 进入目录后 svn update -r 3  回到第三个版本

 3.查看某个文件的日志  进入相应的目录后 SVN log  main.c  就可以看所有关于main.c的提交版本了。

---------------------------------------------------------------------------------------------

    版本控制中最常见的2个问题

1.超时

  使用SVN 有一个原则,先更新再提交。

    只有本地的版本号大于等于服务器的版本号的时候才能提交,否则会报一个out of data的错误。

这时候应该先 在该路径下,先update,然后再提交,(如果不修改同一行就不会冲突的),直接合并成一行了,然后再提交。

2.冲突

  当多个人,修改了 同一个文件的同一行代码就会报冲突的错误,Conflict discovered

我: main.c   11 行 abc

其他人: main.c 11行 45454

其他人已经提交了代码,我再提交代码就会有冲突

解决冲突 三种:

mine-conflict、代表用我们的代码替换服务器上得代码,本地的代码保留我自己写得      

:在冲突后面输入命令:1.mc  先更新成功,2.然后在commit 提交  svn ci main.c -"增加了东西"

 

theirs-conflict、代表用服务器代码替换我们的代码。本地的代码只保留服务器的,会自动删除我的

命令: tc  然后更新

postpone、自己手动解决,本地文件中会同时保留服务器代码和本地代码

命令: p

会在本地创建三个备份:

main.c.mine  备份自己最新的版本

main.c.r17 本地修改之前的版本(r17是上个版本)

main.c.r18 服务器最新版本

《《《《《《《《    中间是我们自己修改的代码 =======

========  中间是服务器最新的代码 》》》》》》》

注意:手动解决完冲突后需要告诉svn我们已经解决冲突了,这样才能保证数据的安全和SVN的可靠性

先进入路径后输入:命令:svn resolved main.c,三个备份被删除

接下来 提交代码   svn ci main.c -m"手动解决冲突"

 

  

 

posted @ 2015-05-22 19:07  平凡得脚步  阅读(665)  评论(0编辑  收藏  举报