命令行中,SVN的几点技巧

Posted by 机器人 on 13th 二月 2009 in linux/server

如果是在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 于 北京

分享到: 新浪微博

4 Responses to “命令行中,SVN的几点技巧”

  1. 小黑米 说:

    情况二我不知道哦… 学习了~

  2. Jessie 说:

    谢谢!学习了,我正在寻找:将未纳入版本控制的文件如何一次性都提及呢。太感谢了,不然就需要一次一次的add了,或者使用svn客户端工具才能一次性检验出来并提交。
    今天学习后可以将这个语句写到脚本了。:)

  3. Jessie 说:

    请教各位,如何在windows的bat文件中,也做到,将未纳入版本库的所有文件及新文件夹都一次性add上呢?
    我现在是用bat文件,commit命令只是对已经在版本控制下的文件的提交,不包括新增的文件。svn的客户端TortoiseSVN可以在commit时候检测出来,可是bat文件中如何实现呢?
    请各位帮忙!谢谢!

  4. Jessie 说:

    顺着这位朋友给出的思路,我在自己的测试机器上实践下,命令如下:
    说明:
    $/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,只是零散的几个深层次的目录下加了几个文件,用这个命令,会有很多警告,因为本身大部分文件就是已经纳入版本库的了。
    有问题请大家指出。谢谢。:)

Leave a Reply