Svn 命令行 操作 Subversion 服务器 之 检出、提交、更新

本文导读

  • 本文承接《SVN 创建版本库 与 启动 SVN 服务
  • 如下图所示, SVN 服务器已经安装启动成功,而且 SVN 仓库也配置成功,现在就可以通过 SVN 客户端进行操作 SVN 了。

  • 操作 SVN 服务器主要有以下几种方式

1)Subversion 服务器安装后自带命令行客户端,如下图所示,为安装目录的 bin 目录中的 svn.exe 程序,本文就是讲这种方式。

2)如 Eclipse、MyEclipse、IDEA 等 Java 编辑器本身可以集成 SVN 插件进行操作 SVN 服务器

3)使用图形化的 SVN 客户端,如同使用 Mysql 数据库一样,也很少会在命令行中使用 SQl,也是使用的图像化客户端,SVN 的图像化客户端通常使用的是 TortoiseSVN。

  • 注意:如果想使用 tortoisesvn 图形化客户端的,可以从官网下载: https://tortoisesvn.net/downloads.html,安装非常简单,和普通的软件安装一致,安装后是英文的,操作也无非就是 检出、提交、更新、然后内容冲突处理、版本回退等操作。

环境准备

  • 如下所示 E:\SvnRepository 为 SVN 版本库根目录,dog 为具体的版本库,下面的目录都是创建版本时默认生成的文件

  • 如下所示,用 E:\SvnWorkspace 表示程序员的开发目录,其中有两个程序员,Joni 与 Tom,此时这两个字目录是空的,以后他们会从 SVN 服务器将项目下载到自己的目录下进行开发。 

  • 因为在 Windows 上为 SVN 注册服务没有成功,不能使用 Windows 服务启动,所以现在直接使用 cmd 命令行启动:
C:\Users\Administrator.SC-201707281232>svnserve -d -r E:\SvnRepository

SVN 命令行操作

  • 使用 Subversion 服务器自带 svn 命令行客户端,好处就是可以通过代码来控制它,比如可以在 Java 代码中来使用这些命令进行操作
  • SVN 虽然是版本控制系统,但是因为具有上传下载的功能,完全也可以当做一个普通的同步软件来用,本地的文件可以同步到 SVN 服务器上等等。
  • 可以安装 Subverion 后不做 SVN 服务器,而只是使用它的 svn.exe 客户端也是可以的。
  • SVN 命令远不止本文讲述的这些,还有很多其它的命令,可以使用 svn help 命令进行查看,其余的本文不再说明。

检出

  • 项目组开发时,程序员第一步便是要从 SVN 服务器上将项目下载(检出)下来
  • 检出命令格式为:

命令格式:svn checkout svn://SVN服务器主机地址/具体仓库目录 保存检出内容的目录

举例:svn checkout svn://localhost/dog E:\SvnWorkspace\Joni\dog

  • 现在假设 Joni 先开始从 SVN 服务器进行项目检出操作,检出 svn 服务器上项目 dog 
C:\Users\Administrator.SC-201707281232>svn checkout svn://localhost/dog E:\SvnWorkspace\Joni\dog
Checked out revision 0.

C:\Users\Administrator.SC-201707281232>

  • .svn 目录用来保存与服务器交互的重要信息,其中包括从服务器端取回的最新版本信息、文件状态、更新时间等,SVN 正是以此为依据判断当前目录中文件的状态,.svn 隐藏目录千万不要删除或修改其中的内容
  • 如果服务器端保存的文件视为一个“正本”,那么每个开发人员检出到本地目录的文件可以视为“副本”,通常称为工作副本。
  • 注意如上所示目录上的绿色小图标是因为电脑上安装 TortoiseSVN 客户端的缘故,没有时也不影响。

提交

  • 检出成功之后,现在在本地的工作副本中新建一个文件 README.txt,写点内容,之后会提交它到 SVN 服务器上去

  • 提交命令格式如下:

svn add xxx:将 xxx 先纳入到 SVN 版本控制,本地的新内容,提交之前必须先 add 添加,从 svn 检出的内容除外

svn commit -m "描述" xxx:将 xxx 内容提交到 svn 服务器上,对于新内容提交,必须先 add 添加到版本控制中,-m 指定提交的描述信息,必须指定。

  • 还有一个注意点:客户端提交操作是需要权限的,这个权限需要在 SVN 服务器上的 版本库中进行配置,每个版本库中都有一个 conf 目录,其下有一个 svnserve.conf 配置文件,如下所示可设置权限:

anon-access = read:匿名用户只读
anon-access = write:匿名用户可读可写
auth-access = write:安全认证的用户可读可写
auth-access = read:安全认证的用户只读

  • 因为现在是命令行操作,主要是为了学习操作命令,所以先使用匿名用户操作,匿名用户可写。
  • SVN 服务器版本库配置文件修改后,不需要重启 SVN 服务,可以直接操作,现在开始正式操作。

C:\Users\Administrator.SC-201707281232>svn add E:\SvnWorkspace\Joni\dog\REAME.txt
A         E:\SvnWorkspace\Joni\dog\REAME.txt

C:\Users\Administrator.SC-201707281232>

  • 注意如上所示目录/文件上的小图标是因为电脑上安装 TortoiseSVN 客户端的缘故,没有时也不影响。

更新

  • 更新是客户端从 SVN 服务器上下载与本地工作副本不同的内容,依赖.svn目录,可以操作多次。
  • 现在开发人员 Tom 也开始进行工作了,第一步同样是项目检出,如下所示,已经将原来 Joni 添加的 README.txt 内容也一并下载下来了
C:\Users\Administrator.SC-201707281232>svn checkout svn://127.0.0.1/dog E:\SvnWorkspace\Tom\dog
A    E:\SvnWorkspace\Tom\dog\REAME.txt
Checked out revision 1.

C:\Users\Administrator.SC-201707281232>

  • 注意如上所示目录/文件上的小图标是因为电脑上安装 TortoiseSVN 客户端的缘故,没有时也不影响。
  • 如上所示,Tom 设计好了数据库文本文件,开始进行提交到 SVN 上去,如下所示,第一步先添加到版本控制中:
C:\Users\Administrator.SC-201707281232>svn add E:\SvnWorkspace\Tom\dog\数据库设计手册.txt
A         E:\SvnWorkspace\Tom\dog\数据库设计手册.txt

C:\Users\Administrator.SC-201707281232>

  • 如下所示,进行提交:
C:\Users\Administrator.SC-201707281232>svn commit -m "tom commit" E:\SvnWorkspace\Tom\dog\数据库设计手册.txt
Adding         E:\SvnWorkspace\Tom\dog\数据库设计手册.txt
Transmitting file data .done
Committing transaction...
Committed revision 2.

C:\Users\Administrator.SC-201707281232>

  • 注意如上所示目录/文件上的小图标是因为电脑上安装 TortoiseSVN 客户端的缘故,没有时也不影响。
  • 好的接下来才是重点,也就是更新操作,上面 Tom 提交了 数据库设计手册到了 SVN 服务器上,现在第二天开始上班了 所有人都应该进行更新操作,将自己本地项目更新到 svn 服务器上的最新版本。
  • 现在 Joni 打开电脑,开始执行更新操作了,格式为:

svn update xxx:更新 xxx 项目,可以是目录,也可以是文件

  • 如下所示更新 Joni 的工作副本 dog 项目:
C:\Users\Administrator.SC-201707281232>svn update E:\SvnWorkspace\Joni\dog
Updating 'E:\SvnWorkspace\Joni\dog':
A    E:\SvnWorkspace\Joni\dog\数据库设计手册.txt
Updated to revision 2.

C:\Users\Administrator.SC-201707281232>

  • 检出:从服务器端下载最新内容,下载整个项目,创建 .svn 目录,使检出目录成为工作副本,只能操作1次
  • 更新:下载与本地工作副本不同的内容,依赖.svn目录,可以操作多次

工作副本状态

  • svn 客户端从 SVN 服务器上检出的项目称为工作副本,工作副本中的文件有如下几种状态:

① 没有修改,现行版本

本档案在工作目录中没有被修改,而且自当前版本之后,其他终端也没有任何该文件的修改被提交到服务器,即当前工作副本的版本和服务器端最新版本是一致的,对它执行svn commit 和svn update都不会发生任何事。

② 本地修改, 现行版本

这个文件被修改过,但这个修改还没有提交到服务器,而且自当前版本之后,其他终端也没有任何该文件的修改被提交到服务器,所以当前工作副本的版本和服务器端最新版本仍然是一致的。由于有尚未送交回去的本地修改,所以对它的 svn commit 会成功提交你的修改,而 svn update 则不会作任何事。

③ 没有修改,过时版本

这个文件没有修改,但是版本库中有其他终端提交的修改,此时当前工作副本的版本比服务器端的版本落后了,称之为“过时”。对当前文件的 svn commit 不会发生任何事,而 svn update 会让工作目录中的文件更新至最新版本。

④ 本地修改,过时版本

服务器端存在没有更新到本地的修改,导致当前版本过时。如果这个文件在本地有未提交的修改,则无法提交,对它执行svn commit 会产生“out-of-date”错误。

此时应该先尝试更新本地文件。更新时SVN会尝试将服务器端的更新与本地文件进行合并,合并的结果有两种可能:一个是服务器端和本地修改位于文件的不同位置,合并成功;另一个是服务器端的修改正好和本地修改位于同一个位置,发生冲突。

猜你喜欢

转载自blog.csdn.net/wangmx1993328/article/details/82827711