为何会出现源代码管理工具?安全
为了解决在软件开发过程当中,由源代码引起的各类蛋疼、繁琐的问题服务器
源代码会引起哪些问题?app
没法后悔:作错了一个操做后,没有后悔药能够吃分布式
版本备份:费空间、费时间svn
版本混乱:因版本备份过多形成混乱,难于找回正确的想要的版本工具
代码冲突:多人操做同一个文件(团队开发中的常见问题)post
权限控制:没法对源代码进行精确的权限控制spa
追究责任:出现了严重的BUG,没法得知是谁干的,容易耍赖命令行
… …3d
源代码管理工具就是为了解决上述问题而生的!此乃软件开发的一大福音!
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"手动解决冲突"