通过Subversion的命令行,快速搭建版本库服务器端

 

软件环境:

  Svn CollabNetSubversion-server-1.5.5-1.win32

 

搭建步骤:

1 建立版本库

Svnadmin create A:/B/repository

例如: >svnadmin create d:/repository

D 盘根目录下,建立版本库 svnrepository ,当然版本库的目录可以任意指定。

 

2 修改属性文件

修改 repository/conf 中的文件内容

文件: Passwd

修改前:

[users]

# harry = harryssecret

# sally = sallyssecret

修改后:

[users]

harry = harryssecret

sally = sallyssecret

 

这样你就为版本库增加了两个用户: harry sally ,密码分别是“ = ”后面的内容。我们也可以增加用户,例如

svnuser=svnuser123

 

文件: svnserve.conf

修改前:

[general]

### These options control access to the repository for unauthenticated

### and authenticated users.  Valid values are "write", "read",

### and "none".  The sample settings below are the defaults.

# anon-access = read

# auth-access = write

修改后:

[general]

### These options control access to the repository for unauthenticated

### and authenticated users.  Valid values are "write", "read",

### and "none".  The sample settings below are the defaults.

anon-access = read

auth-access = write

 

3 添加 svn_path 环境变量

有可能不是必须要完成的步骤,此部分调查中。。。

 

4 启动服务

启动建立好的版本库服务。

命令: svnserve -d -r 版本库路径

例如: svnserve -d -r D:/repository

 

注意:启动后请勿关闭窗口,否则服务会被停掉。

 

5 导入工程到版本库中

命令: svn important 导入文件 PATH 版本库 PATH [ 参数 ]

通过 import 命令,将本地未版本化的工程导入到版本库中。导入完成后, svn 会为导入的文件设定版本号。

 

例如:将本地机器上的 E:/eclipse_workspace/jdk51 导入到版本库中

命令: C:/>svn import E:/eclipse_workspace/jdk5 file:///d:/repository/jdk5 -m "first import jdk5 on 20090317"

运行结果:

Adding E:/eclipse_workspace/jdk5/.classpath

Adding E:/eclipse_workspace/jdk5/.project

Adding E:/eclipse_workspace/jdk5/src

Adding E:/eclipse_workspace/jdk5/src/jdk

Adding E:/eclipse_workspace/jdk5/src/jdk/autoboxing

Adding E:/eclipse_workspace/jdk5/src/jdk/autoboxing/Autoboxing.java

Adding E:/eclipse_workspace/jdk5/src/jdk/bigdecimal

Adding E:/eclipse_workspace/jdk5/src/jdk/bigdecimal/Bigdecimal.java

Adding E:/eclipse_workspace/jdk5/src/jdk/compare

Adding E:/eclipse_workspace/jdk5/src/jdk/compare/Compare.java

Committed revision 1.

 

命令说明:

-m :指定导入的 log 信息。 -m 参数是必须的,但是可以指定空内容。否则的话 svn 会启动外部编辑器,编辑 log 内容

/ svn 的版本库 path ,通过 / 进行分割,而不是 windows /

运行结果说明:

Adding :表示向版本库中追加文件

Committed revision 1. :表示当前版本为 1

 

注意:

  1 import 命令导入时,并不会在版本库中建立一个跟工程名同样的文件目录。只是将本地目录下的文件导入到指定版本库的目录下面。上面的导入操作,就是将 jdk5 下面的文件以及子目录导入到 repository 下面。所以导入的时候,最好先在版本库 repository 中建立好目录

  2 对版本库下的文件进行删除,移动,拷贝,请务必使用 svn 的命令,或者客户端工具完成。如果直接在 windows 下进行删除,拷贝,粘贴操作, svn 是无法记录这些操作,同时也就失去了版本控制的意义了。

 

关于导入时发生的一些问题,参考文章最后。

 

8 查看版本库文件

命令: svn list 版本库文件目录

通过 list 命令查看版本库任意目录下的文件夹,以及文件。

 

例如:查看版本库 repository 根目录下的文件目录

命令: C:/>svn list file:///d:/repository/jdk5

运行结果:

.classpath

.project

bin/

src/

 

注意:

  我是在 C 盘下运行的 list 命令,版本库并不在 C 分区下,所以必须指定版本库所在的分区。假如,我门直接在版本库所在的分区下运行 list 命令,无需指定版本库所在的分区

命令: D:/>svn list file:///repository/jdk5

运行结果:

.classpath

.project

bin/

src/

 

7 取得版本库文件到本地机器

命令: svn checkout 版本库文件 PATH 本地路径文件 PATH [参数]

通过 import 命令,仅仅是将本地代码,导入到版本库中。但是版本库中的代码并没有跟本地代码关联起来,即使我们修改了本地代码,也无法反应到版本库中的。

  通过 checkout 命令,从版本库中取得工程的拷贝到本地,所取得的拷贝是和版本库关联在一起的。

 

例如: 将导入的工程到取到本地机器上

命令: D:/>svn checkout file:///repository/jdk5 e:/jdk5 -r 1

运行结果:

A    E:/jdk5/.classpath

A    E:/jdk5/.project

A    E:/jdk5/src

A    E:/jdk5/src/jdk

A    E:/jdk5/src/jdk/autoboxing

A    E:/jdk5/src/jdk/autoboxing/Autoboxing.java

A    E:/jdk5/src/jdk/bigdecimal

A    E:/jdk5/src/jdk/bigdecimal/Bigdecimal.java

A    E:/jdk5/src/jdk/compare

A    E:/jdk5/src/jdk/compare/Compare.java

Checked out revision 1.

 

命令说明:

 -r :指定要取得的文件的版本

运行结果说明:

 checkout 命令会自动为每个文件夹在本地建立一个 .svn 的隐藏文件文件夹,这个是存放记录本地文件和版本库关联信息文件的。请勿删除,如果删除了,也就失去了和 svn 版本库的关联关系。

 

注意:

  Checkout 命令取得文件时,并不会在指定的本地路径下,自动建立同名目录,需要事先做成相应的文件目录。

 

9 修改文件,并且提交到 svn

命令: svn commit 本地文件 PATH

Commit 命令是

例如:修改 E:/jdk5/src/jdk/autoboxing/Autoboxing.java 文件后,提交到 svn 版本库中

命令: D:/>svn commit E:/jdk5/src/jdk/autoboxing/Autoboxing.java -m "change 20090317"

运行结果

Sending   E:/jdk5/src/jdk/autoboxing/Autoboxing.java

Transmitting file data .

Committed revision 2.

 

命令说明:

  执行 commit 时,只需要指定要提交的文件的路径即可, svn 会根据“ .svn ”文件夹中记录的内容,将命令解析成“ svn commit 本地文件 PATH 版本库 PATH ”的形式,然后再执行。这里需要注意的是,被解析的“版本库 PATH ”中并不包含分需信息,所以必须在版本库所在的目录下面执行 commit 命令。

上面的命令如果不在 D 分区下执行,会发生下面的错误:

C:/>svn commit E:/jdk5/src/jdk/autoboxing/Autoboxing.java -m "change 20090317"

svn: Commit failed (details follow):

svn: Unable to open an ra_local session to URL

svn: Unable to open repository 'file:///repository/jdk5/src/jdk/autoboxing'

 

运行结果说明:

Committed revision 2. :为版本库所有文件设定统一的版本号。这里我们可以看到,即使修改了一个文件,但是svn是将整个版本库的版本设定成2了,也就是说svn并不对单独文件设定版本号

 

10 追加新文件到 svn

命令: svn add 本地目录 PATH

add 命令会将指定的文件目录以及其包含的文件提交到 svn 版本库中,同时会为此文件,建立本地文件到版本库的关联关系(建立 .svn 文件夹)。但是,add命令并不会将文件追加到版本库中,而是需要commit命令进行提交。

 

例如:把 E:/jdk5/src/jdk/Unboxing添加 到版本库中

命令: D:/>svn add E:/jdk5/src/jdk/Unboxing

运行结果:

A   E:/jdk5/src/jdk/unboxing

A   E:/jdk5/src/jdk/unboxing/Unboxing.java

注意:

  1 add 命令是没有 -m 参数的,原因调查中。。。

  2 add 命令并不是真正的把本地文件追加到版本库中,而是让文件或者文件夹在版本控制中,也就是仅仅为文件或者文件夹建立一个和版本库的关联关系。我们用 svn list 可以发现, Unboxing 并没有被追加到版本库中。如下: D:/>svn list file:///d:/repository/jdk5/src/jdk

autoboxing/

bigdecimal/

compare/

generic/

 

通过 commit 命令,将文件提交到版本库中。

D:/>svn commit E:/jdk5/src/jdk/unboxing -m "add unboxing"

Adding         E:/jdk5/src/jdk/unboxing

Adding         E:/jdk5/src/jdk/unboxing/Unboxing.java

Transmitting file data .

Committed revision 6.

 

注意:

  因为我是 add 一个文件夹到版本库中的,所以不能单独的 commit 此文件夹下面的某一个文件,只能commit整个文件夹,只提交某一个文件,会发生下面的错误。

D:/>svn commit E:/jdk5/src/jdk/unboxing/Unboxing.java

svn: Commit failed (details follow):

svn: 'E:/jdk5/src/jdk/unboxing' is not under version control and is not part of

the commit, yet its child 'E:/jdk5/src/jdk/unboxing/Unboxing.java' is part of the commit

 

13 删除版本库文件

命令: svn delete 本地文件 path

        svn delete 版本库文件 path

delete 命令,可以执行两种删除,一种是删除本地文件,并且通过修改 .svn 文件,让被删除的文件在版本库的控制之下,但是并不实际删除版本库中的文件,需要通过 commit 命令,提交版本库后,执行对版本库的修改。另一种是直接删除版本库中的文件,无需执行 commit 命令。

 

方法一:

例如:删除 E:/jdk5/src/jdk/unboxing/Unboxing.java 文件。

命令:

D:/>svn delete E:/jdk5/src/jdk/unboxing/Unboxing.java

D         E:/jdk5/src/jdk/unboxing/Unboxing.java

通过 svn list 命令查看,版本库中文件实际还存在,只是删除了本地文件,下面通过 commit 提交删除。

D:/>svn commit E:/jdk5/src/jdk/unboxing/Unboxing.java -m "delete 20090317"

Deleting       E:/jdk5/src/jdk/unboxing/Unboxing.java

Committed revision 7.

通过 svn list 命令查看,版本库文件已经被删除。

 

方法二:

 

 

 

14 查看版本库 log

命令: svn log 版本库PATH

通过 svn log 命令,可以查看对版本库操作的所有的 log 信息,前提是必须在每次对版本库进行操作(导入,删除,修改,移动等)操作是,追加了相应的 log

 

例如:通过 svn log 命令,查看第 5 步中,导入时的 log 信息

命令: C:/>svn log file:///d:/repository

运行结果:

------------------------------------------------------------------------

r3 | wd | 2009-03-17 14:04:27 +0800 ( , 17 3 2009) | 1 line

first import jdk5 on 20090317

   

导入的过程中,遇到了一些问题,如下:

问题 1

E:/eclipse_workspace>svn  import jdk5 svn://localhost/repository

svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) option

s

svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and

 no 'editor-cmd' run-time configuration option was found

 

原因:

 提示要在windows环境变量中,设置SVN_EDITOR。

 

问题 2

E:/>svn import E:/eclipse_workspace/jdk5 file:///repository/jdk5

'C:/Program' は、内部コマンドまたは外部コマンド、

操作可能なプログラムまたはバッチ ファイルとして認識されていません。

svn: system('C:/Program Files/EmEditor/emeditor.exe svn-commit.tmp') returned

 

原因:

  当没有指定-m参数的时候,svn会启动环境变量SVN_EDITOR中指定的编辑器。上面的命令,没有指定-m参数,但是svn却无法启动SVN_EDITOR设定的编辑器。

解决方法:

在导入命令中,追加 -m 参数,如下

svn import E:/eclipse_workspace/jdk5 file:///repository/jdk5 -m "import"

-m 参数是,导入的时候,需要指定的 log 信息。

 

问题 3

C:/>svn import E:/eclipse_workspace/jdk5 file:///repository/jdk5 -m "first import jdk5 on 20090317"

svn: Unable to open an ra_local session to URL

svn: Unable to open repository 'file:///repository/jdk5'

 

原因:

版本库的路径不合法。我们是在 C 分区根目录下执行 import 命令的, svn 默认认为版本库就在 C 分区根目录下,然而实际得到版本库是在 D 分区的根目录下。

解决方法:

修改版本库的绝对路径 file:///d:/repository/jdk

 

问题 4

windows 中,手动关闭 Subversion Server ,为什么导入,还可以正常进行。

 

转自:http://blog.csdn.net/haru/archive/2009/03/16/3996152.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值