svn撰写的日志

Subversion同步工具svnsync出错:Failed to get lock on destination repos

Subversion版本库同步工具:svnsync一文中提到了Subversion提供的同步工具svnsync,然而在使用svnsync同步两个版本库时经常出现如下的错误,并自动中断了同步操作:

Copied properties for revision 461.
svnsync: Server sent unexpected return value (502 Bad Gateway) in response to PR
OPFIND request for ‘/svn/!svn/vcc/default’

当再次运行 svnsync sync svn://localhost/jqueryjs 时,有可能出现“Failed to get lock on destination repos”的错误信息,使同步操作无法继续进行:

F:\Subversion>svnsync sync svn://localhost/jqueryjs
Failed to get lock on destination repos, currently held by ‘firehack:963c0909-45ad-644f-b383-7e35d445028f’
……
Failed to get lock on destination repos, currently held by ‘firehack:963c0909-45ad-644f-b383-7e35d445028f’
svnsync: Couldn’t get lock on destination repos after 10 attempts

解决办法:

删除SVN仓库修订号0  svn:sync-lock的保护.

svn propdel svn:sync-lock --revprop -r 0 http://some.domain.com/svn/projects 

参考:

使用svnsync遭遇 “Failed to get lock on……”

Subversion版本库同步工具:svnsync

svnsync.exe是Subversion提供的一个用于同步版本库的工具,通过svnsync.exe同时可以达到备份SVN版本库的目的。

svnsync的使用方法如下:

1、svnsync init
初始化,建立目标库和源库之间的同步关系
命令格式 svnsync init 目标库URL 源库URL
2、svnsync sync
真正的同步
命令格式 svnsync sync 目标库URL

如果我们需要将jQuery的SVN版本库(http://jqueryjs.googlecode.com/svn/)复制到本机来
具体操作过程如下:

1、在本机上,创建目标库
F:\Subversion>svnadmin   create   jqueryjs
将目标库创建在F:\Subversion\jqueryjs目录中,修改F:\Subversion\jqueryjs\conf目录下的配置文件,具体方法参考:
Subversion权限设置详解

2、修改目标库的脚本pre-revprop-change
此时如果直接运行 svnsync init svn://localhost/jqueryjs
http://jqueryjs.googlecode.com/svn 将提示创建pre-revprop-change的“钩子”
svnsync: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook

在hooks目录下新建 pre-revprop-change.bat 文件(Linux操作系统下为pre-revprop-change)文件的内容为:
exit 0;

3、初始化
F:\Subversion>svnsync init svn://localhost/jqueryjs
http://jqueryjs.googlecode.com/svn
Authentication realm: <svn://localhost:3690> d3ec8b15-78a3-9d4a-9d49-382b8d00a3cd
Password for ‘Administrator’:
Authentication realm: <svn://localhost:3690> d3ec8b15-78a3-9d4a-9d49-382b8d00a3cd
Username: jquery  //提示输入用户名
Password for ‘jquery’: ******** /提示输入密码
Copied properties for revision 0 (svn:sync-* properties skipped).

 4、同步
F:\Subversion>svnsync sync svn://localhost/jqueryjs
Transmitting file data …………
Committed revision 1.
Copied properties for revision 1.
Transmitting file data .
Committed revision 2.
Copied properties for revision 2.

参考:
svnsync:Subversion备份版本库的好工具
【版本控制之路】版本库的备份

F:\Subversion>svnsync help
general usage: svnsync SUBCOMMAND DEST_URL  [ARGS & OPTIONS ...]
Type ’svnsync help <subcommand>’ for help on a specific subcommand.
Type ’svnsync –version’ to see the program version and RA modules.

Available subcommands:
   initialize (init)
   synchronize (sync)
   copy-revprops
   help (?, h)

升级Subversion 1.5后Zend访问SVN出错

因为SourceForge被电信屏蔽(SourceForge无法访问的解决办法)光是下载升级Subversion 1.5 及 TortoiseSVN 所需的文件就花了不少时间,在文章的最下方提供了相就的下载链接,大家使用迅雷下载吧。

升级后,Zend Studio访问SVN项目出现如下错误:
svn.exe add E:\MakeWeb\www.makeweb.com\v3\AC_RunActiveContent.js
svn: This client is too old to work with working copy ‘E:\MakeWeb\www.makeweb.com\v3′; please get a newer Subversion client
svn command finished execution

幸好这个问题我在之前也遇到过,解决的方法很简单:

第一个方法是把ZendStudio安装目录中的SVN客户端工具升级一下

 将CollabNet Subversion Server安装目录中的svn.exe及动态链接库文件复制到Zend Studio安装目录的SVN目录中(如:E:\Program Files\Zend\ZendStudio-5.5.1\bin\SourceControl\svn)

第二个方法是在ZendStudio首选项的“Source Control”标签中,将基本设置中的“Path to SVN”指向CollabNet Subversion Server安装目录中的svn.exe(如:E:\Program Files\CollabNet Subversion Server\svn.exe)

在Zend Studio中再次执行Subversion命令,正确完成:

E:\Program Files\Zend\ZendStudio-5.5.1\bin\SourceControl\svn\svn.exe commit E:\MakeWeb\www.makeweb.com\v3\include -F E:\Temp\jsvn58187.tmp –non-interactive
Adding         E:\MakeWeb\www.makeweb.com\v3\include\AC_RunActiveContent.js
Transmitting file data .
Committed revision 43.
svn command finished execution

分享一下安装Subversion需要的软件

在微软skydrive中,通过以下地址访问:

所需软件的列表:http://cid-358ab75ae8d73bb3.skydrive.live.com/browse.aspx/Public/Subversion

直接下载:
CollabNetSubversion-server-1.5.zip服务器端
http://cid-358ab75ae8d73bb3.skydrive.live.com/self.aspx/Public/Subversion/CollabNetSubversion-server-1.5.zip

subversion-1.5.0.zip源代码
http://cid-358ab75ae8d73bb3.skydrive.live.com/self.aspx/Public/Subversion/subversion-1.5.0.zip

TortoiseSVN-1.5.0.13316-win32-svn-1.5.0.msi
http://cid-358ab75ae8d73bb3.skydrive.live.com/self.aspx/Public/Subversion/TortoiseSVN-1.5.0.13316-win32-svn-1.5.0.msi

TortoiseSVN简体中文语言包:LanguagePack|_1.5.0.13316-win32-zh|_CN.msi
http://cid-358ab75ae8d73bb3.skydrive.live.com/self.aspx/Public/Subversion/LanguagePack|_1.5.0.13316-win32-zh|_CN.msi

Zend Studio:版本控制SVN/CVS使用简介

CVS与SubVersion有两个出色的开源的版本控制软件,Zend Studio 4只支持CVS, Zend Studio 5 加入SubVersion的支持,本文将以SubVersion与Zend Studio集成使用为例做说明。
Zend Studio默认使用CVS,可在“工具”->“首选项”->“source control”中选择Subversion即可。
配置Zend Studio客户端使用SVN:
打开“工具”->“SubVersion”->”checkout“,显示对话框
Module ULR 指要下载的源程序在源码库的位置,工作目录是下载到本机的程序存放位置,如果所填目录不存在,则程序自动创建。
用户名密码如果不需要的时候默认为空。

Subversion菜单命令说明:
Update : 将svn 源码库端文件同步到本地的工作拷贝。
Commit: 提交当前工作拷贝的更改。这个地方是有可能出现代码冲突的。最安全的解决方法,先update一下,再修改程序并Commit。
Add :将当前文件添加到版本控制库中。原来该版本不处于版本控制之下。比如新建立的一个程序或者文件。
Delete: 将当前文件从版本控制库中删除,脱离svn版本控制。
Revert : 取消当前文件的所有的本地编辑。并且解决所有的冲突状态。
Resove : 删除工作拷贝文件或目录的“冲突”状态。
Status: 查看当前工作拷贝文件和目录的状态。
Diff : 比较当前文件与源码库中相应文件的不同。
Log : 当前文件的所有修改记录,从创建开始的每一次修改都能显示出来。

注意:上面的命令也可以在Zend Studio 左侧的项目区域对多个文件或文件夹同时操作。

在修改完成之后,可以到程序运行服务器的项目目录下svn update一下,就可得到最新的程序。

Svn高级操作:
a. 解决冲突(合并别人的修改)
b. 分支与合并

Subversion学习二:svn 过期

今天在提交项目文件到本地SVN时提示错误如下:

过期:”global.php“在事务”21-1“,
You have to update your working copy first.

运行update更新后再次提交又出现如下错误:

svn: Commit failed (details follow):svn: Aborting commit: 'global.php' remains in conflict

查了一下SVN的手册才知道原来是多个版本之间遇到冲突。

此时你需要解决冲突(合并别人的修改)。

举一个例子,Sally修改了sandwich.txt,Harry刚刚改变了他的本地拷贝中的这个文件并且提交到服务器,Sally在提交之前更新它的工作拷贝得到了冲突:

$ svn update C sandwich.txt Updated to revision 2. $ ls -1 sandwich.txt sandwich.txt.mine sandwich.txt.r1 sandwich.txt.r2

在这种情况下,Subversion会允许你提交sandwich.txt,直到你的三个临时文件被删掉。

$ svn commit –message "Add a few more things" svn: Commit failed (details follow): svn: Aborting commit: ‘/home/sally/svn-work/sandwich.txt’ remains in conflict

如果你遇到冲突,三件事你可以选择:

  • 手动”合并冲突文本(检查和修改文件中的冲突标志)。

  • 用某一个临时文件覆盖你的工作文件。

  • 运行svn revert <filename>来放弃所有的修改。

一旦你解决了冲突,你需要通过命令svn resolved让Subversion知道,这样就会删除三个临时文件,Subversion就不会认为这个文件是在冲突状态了。

$ svn resolved sandwich.txt Resolved conflicted state of ’sandwich.txt’

手工合并冲突

第一次尝试解决冲突让人感觉很害怕,但经过一点训练,它简单的像是骑着车子下坡。

这里一个简单的例子,由于不良的交流,你和同事Sally,同时编辑了sandwich.txt。Sally提交了修改,当你准备更新你的版本,冲突发生了,我们不得不去修改sandwich.txt来解决这个问题。首先,看一下这个文件:

$ cat sandwich.txtTop piece of breadMayonnaiseLettuceTomatoProvolone<<<<<<< .mineSalamiMortadellaProsciutto=======SauerkrautGrilled Chicken>>>>>>> .r2Creole MustardBottom piece of bread

小于号、等于号和大于号串是冲突标记,并不是冲突的数据,你一定要确定这些内容在下次提交之前得到删除,前两组标志中间的内容是你在冲突区所做的修改:

<<<<<<< .mineSalamiMortadellaProsciutto=======

后两组之间的是Sally提交的修改冲突:

=======SauerkrautGrilled Chicken>>>>>>> .r2

通常你并不希望只是删除冲突标志和Sally的修改—当她收到三明治时,会非常的吃惊。所以你应该走到她的办公室或是拿起电话告诉Sally,你没办法从从意大利熟食店得到想要的泡菜。一旦你们确认了提交内容后,修改文件并且删除冲突标志。

Top piece of breadMayonnaiseLettuceTomatoProvoloneSalamiMortadellaProsciuttoCreole MustardBottom piece of bread

现在运行svn resolved,你已经准备好提交了:

$ svn resolved sandwich.txt$ svn commit -m "Go ahead and use my sandwich, discarding Sally's edits."

记住,如果你修改冲突时感到混乱,你可以参考subversion生成的三个文件—包括你未作更新的文件。你也可以使用第三方的合并工具检验这三个文件。

拷贝覆盖你的工作文件

如果你只是希望取消你的修改,你可以仅仅拷贝Subversion为你生成的文件替换你的工作拷贝:

$ svn updateC  sandwich.txtUpdated to revision 2.$ ls sandwich.*sandwich.txt  sandwich.txt.mine  sandwich.txt.r2  sandwich.txt.r1$ cp sandwich.txt.r2 sandwich.txt$ svn resolved sandwich.txt

下注:使用svn revert

如果你得到冲突,经过检查你决定取消自己的修改并且重新编辑,你可以恢复你的修改:

$ svn revert sandwich.txtReverted 'sandwich.txt'$ ls sandwich.*sandwich.txt

注意,当你恢复一个冲突的文件时,不需要再运行svn resolved

现在我们准备好提交修改了,注意svn resolved不像我们本章学过的其他命令一样需要参数,在任何你认为解决了冲突的时候,只需要小心运行svn resolved,—一旦删除了临时文件,Subversion会让你提交这文件,即使文件中还存在冲突标记。

提交你得修改

最后!你的修改结束了,你合并了服务器上所有的修改,你准备好提交修改到版本库。

svn commit命令发送所有的修改到版本库,当你提交修改时,你需要提供一些描述修改的日志信息,你的信息会附到这个修订版本上,如果信息很简短,你可以在命令行中使用–message(-m)选项:

$ svn commit –message "Corrected number of cheese slices." Sending sandwich.txt Transmitting file data . Committed revision 3.

然而,如果你把写日志信息当作工作的一部分,你也许会希望通过告诉Subversion一个文件名得到日志信息,使用–file选项:

$ svn commit –file logmsg Sending sandwich.txt Transmitting file data . Committed revision 4.

如果你没有指定–message或者–file选项,Subversion会自动地启动你最喜欢的编辑器来编辑日志信息。

版本库不知道也不关心你的修改作为一个整体是否有意义,它只检查是否有其他人修改了同一个文件,如果别人已经这样做了,你的整个提交会失败,并且提示你一个或多个文件已经过时了:

$ svn commit –message "Add another rule" Sending rules.txt svn: Commit failed (details follow): svn: Out of date: ‘rules.txt’ in transaction ‘g’

此刻,你需要运行svn update来处理所有的合并和冲突,然后再尝试提交。

我们已经覆盖了Subversion基本的工作周期,还有许多其它特性可以管理你得版本库和工作拷贝,但是只使用前面介绍的命令你就可以很轻松的工作了。

Syncro SVN Client源码管理器客户端工具

Syncro SVN Client是一款SVN源码管理器客户端工具,它能帮你轻松的在内容作者或者开发人员间共享文档和代码。这个多平台的SVNk客户端能让你轻松的浏览源码库,检查变化、提交改变、更新你的工作版本并且检查各个历史版本。

软件使用Java开发,体积比TortoiseSVN大,不过类似于IDE的界面使用起来比TortoiseSVN要更方便一些。
Syncro.SVN.Client.v2.5破解下载1
破解文件见附件(提供Windows版的破解文件),先去官方http://www.syncrosvnclient.com/下载正式版安装,再使用附件提供的破解文件生成Key

Syncro.SVN.Client.v2.5破解下载2(国外的网站,速度比较慢。):
Download  Syncro SVN Client v2.5 Incl Keygen and Patch
Download  Syncro SVN Client v2.5 Linux Incl Keygen and Patch

Syncro SVN Client软件的界面如图所示:

图片附件:
syncrosvn_windows_large.png

附件:crack.zip(7307388 Byte)