天天看点

Linux下SVN常用命令

Linux下SVN常用命令,总结如下:

  • svn checkout从服务器签出代码到本地目录

命令格式:svn checkout URL [PATH] (简写:svn co)

URL:代码路径 PATH:保存拷贝的本地路径 如果省略路径参数,URL 最末尾的目录名作为目标目录名。

例: svn co svn://192.168.2.66/xx/xx/project

  • svn update更新本地工作拷贝

命令格式:svn update -r版本号 [PATH] (简写:svn up)

svn update如果后面没有指定-r选项及目录,默认将当前目录及其子目录下的所有文件都更新到最新版本。

例: svn update(将当前目录及其子目录更新到最新版本) svn update -r200 (将当前目录及其子目录更新或还原到版本200)

svn update -r 200 scripts/startup_1_init (将startup_1_init文件更新或还原到版本200)

  • svn add添加新模块目录或文件

命令格式:svn add PATH 把文件以及目录的名称添加给版本控制系统,它们会在下次提交时被添加到项目仓库中。

例: #mkdir test #svn add test (将目录test添加给版本控制系统) A test (命令执行后test目录状态为“A”,表示添加)

#touch test.txt #svn add test.txt (将文件test.txt添加给版本控制系统) A test.txt (命令执行后test.txt文件状态为“A”,表示添加)

  • svn delete删除目录或文件
  • 命令格式:svn delete target(简写:svn del) target是工作拷贝中的文件或者目录,它被从工作拷贝中移除并且预计在下次提交时删除掉。此命令在使用的时候一定要慎重。 例:

    #svn del scripts/startup_1_init D scripts/startup_1_init (命令执行后startup_1_init状态为“D”,表示删除)

    注:不要使用非svn命令(rm)删除工作拷贝中的文件或者目录,导致代码不完整。

  • svn status查看工作副本中目录与文件的状态

命令格式:svn status [PATH](简写:svn st) 打印工作拷贝中文件和目录的状态。 svn st|grep

^状态(获得某状态文件列表) svn st|grep -v ^状态(也作svn st|grep

[状态],过滤掉某状态得到其他状态文件列表) 例: svn st|grep ^M (获取“M”状态文件列表) svn

st|grep -v ^?(过滤掉“?”状态的文件列表) 常见状态如下:

“A” 预定加入到版本库

“C” 发生冲突

“D” 被删除了

“M” 内容被修改

“?” 条目未纳入版本控制

“!” 该项目已遗失(被非svn命令删除)或不完整

“~” 版本控制下的项目与其它类型的项目重名 其中,“?”“!”“~”为非正常状态,svn不会将处于该状态的文件提交至项目仓库。 “!” 状态说明 出现原因:使用非svn命令(rm等)删除了此条目。 解决方法:使用svn update(svn

up),将被删除的条目更新出来。 正确操作方法:使用svn delete删除纳入版本控制的条目 “~ ”状态说明

出现原因:删除了一个版本库的文件,新建了一个在原来的位置,新建文件类型与原有文件不一致,而且整个过程中没有使用svn delete或是svn

add。 解决方法: 将“~”文件svn revert 掉,按照正确操作重新修改。 出错案例:

wsdl头文件统一建立在include/wsdl_include目录中,各模块webservice目录下的同名wsdl头文件只是创建的软链接。若拷贝include/wsdl_include目录中wsdl头文件将webservice目录下的同名wsdl头文件覆盖掉,svn

st查看wsdl头文件状态为“~”。

  • svn revert恢复本地修改

命令格式:svn revert [-R] PATH 撤销掉对本地代码所做的修改恢复到原始未改变的工作副本状态。

若撤销对整个目录的修改,需要加“-R”选项。

-R:向下递归,撤销对整个目录所做的修改。 例: svn revert scripts/startup_1_init(发现误改了某个文件,可执行此命令将改动撤销掉。) svn revert -R scripts

(撤销对scripts目录中文件所做的所有改动。)

  • svn diff比较差异

命令格式:svn diff [-r m:n] [PATH](简写:svn di) 将修改的文件与基础版本比较。 例: svn diff

(默认显示当前目录及其子目录下的所有修改差异) svn diff

scripts/startup_1_init(查看startup_1_init文件的修改差异) svn diff >bugxxx.diff

(修改内容多时导出到diff文件中,便于更直观的检查。) svn diff -r m:n [PATH]

(对版本m和版本n比较差异。) 获得代码合入后的diff 文件(即某次的提交diff): svn diff -r

提交后版本号-1:提交后版本号 > bugxxx.diff 或使用等价命令 svn diff -c 提交后版本号 >

bugxxx.diff (检查合入后的diff文件内容是否与自己的修改相符,有没有多合、漏合或者错合的代码

,对比合入前生成的diff文件与合入后的diff文件是否一致。)

注:svn status、svn diff和 svn

revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

  • svn commit将改动的文件提交到版本库

命令格式:svn commit -m “bugxxx by xxx” [PATH] (简写:svn ci) PATH

不填或为“.”时,即将当前目录及其子目录下的所有改动提交到版本库。 例: svn commit -m “bug112 modified by

zhangsan” --username zhangsan

注:在代码根目录下将对应问题单的所有修改文件一次性提交到版本库,不要到各个目录下分别提交以避免漏合;问题一次性修改合入,避免一个问题单合入多次导致中间版本出现编译或功能问题。

  • svn log查看日志

命令格式:svn log [PATH] 显示本地 PATH的日志信息,PATH不填或为“.”时显示当前目录的日志信息。 例: svn log

scripts/startup_1_init(显示此文件的所有修改记录,及其版本号的变化。) svn info查看文件详细信息

命令格式:svn info [PATH]

  • 创建版本控制的目录。

svn mkdir创建纳入版本控制下的新目录 命令格式:svn mkdir PATH 例: #svn mkdir newdir A

newdir 添加目录newdir,相当于mkdir newdir和svn add newdir的命令集合。

  • svn merge将两个源差异应用至工作副本

适用场景1: 一个问题要合入多个分支,若分支代码差异不大,可以在其中一个分支(a)上修改提交后,使用svn

merge命令将改动合并到另外的分支(b)上。 用法: 在代码根目录下执行: svn merge

–ignore-ancestry -rN-1:N源代码路径 目的代码路径 或使用等价命令 svn merge --ignore-ancestry -c N源代码路径 目的代码路径 其中,N指的的是你在a分支上此次改动提交后的svn版本号;源代码路径和目的代码路径均为本地代码的路径(相对路径、绝对路径皆可以)。 举例:

将a中的改动merge到b中,如果是在b代码根目录下执行,命令如下:

svn merge --ignore-ancestry -rN-1:N a代码相对路径 . (“.”代表当前目录) 注意事项: 执行此命令后一定要检查文件状态,有时候会附带着改动一些其他文件的属性,修改svn:mergeinfo,此类修改只是更改文件的合并信息对功能无任何影响,不过建议将这些文件revert掉再生成diff文件检查自己的改动是否正确,

最后编译版本做功能验证,验证通过后再提交(svn commit)至项目仓库。 补充:使用svn

merge命令移植代码用于问题已合入merge源分支的情况下。若问题未合入任何分支则可使用如下方法:

如果代码在A分支中,尚未合入,则可先生成diff文件: svn diff [path1] [path2] [path3] >

xxx.diff 然后进入B分支同级目录,执行patch -p0 <

xxx.diff,即可导入修改。(因二进制文件无法生成diff,所以也无法通过patch将二进制文件的变更移植到其他分支。)

注意:产生冲突时,会生成与冲突文件对应的冲突文件(后缀与svn操作时生成的冲突文件不同),可用于人工解决冲突。

适用场景2: 回退问题单。 用法: 在代码根目录下执行以下命令

svn merge --ignore-ancestry -rN:N-1 . (“.”代表当前目录,不可省。) 或使用等价命令svn merge --ignore-ancestry -c -N . N代表此次要被回退的问题单之前合入代码时的svn版本号。 举例:

将主线分支中合入的bug11373回退掉。(bug11373合入主线后的svn版本号为16534。)

在本地主线代码工作拷贝根目录下执行svn merge回退此次合入的修改,并将回退操作由工作拷贝提交至项目仓库。 svn merge

–ignore-ancestry -r16534:16533 . ( 或svn merge --ignore-ancestry -c -16534 . ) svn ci -m “rollback bug11373” svn help帮助 命令格式:svn help [子命令] 描述本程序或其子命令的用法。

继续阅读