内向基金完成首轮募资
06-17
最近在公司又开始玩SVN了。这里给大家总结一下。
基本上在公司里,要么使用git,要么使用SVN进行代码管理。作为一名程序员,这些工具你还是需要熟悉SVN的使用。
本期孙明寿给大家分享一些SVN相关的知识点。只要能用就可以了。
如果你不知道,可以查看相关文档。 SVN官网:SVN源代码:它是一个开源的版本控制系统,这意味着Subversion管理随时间变化的数据。
该数据被放置在中央存储库中。该存档很像常规文件服务器,但它会记住每个文件更改。
通过这种方式,您可以将文件恢复到旧版本,或浏览文件的更改历史记录。主要功能 (1) 目录版本控制 CVS 只能跟踪单个文件的历史记录,但 Subversion 实现了一个“虚拟”版本控制文件系统,可以跟踪整个目录随时间的变化。
目录和文件都可以进行版本控制。 (2)真实版本历史 由于CVS限制了文件版本记录,CVS不支持可能发生在文件上但会影响目录内容的操作,例如复制和重命名。
另外,在 CVS 中,您无法用同名但不继承旧版本历史记录或根本不相关的文件替换系统中已包含的文件。在 Subversion 中,您可以添加、删除、复制和重命名文件或目录。
所有新添加的文件都以新的干净版本开始。 (3)自动提交提交动作。
要么整个??文件更新到存档,要么更新不完整。这允许开发人员以逻辑间隔构建和提交更改,从而防止部分提交成功时出现问题。
(4) 版本控制中包含的元数据。每个文件和目录都附加有一组属性关键字并与属性值相关联。
您可以创建并存储任何您想要的键/值对。属性随着时间的推移而版本化,就像文件内容一样。
(5)选择不同的网络层。 Subversion有一个抽象的档案访问概念,它允许人们轻松地实现新的网络机制。
Subversion 可以作为扩展模块嵌入到 Apache HTTP 服务器中。这为Subversion提供了非常先进的稳定性和互操作能力,此外还提供了许多重要的功能:例如身份验证、授权、在线压缩和文件库浏览等。
还有一个轻量级独立 Subversion 服务器,它使用自定义通信协议,并且可以通过 ssh 轻松建立隧道。 (6) 一致的数据处理方法 Subversion 使用二进制差异算法来表示文件差异。
它平等地对待文本(人类可以理解的)和二进制文件(人类无法理解的)。两种类型的文件均以压缩形式同等地存储在存档中,并且文件差异通过网络双向传输。
(7) 有效的分支和标签 分支和标签的消耗不一定要与项目的规模成正比。 Subversion 创建分支和标签的方式就是使用类似于硬链接的方法复制项目。
所以这些操作只会花费很少的时间并且需要固定的时间。 (8) HackabilitySubversion没有任何历史包袱;它主要是一组具有明确定义的 API 的共享 C 库。
这使得 Subversion 易于其他应用程序和编程语言维护和使用。基本概念 存储库(源代码库):统一存放源代码的地方。
签出(提取):当您手头没有源代码时,您需要从存储库中签出一份副本。 Commit(提交):当你修改了代码后,需要Commit到repository更新(update):当你签出了一个源代码后,Update它,就可以将其与Repository上的源代码同步,并且代码你的手中将会有最新的变化。
日常的开发流程其实就是这样的。 (假设你已经签出并已经工作了几天):更新(获取最新代码)-->进行自己的更改并调试成功-->提交(每个人都可以看到你的更改)。
如果两个程序员同时修改同一个文件,SVN可以合并两个程序员的修改。事实上,SVN以行为单位管理源代码。
也就是说,只要两个程序员不修改同一行程序,SVN就会自动合并两次修改。如果在同一行,SVN会提示文件冲突,需要手动确认。
SVN安装下载地址:该操作用于创建新版本库。在大多数情况下,此操作只会执行一次。
当您创建新存储库时,版本控制系统将要求您提供一些信息来标识该存储库,例如创建它的位置和存储库的名称。签出 签出操作用于从存储库创建工作副本。
工作副本是开发人员的私有工作区,可以在其中修改内容然后将其提交到存储库。 Update 顾名思义,更新操作用于更新存储库。
此操作将工作副本与存储库同步。由于存储库由整个团队共享,因此当其他人提交更改时,您的工作副本将过期。
我们假设汤姆和杰瑞是一个项目的两个开发人员。他们同时从存储库中检查了最新版本并开始工作。
至此,工作副本与存储库完全同步。然后,Jerry 高效地完成了他的工作,并将更改提交到存储库。
此时 Tom 的工作副本已过期。更新操作将从存储库中提取 Jerry 的最新更改并更新 Tom 的工作副本。
执行更改 签出后,您可以执行许多操作来执行更改。编辑是最常用的操作。
您可以编辑现有文件,例如添加/删除文件。您可以添加文件/目录。
但是,这些添加的文件目录不会立即成为存储库的一部分。相反,它们将被添加到挂起的更改列表中,并且在执行提交操作之前不会成为存储库的一部分。
同样,您可以删除文件/目录。删除操作会立即从工作副本中删除文件,但实际删除文件只是将其添加到挂起的更改列表中,直到执行提交操作后才会真正删除。
重命名操作可以更改文件/目录的名称。 “移动”操作用于将文件/目录从存储库中的一个位置移动到另一个位置。
查看更改 当您签出或更新工作副本时,您的工作副本将与存储库完全同步。但是,当您对工作副本进行一些修改时,您的工作副本将比存储库更新。
在提交之前检查您的更改是一个很好的做法。状态操作列出了工作副本中所做的更改。
正如我们之前提到的,您对工作副本所做的任何更改都会成为待处理更改列表的一部分。 Status 操作用于查看此待定更改列表。
Status 操作仅提供更改列表,但不提供更改的详细信息。您可以使用 diff 操作来查看这些更改的详细信息。
修复错误 假设您对工作副本进行了很多更改,但现在您不想要这些更改,那么恢复操作将帮助您。恢复操作会重置对工作副本的修改。
它可以重置一个或多个文件/目录。当然它也可以重置整个工作副本。
在这种情况下,恢复操作将销毁挂起的更改列表并将工作副本恢复到其原始状态。解决冲突 合并期间可能会发生冲突。
合并操作会自动处理可以安全合并的内容。其他人将被视为冲突。
例如,“hello.c”文件在一个分支上被修改,并在另一分支上被删除。这种情况需要手动处理。
Resolve操作用于帮助用户发现冲突并告诉存储库如何处理这些冲突。提交更改 提交操作用于将更改从工作副本移至存储库。
此操作会修改存储库的内容,其他开发人员可以通过更新其工作副本来查看这些更改。在提交之前,您必须将文件/目录添加到挂起的更改列表中。
将提交的更改记录在列表中。提交时,我们通常会提供注释来解释进行更改的原因。
此评论也将成为存储库历史记录的一部分。提交是一个原子操作,这意味着要么提交成功,要么提交失败并回滚。
用户不会看到成功提交的一半。 SVN创建仓库并进入/opt/svn/sunjiaoshou01/conf目录,修改默认配置文件配置,包括svnserve.conf、passwd、authz,配置相关用户和权限。
1. svn 服务配置文件 svnserve.conf svn 服务配置文件是存储库目录中的文件conf/svnserve.conf。该文件仅包含 [general] 配置部分。
代码语言:javascript 复制 【通用】 anon-access = noneauth-access = writepassword-db =/home/svn/passwdauthz-db =/home/svn/authzrealm = tikuanon-access:控制非认证用户访问的权限存储库,取值范围为“write”、“read”和“none”。即“write”表示可读可写,“read”表示只读,“none”表示无访问权限,默认值为:读。
auth-access:控制经过身份验证的用户访问存储库的权限。可能的值范围是“写”、“读”和“无”。
即“write”表示可读可写,“read”表示只读,“none”表示无访问权限,默认值为:write。 authz-db:权限配置文件名,通过该文件可以实现基于路径的访问控制。
除非指定绝对路径,否则文件位置是相对于conf 目录的。默认值:authz。
realm:指定仓库的认证域,即登录时提示的认证域名。如果两个仓库的认证域相同,建议使用相同的用户名和密码数据文件。
默认值:一个UUID(Universal Unique IDentifier,全局唯一标识符)。 2、用户名密码文件passwd 用户名密码文件由svnserve.conf的配置项password-db指定,默认为conf目录下的passwd。
该文件仅包含 [users] 配置部分。 [users]配置节的配置行格式如下: 代码语言:javascript 复制 [users] admin=adminthinker=,权限配置文件 权限配置文件由svnserve.conf的配置项authz-db指定,默认是conf目录下的authz。
配置文件由 [groups] 配置部分和几个存储库路径权限部分组成。 [groups]配置节中的配置行格式如下: 代码语言:javascript 复制 [groups]g_admin = admin, thinker [admintools:/]@g_admin= rw*=[test:/home/thinker]thinker = rw *= rSVN check 运行后,我们创建了仓库sunjiaoshou01,URL为用户user01拥有读写权限。
我们可以通过这个URL查看客户端上的存储库。svn checkout --username=user01 上述命令将产生以下结果: 代码语言:javascript 复制 root@sunjiaoshou:~/svn# svn checkout sunjiaoshou01/trunkA sunjiaoshou01/分支A sunjiaohsou01 /tagsCheckedout revision 1.签出成功后,会在当前目录下生成sunjiaoshou01的副本目录。
查看勾选内容 代码语言:javascript copy root@sunjiaoshou:~/svn# ll sunjiaoshou01/total 24drwxr-xr-x 6 root root Jul:19./drwxr-xr-x 3 root root Jul:10../drwxr - xr-x 2 根根 7 月:19 个分支/drwxr-xr-x 4 根根 7 月:19.svn/drwxr-xr-x 2 根根 7 月:19 个标签/drwxr-xr-x 2 根根 7 月:19 干线/SVN解决冲突 版本冲突的原因: 假设用户A和B都更新了文件kingtuns.txt,版本号为 。用户A修改完成后向服务器提交kingtuns.txt。
此时提交成功。此时kingtuns.txt文件的版本号发生了变化。
同时,用户B对kingtuns.txt文件进行版本号修改。修改完成后,提交到服务器时,提交失败,因为修改不是在最新版本上进行的。
对于SVN提交操作,我们查看了版本库sunjiaoshou01,对应的目录放在/home/user01/sunjiaoshou01。接下来,我们对该库进行版本控制。
查看工作副本中的状态码 语言:javascript copy root@sunjiaoshou:~/svn/sunjiaoshou01/trunk# svn statusA readme 此时readme状态为A,说明该文件已成功加入版本控制。为了将readme存储在存储库中,请使用commit -m加上注释信息来提交。
如果省略 -m 选项,SVN 将打开一个多行文本编辑器供您输入提交消息。代码语言:javascript copy root@sunjiaoshou:~/svn/sunjiaoshou01/trunk# svn commit -m "SVN readme."添加readme传输文件数据.提交修订版本8.svn commit -m "SVN readme."当我们回滚SVN版本时如果想放弃对文件的修改,可以使用SVN revert命令。
代码语言: javascript copy root@sunjiaoshou:~/svn/sunjiaoshou01/trunk# svn revert readme Reverted'readme' revert 操作后,readme 文件恢复到原来的状态。恢复操作不仅可以恢复单个文件,还可以恢复整个目录。
如果我们想恢复已经提交的版本怎么办?要消除旧版本,我们必须撤消旧版本中的所有更改并提交新版本。此操作称为反向合并。
首先找到当前版本库,现在是版本22。我们要撤销回之前的版本,比如版本21。
代码语言:javascript copy svn merge -r 22:21 readmeSVN 查看历史信息可以使用svn 命令根据时间或修订号或对某个版本所做的特定修改来删除过去的版本。可以使用以下四个命令来查看svn的历史记录: svn log:用于显示svn版本作者、日期、路径等。
svn diff:用于显示特定修改的行级详细信息。 svn cat:获取特定版本的文件并显示在当前屏幕上。
svn list:显示某个目录或某个版本中存在的文件。 SVN分支分支选项将为开发人员创建另一条线路。
当想要将开发过程分成两条不同的线时,此选项非常有用。比如项目demo下有两个组,svn下有一个trunk版本。
由于客户需求突然发生变化,项目需要进行重大变更。这时,项目组决定由Team 1继续完成原来的中途工作(某个模块),Team 2开发新的需求。
那么这个时候我们就可以为组2创建一个分支,这个分支其实就是主干版本(主线)的一个副本。但分支也具有版本控制功能,并且独立于主线。
当然,最后,我们可以通过(merge)功能将分支合并到主干中,最终合并成一个项目。 SVN标签(tag)版本管理系统支持tag选项。
通过使用标签的概念,我们可以给特定版本的代码起一个更有意义的名称。标签主要用于项目开发中的里程碑。
例如,当开发到一定阶段时,可以发布单独的版本等,它往往代表一个可以修复的完整版本,与VSS中的Tag大致相同。这个基本操作比较简单。
是与git的思路基本一致的代码指令操作。如果你熟练使用git的话,直接过一遍知识点就可以了。
使用SVN时,一般最好使用可视化工具,而不是使用命令!好了,本期SVN内容孙明寿就分??享到这里了。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-17
06-17
06-17
06-17
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用