Aug
30
2008
这个SVN服务在Windows下还是很好装的,记录一下:
1. 先下载SVN服务程序安装(我下载的是1.4.6版本的)
2.安装后,要设置一个环境变量SVN_EDITOR,将它设为一个编辑器路径就可以了,我就设置到c:\winnt\notepad.exe,这个编辑器是在以后调用一些SVN命令时会用到的。
3. 现在就可以创建一个SVN仓库了,在dos命令行下运行 svnadmin create "e:\svn_repos" 这个目录不用事先存在,svn会自动创建出来的。
4. 在仓库目录下的conf子目录下,打开svnserve.conf,这就是这个仓库相关的配置文件,将其中下面几句去除注释:
[general]
anon-access = read
auth-access = write
password-db = passwd
5. 上面的设置使得匿名用户可以读和增加文件(read),而认证用户才可以修改 (write)文件,认证方法是使用password文件,这个文件也是在conf目录下,可以修改这个文件来设置所需要的用户名和密码。
6. 现在可以试试了,启动svn服务器:
svnserve --daemon --root "e:\svn_repos"
7. 上面的方式是用--daemon方式来运行svn的,会留下一个大大的dos窗口,如果你想用windows服务的方式来运行,用sc命令来将svnserve安装为windows服务(sc命令是很多windows版本自带的一条命令,如果没有的话,可以找一个xp系统从windows\system32目录下拷贝一个过来);
sc create svn binpath= "\"C:\Program Files\Subversion\bin\svnserve.exe\" --service --root \"e:\svn_repos\"" displayname= "Subversion Repository" depend= Tcpip
注意上面的每个参数,binpath= 的等号前面没有空格,后面则一定要有一个空格(可笑的dos命令行参数就是这个样子的)
8. OK,现在可以通过 svn://your.ip 访问你的svn服务器了,别忘了告诉svn的用户去安装一个图形客户端TortoiseSVN,收工!
no comments | tags: svn | posted in tech|软件、开源、业界
Jun
7
2007
开发软件过程中,ChangeLog是很重要的历史记录,这个甚至被GNU写进项目规范了,但是另外一点是,随着版本控制系统的使用,又不得不在这些版本控制系统里维护另一份ChangeLog,对于程序员来说,重复是极其不爽的一件事。但程序员是聪明的,在cvs时代有个有名的工具叫做cvs2cl(就是CVS-log-message-to-ChangeLog的意思),就可以自动抓出cvs的log到Changelog文件中,这样就只需要维护cvs的log就可以了。
到了svn时代,很多程序员很怀念这个小工具,于是有人完成了svn2cl,算是向cvs致敬。
no comments | tags: python, svn | posted in code|编程
Jun
4
2007
刚开始用svn的时候,不太敢相信它的自动merge,不过人总是比较懒惰的,时间长了,就逐步丧失了对svn merge的监视能力,不过说实话,svn 自动merge的结果相当的不错,少有出错的时候,而且它总是留给用户再修改的机会。
svn的merge实际上是diff and patch,但只要你给它正确的指示(主要是做diff的两个版本号要给对),它工作的很好,不知道其它版本控制系统是怎么做merge的?
no comments | tags: svn | posted in code|编程
Apr
4
2007
Subversion中实际上没有branch的概念,它只懂得如何做copy,当我们将项目从主干branch到分支下的时候,Subversion只是做了一个浅拷贝(cheap
copies),把这个拷贝当作branch只是用户的理解。
Subversion的版本标识数是针对整个Repository的,每个文件的版本号实际上是这个文件在Repository的这个版本下的状态。
Subversion的merge其实不是真正的merge,而只是"diff-and-patch",这方面比clearcase差,因此要实现真正的merge操作,你必须牢记"diff-and-patch"原则,比如你想将branch1
merge到trunk上,需要对branch1的base和current做diff,再patch到当前trunk的working
copy。由于Subversion不会记录merge,所以只能在commit时的comment中记录,比如你可能两次merge同一个branch到主干,在第二次merge时,你只有参考第一次merge的comment才知道上次的merge是在哪个版本做的,这样可以从那个版本之后开始做,省去大量的工作。
Subversion的svn move也不是真正的rename,而是copy-and-delete,而且Subversion不会记住新文件的历史来源,这在大部分情况下不会造成问题,但在分支Merge时,某个分支上的move操作可能就会掩盖其它分支上对源文件的修改。
Subversion提供了一个有意思的feature--svn switch,可以高效的在分支间切换,它在本质上和svn
update同义,但svn update仅仅是在同一个路径的不同时间进行diff操作,但svn
switch则在不同路径(分支)的不同时间进行diff操作。由此引申了一个用法,在对主干文件修改后,你忽然意识到应该是在分支上做修改而不应该是主干,你可以使用svn
switch在commit,没有问题。
Tag和branch本质上完全相同,都是svn
copy,唯一的不同是我们"认为"不应该对tag进行commit,如果一旦用户做了commit,那么这个tag就变成了branch。
Subversion repository的备份不是直接的cp这么简单,因为简单的cp命令可能导致一个不一致的备份(假设有多人频繁commit),需要使用svnadmin
hotcopy....
no comments | tags: svn | posted in code|编程
Apr
2
2007
Subversion的使用还是很简单的,下面列出10条/组基本命令,分支属于高级功能,不在此列出。
1)安装Subversion
apt-get install subversion
2)创建Repository, create后的参数一定是一个本地的path.
svnadmin create /usr/path/repos
3)import当前目录下所有文件到Repository中, 这里的参数则是一个URL了.
svn import file:///usr/path/repos/ -m "Initial import"
svn可以支持符号连接文件(symbol link),但在windows系统下不支持.
4)checkout一个repos到工作目录
svn co file:///usr/path/repos
5)从repos更新文件
snv update
显示更新的每个文件都有一个字符描述更新类型: A-added, D-deleted, U-updated, C-conflict, G-Merged
6)更改目录结构, 这些命令通常对working copy执行,但也可以对URL执行,对working
copy执行时,生效要等到commit时,而对URL做时,直接生效。
svn add/ svn copy/ svn move/ svn mkdir
7)检查Working copy的修改情况 通常在commit/update前要做的事
svn status
8)对于冲突文件,需要手工解决(修改此文件),然后执行
svn resolved
当然如果不想要自己的修改了,可以用svn revert恢复服务器版本
9)提交修改
svn commit
10)放弃修改
svn revert
no comments | tags: svn | posted in code|编程