SVN版本控制

很久以前用的SVN管理代码!!!许久没使用了,老知识回顾!!!
按照自己惯例,一篇文章!!!😂😂😂😂😂




版本控制(Version Control)的作用:追踪文件的变化。

文件备份
文件名中存储版本号或者日期
多人编辑的环境下,共享一个文件目录,要求每个人编辑完以后,在文件上出所需的标识


版本控制系统:

简称:VCS,也叫做“文件数据库”,追踪 文件变化,避免出现混乱。


版本库:

版本库又名仓库,英文名:repository
可以理解成一个目录,这个目录里面所有文件都可以被版本控制系统管理,各文件的“修改”、“删除”都能跟踪,以便何时都可以追踪历史,在将来任一时刻都可“还原”。



Git与SVN区别:

Git:每个人电脑里都有完整的版本库

分布式:Git



SVN:版本库是集中存放在中央服务器。
集中式: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个权限文件: authzpasswdsnvserve.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/SVNsGYHdeMacBook-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服务器环境。


使用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目录下(后面双引号中的"初始化导入"是注释)。



2.从服务器端 下载代码到客户端本地checkout

格式: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



5.svn其他用法svn help

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用法浅析

MAC下SVN的常用命令
subversion的使用总结





常见报错,参考:






goyohol's essay

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容