很久以前用的SVN管理代码!!!许久没使用了,老知识回顾!!!
按照自己惯例,一篇文章!!!😂😂😂😂😂
版本控制(Version Control)的作用:追踪文件的变化。
文件备份;
文件名中存储版本号或者日期;
多人编辑的环境下,共享一个文件目录,要求每个人编辑完以后,在文件上做出所需的标识。
版本控制系统:
简称:VCS,也叫做“文件数据库”,追踪 文件的变化,避免出现混乱。
版本库:
版本库又名仓库,英文名:repository。
可以理解成一个目录,这个目录里面的所有文件都可以被版本控制系统管理,各文件的“修改”、“删除”都能跟踪,以便何时都可以追踪历史,在将来任一时刻都可“还原”。
Git与SVN区别:
Git:每个人电脑里都有完整的版本库
SVN:版本库是集中存放在中央服务器。
集中式版本控制系统最大的毛病就是必须联网才能工作。
SVN
在Windows环境下,一般使用“TortoiseSVN”;
在Mac环境下,由于Mac自带了SVN的服务器端和客户端功能,所以不安装任何第三方软件就可以使用 SVN功能,需要做一些简单的配置。
搭建SVN服务器
先在任一目录(/User/gyh/)下新建一个SVNs目录,以后就可以在SVNs目录(/Users/gyh/SVNs)下创建(放置)多个仓库目录。
打开终端,创建一个repoOfmy仓库,输入指令:svnadmin create /Users/gyh/SVNs/repoOfmy
指令执行成功后,硬盘上多一个“/Users/gyh/SVNs/repoOfmy”目录,其目录结构如下:
配置svn用户权限:(conf文件夹)
在“/Users/gyh/SVNs/repoOfmy/conf/”目录下,有3个权限文件: authz、passwd、snvserve.conf
GYHdeMacBook-Pro:conf gyh$ ls
authz hooks-env.tmpl passwd svnserve.conf
-
打开authz:用户权限分配内容 (
vi authz
)
# 用户组
(添加用户组的成员)
[groups]
# admins是组名,admin是组员(可以写多个,用“,”分隔。如:admins=admin,gyh,coco)
admins=admin
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
# 设置目录权限
(成员的权限设置)
# [/foo/bar]
# harry = rw
# &joe = r
# * =
[/]
@admins=rw
# 意思是:admins组里面的成员都有rw的权限,rw:读写权限, 也可以写成admin=rw,只赋予admin用户有读写权限
# 这里如果不写,代表:下一级目录的用户不具备继承关系,也就是没有访问的权限。
* = r:别的用户只能读; * = rw:其他的用户也有继承关系(具备读/写权限)
-
打开passwd:配置svn用户的密码 (
vi passwd
)
[users]
# 与authz的用户名对应,后面是用户密码
admin=abc123
# harry = harryssecret
# sally = sallyssecret
-
打开svnserve.conf:svn的配置信息 (
vi svnserve.conf
)
配置项如下: (#
和空格都去掉)
# anon-access = read
#匿名用户有读的权限
# auth-access = write
#登录用户的写的权限
# 关联passwd(需要放开注释)
# password-db = passwd
# 关联authz (需要放开注释)
# authz-db = authz
最终:
# 禁用匿名用户读的权限
anon-access = none
# 登录用户有写的权限
auth-access = write
# 关联passwd.
password-db = passwd
# 关联authz
authz-db = authz
启动 svn服务器: [ ]( svnserve -d -r /Users/gyh/SVNs )
GYHdeMacBook-Pro:conf gyh$ svnserve -d -r /Users/gyh/SVNs
或 GYHdeMacBook-Pro:conf gyh$ svnserve -d -r /Users/gyh/SVNs/repoOfmy
(不能再加“/mycode”的子目录,否则导入代码会长时间没反应)
重复 启动服务器,会报错:
GYHdeMacBook-Pro:conf gyh $ svnserve -d -r /Users/gyh/SVNs
GYHdeMacBook-Pro:conf gyh $ svnserve -d -r /Users/gyh/SVNs
svnserve: E000048: Can't bind server socket: Address already in use
这样就搭建了svn服务器环境。
使用svn客户端功能
1.从本地导入(import)代码到服务器 (第一次:初始化导入)
格式:
svn import 工程的路径 服务器地址 --username=用户名 --password=密码 -m "注释内容"
例子:
svn import /Users/gyh/Documents/project svn://localhost/ios/project --username=gyh --password=abc123 -m "初始化导入"
svn import /Users/gyh/Documents/project https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化导入"
(https:对应的服务器地址)将“/Users/gyh/Documents/project”中的所有内容,上传到服务器ios仓库的project目录下(后面双引号中的"初始化导入"是注释)。
格式:
svn checkout 服务器地址 --username=用户名 --password=密码 存储在本地的路径
例子:
svn checkout https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化导入" /Users/gyh/Desktop/project
(https:对应的服务器地址)将服务器中project仓库的内容下载到本地的“/Users/gyh/Desktop/project”目录中。
svn import /Users/gyh/Desktop/Company/svnDocuments https://123.45.67.890/svn/res/项目文档 --username=gyh --password=abc123 -m "import first"
500 svn checkout https://123.45.67.890/svn/res/项目文档 --username=gyh --password=abc123 /Users/gyh/Desktop/Company/svnDocuments
3.提交 (commit) 已经更改过的代码到服务器 (非文件路径的修改)
- <1>.先定位到“/Users/gyh/Desktop/project”目录
cd /Users/gyh/Desktop/project”
- <2>.输入提交指令
格式:svn commit -m "修改的内容"
例子:
cd /Users/gyh/Desktop/project”
svn commit -m "修改了plist文件"
将“/Users/gyh/Desktop/project”下的所有修改都同步到服务器端。
4.更新:服务器端的代码到客户端 (svn update
)
cd /Users/gyh/Desktop/project”
svn update
GYHdeMacBook-Pro:ios gyh$ svn help
usage: svn <subcommand> [options] [args]
Subversion command-line client.
Type 'svn help <subcommand>' for help on a specific subcommand.
Type 'svn --version' to see the program version and RA modules
or 'svn --version --quiet' to see just the version number.
Most subcommands take file and/or directory arguments, recursing
on the directories. If no arguments are supplied to such a
command, it recurses on the current directory (inclusive) by default.
Available subcommands:
add
auth
blame (praise, annotate, ann)
cat
changelist (cl)
checkout (co)
cleanup
commit (ci)
copy (cp)
delete (del, remove, rm)
diff (di)
export
help (?, h)
import
info
list (ls)
lock
log
merge
mergeinfo
mkdir
move (mv, rename, ren)
patch
propdel (pdel, pd)
propedit (pedit, pe)
propget (pget, pg)
proplist (plist, pl)
propset (pset, ps)
relocate
resolve
resolved
revert
status (stat, st)
switch (sw)
unlock
update (up)
upgrade
Subversion is a tool for version control.
For additional information, see http://subversion.apache.org/
其中,括号中的内容 一般代表着指令的简称。
比如:用svn ci
代替svn commit
,用svn co
代替svn checkout
。
SVN的步骤:
svn add *
// 添加所有路径
最简步骤:
<1>.先定位到“/Users/gyh/Desktop/project”目录
cd /Users/gyh/Desktop/project”
<2>.输入提交指令
格式:svn commit -m "修改的内容"
标准步骤:
a. repository(源代码库):源代码统一存放的地方
b. Checkout (提取):当你手上没有源代码的时候,你需要从repository里checkout一份
svn checkout svn地址
c. Commit(提交):当你已经修改了代码,你就需要Commit到repository
svn commit -m "修改的内容"
d. Update(更新):当你已经Checkout了一份源代码, Update一下,就可以和Repository上的源代码进行同步,手上的代码就会有最新变更。
开发过程:
已Checkout好的代码 → Update(获得最新的代码) → 作出自己的修改并调试成功 → Commit(提交后,大家就可以看到你的修改)
多人开发:(跟git类似)
如果两个程序员同时修改了同一个文件,SVN可以默认Merge这两个程序员的改动。(Merge:合并)
实际上SVN管理源代码是以“行”为单位的:
两个程序员只要修改的不是程序的同一行,SVN都会自动合并两种修改;
如果是同一行呢,SVN会提示:文件Confict(冲突)。需要手动确认、解决。
参考:
SVN子命令add用法浅析