命令行中,SVN的几点技巧
如果是在WINDOW中,使用SVN的客户端工具,这些技巧都算不上什么。但如果使用SVN命令来操作源码的版本,有些技巧可能你还不知道。下面就让我跟大家分享一下吧!
情况一:将项目中未加入版本控制的文件提交到版本库。
在使用WINDOW下的SVN客户端工具时,在提交一个项目的文件时,如果有未加入版本库的文件,这时可以先将未加入的文件选中,然后一起提交。
但在LINUX命令行中,如果一个项目中新创建了一个文件new.php,那么我们可以使用如下命令来进行版本的提交。
~@bash svn add new.php ~@bash svn ci -m=hqlong
但如果有多个文件时,我一直都是一个一个的添加。比如。有a.php,b.php,c.php.那么提交操作如下:
~@bash svn add a.php,b.php,c.php ~@bash ci -m=hqlong
一直以后,新添加的文件不多,所以也就没有注意这个。今天当我查看项目的版本状态时,发现很多文件都没有加入版本库,本想按照老方法一个一个的添加,但始终想着是否有另外一种方式,一次性全部提交。所以就请教了我的两位大学同学(小黑、杨煌)。答案如下:
将同一目录下的未加入版本库的文件提交到版本库。
~@bash svn add *
注意上面只是针对同一目录的文件,如果目录下还有目录,这时上面的命令提交就不行了。如果是二级目录的话。操作命令如下:
~@bash svn add */*
当然三目录依次类推。
~@bash svn add */*/*
那么如果里面有很多级目录,该怎么办呢?或者说根本不清楚究竟有多少级。
这时使用通配符“*”,来解决一切未知的答案。
~@bash svn add */**/*
注意上面第三个“*”,它代表了我们所担心的那个未知数。
情况二:更新或者提交源码时,不提交某一特定文件。
当很多人同时开发一个项目,项目的配置文件可能在不同的开发人员的机器上,会有不同。当每次更新整个项目时,希望更新全部的文件但除了配置文件以外。
又如配置文件为config.php.
这时我们可以使用正则来排除我们所不需要提交的代码。
提交代码命令如下
~@bash svn ci !(config.php) -m=hqlong
表示除了config.php以外的代码,都提交到版本库中。
更新代码命令如下
~@bash svn up !(config.php)
表示除了config.php的所有代码都更新。
上面是今天从两位同学那里学到的技巧,特此分享。
明天情人节,提前祝朋友们情人节快乐
机器人 2009-02-13 23:51 于 北京
情况二我不知道哦… 学习了~
谢谢!学习了,我正在寻找:将未纳入版本控制的文件如何一次性都提及呢。太感谢了,不然就需要一次一次的add了,或者使用svn客户端工具才能一次性检验出来并提交。
今天学习后可以将这个语句写到脚本了。:)
请教各位,如何在windows的bat文件中,也做到,将未纳入版本库的所有文件及新文件夹都一次性add上呢?
我现在是用bat文件,commit命令只是对已经在版本控制下的文件的提交,不包括新增的文件。svn的客户端TortoiseSVN可以在commit时候检测出来,可是bat文件中如何实现呢?
请各位帮忙!谢谢!
顺着这位朋友给出的思路,我在自己的测试机器上实践下,命令如下:
说明:
$/Test/Depend checkout到 D:\TEMP\Depend
现在在本地文件夹D:\TEMP\Depend中增加文件、子文件夹及文件若干。
C:\Program Files\Subversion\bin>svn.exe add D:\TEMP\Depend\* –username jessie –password 123
svn: Skipping argument: ‘D:/TEMP/Depend/.svn’ ends in a reserved name
A D:\TEMP\Depend\Libs
A D:\TEMP\Depend\Libs\Framework
A D:\TEMP\Depend\Libs\Framework\RAID-936
A D:\TEMP\Depend\Libs\Framework\RAID-936\src
A D:\TEMP\Depend\Libs\Framework\RAID-936\src\Raid__Initialise.cpp
A D:\TEMP\Depend\Libs\Framework\RAID-936\src\LCD_UserAgent.cpp
svn: 警告: “D:\TEMP\Depend\UFS936DS.sln”已纳入版本控制
A (bin) D:\TEMP\Depend\UFS936DS.suo
A D:\TEMP\Depend\UFS936DS.vcproj
A D:\TEMP\Depend\UFS936DS.vcproj.user
C:\Program Files\Subversion\bin>svn.exe commit D:\TEMP\Depend -m “T” –username jessie –assword 123
增加 D:\TEMP\Depend\Libs
增加 D:\TEMP\Depend\Libs\Framework
增加 D:\TEMP\Depend\Libs\Framework\RAID-936
增加 D:\TEMP\Depend\Libs\Framework\RAID-936\src
增加 D:\TEMP\Depend\Libs\Framework\RAID-936\src\LCD_UserAgent.cpp
增加 D:\TEMP\Depend\Libs\Framework\RAID-936\src\Raid__Initialise.cpp
增加 (二进制) D:\TEMP\Depend\UFS936DS.suo
增加 D:\TEMP\Depend\UFS936DS.vcproj
增加 D:\TEMP\Depend\UFS936DS.vcproj.user
传输文件数据…..
提交后的版本为 53。
也就是说,只要后面有一个*就可以了。不过这样若是一个大的project,只是零散的几个深层次的目录下加了几个文件,用这个命令,会有很多警告,因为本身大部分文件就是已经纳入版本库的了。
有问题请大家指出。谢谢。:)