Linux命令行下常用svn命令的使用方法
本文讲述了Linux命令行下常用svn命令的使用方法,希望对您有所帮助。
1、Linux命令行下将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
2、Linux命令行下往版本库中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)
3、Linux命令行下将改动的文件提交到版本库
svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m “add test file for my test“ test.php
简写:svn ci
4、Linux命令行下的加锁/解锁
svn lock -m “LockMessage“ [--force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
5、Linux命令行下更新到某个版本
svn update -r m path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
6、Linux命令行下查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
7、Linux命令行下删除文件
svn delete path -m “delete test fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
简写:svn (del, remove, rm)
8、Linux命令行下查看日志
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、Linux命令行下查看文件详细信息
svn info path
例如:svn info test.php
10、Linux命令行下比较差异
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
11、Linux命令行下将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、Linux命令行下SVN 帮助
svn help
svn help ci
以上是常用命令,下面写几个不经常用的
13、Linux命令行下版本库下的文件和目录列表
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
14、Linux命令行下创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建.在这两个情况下,所有的中间目录都必须事先存在。
15、Linux命令行下恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录
16、Linux命令行下代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令更新工作副本与仓库的对应关系。
17、Linux命令行下解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。
18、Linux命令行下输出指定文件或URL的内容。
svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
以上是Linux命令行下常用svn命令的使用方法
Subversion 命令行客户端:svn
为了使用命令行客户端,只需要输入svn和它的子命令[54]以及相关的选项或操作的对象—输入的子命令和选项没有特定的顺序,下面使用svn status的方式都是合法的:
$ svn -v status
$ svn status -v
$ svn status -v myfile
你可以在第 2 章 基本使用发现更多使用客户端命令的例子,以及“属性”一节中的管理属性的命令。
虽然Subversion的子命令有一些不同的选项,但有的选项是全局的—也就是说,每个选项保证是表示同样的事情,而不管是哪个子命令使用的。举个例子,--verbose(-v)一直意味着“冗长输出”,而不管使用它的命令是什么。
--auto-props
开启auto-props,覆盖config文件中的enable-auto-props指示。
--change (-c) ARG
作为引用特定“修改”(也叫做修订版本)的方法,这个选项是“-r ARG-1:ARG”语法上的甜头。
--config-dir DIR
指导Subversion从指定目录而不是默认位置(用户主目录的.subversion)读取配置信息。
--diff-cmd CMD
指定用来表示文件区别的外部程序,当svn diff调用时,会使用Subversion的内置区别引擎,默认会提供统一区别输出,如果你希望使用一个外置区别程序,使用--diff-cmd。你可以通过--extensions(本小节后面有更多介绍)把选项传递到区别程序。
--diff3-cmd CMD
指定一个外置程序用来合并文件。
--dry-run
检验运行一个命令的效果,但没有实际的修改—可以用在磁盘和版本库。
--editor-cmd CMD
指定一个外部程序来编辑日志信息或是属性值。如何设定缺省编辑器见“配置”一节的editor-cmd小节。
--encoding ENC
告诉Subversion你的提交日志信息是通过提供的字符集编码的,缺省时是你的操作系统的本地编码,如果你的提交信息使用其它编码,你一定要指定这个值。
--extensions (-x) ARGS
指定一个或多个Subversion传递给提供文件区别的外部区别程序的参数,如果你要传递多个参数,你一定能够要用引号(例如,svn diff --diff-cmd /usr/bin/diff -x "-b -E")括起所有的参数。这个选项只有在使用--diff-cmd选项时使用。
--file (-F) FILENAME
为特定子命令使用命名文件的的内容,尽管不同的子命令对这些内容做不同的事情。例如,svn commit使用内容作为提交日志,而svn propset使用它作为属性值。
--force
强制一个特定的命令或操作运行。Subversion有一些操作防止你做普通的使用,但是你可以传递force选项告诉Subversion“我知道我做的事情,也知道这样的结果,所以让我做吧”。这个选项在程序上等同于在打开电源的情况下做你自己的电子工作—如果你不知道你在做什么,你很有可能会得到一个威胁的警告。
--force-log
将传递给--message(-m)或者--file(-F)的可疑参数指定为有效可接受。缺省情况下,如果选项的参数看起来会成为子命令的目标,Subversion会提出一个错误,例如,你传递一个版本化的文件路径给--file(-F)选项,Subversion会认为出了点错误,认为你将目标对象当成了参数,而你并没有提供其它的—未版本化的文件作为日志信息的文件。为了确认你的意图并且不考虑这类错误,传递--force-log选项给命令来接受它作为日志信息。
--help (-h或-?)
如果同一个或多个子命令一起使用,会显示每个子命令内置的帮助文本,如果单独使用,它会显示常规的客户端帮助文本。
--ignore-ancestry
告诉Subversion在计算区别(只依赖于路径内容)时忽略祖先。
--ignore-externals
告诉Subversion忽略外部定义和外部定义管理的工作拷贝。
--incremental
打印适合串联的输出格式。
--limit NUM
只显示第一个NUM日志信息。
--message (-m) MESSAGE
表示你会在命令行中指定日志信息,紧跟这个开关,例如:
$ svn commit -m "They don't make Sunday."
--new ARG
使用ARG作为新的目标(结合svn diff使用)。
--no-auth-cache
阻止在Subversion管理区缓存认证信息(如用户名密码)。
--no-auto-props
关闭auto-props,覆盖config文件中的enable-auto-props指示。
--no-diff-added
防止Subversion打印添加文件的区别。缺省的行为方式是,当添加一个文件时,svn diff打印的信息和比较一个空白文件相同。
--no-diff-deleted
防止Subversion打印删除文件的区别信息,缺省的行为方式是当你删除了一个文件后运行svn diff打印的区别与删除文件所有的内容得到的结果一样。
--no-ignore
在状态列表中显示global-ignores配置选项或者是svn:ignore属性忽略的文件。见“配置”一节和“忽略未版本控制的条目”一节查看详情。
--no-unlock
不自动解锁文件(缺省的提交行为是解锁提交列出的所有文件),更多信息见“锁定”一节。
--non-interactive
如果认证失败,或者是不充分的凭证时,防止出现要求凭证的提示(例如用户名和密码)。这在运行自动脚本时非常有用,只是让Subversion失败而不是提示更多的信息。
--non-recursive (-N)
防止子命令迭代到子目录,大多数子命令缺省是迭代的,但是一些子命令—通常是那些潜在的删除或者是取消本地修改的命令—不是。
--notice-ancestry
在计算区别时关注祖先。
--old ARG
使用ARG作为旧的目标(结合svn diff使用)。
--password PASS
指出在命令行中提供你的密码—另外,如果它是需要的,Subversion会提示你输入。
--quiet (-q)
请求客户端在执行操作时只显示重要信息。
--recursive (-R)
让子命令迭代到子目录,大多数子命令缺省是迭代的。
--relocate 目的路径[PATH...]
svn switch子命令中使用,用来修改你的工作拷贝所引用的版本库位置。当版本库的位置修改了,而你有一个工作拷贝,希望继续使用时非常有用。见svn switch的例子。
--revision (-r) REV
指出你将为特定操作提供一个修订版本(或修订版本的范围),你可以提供修订版本号,修订版本关键字或日期(在华括号中)作为修订版本开关的参数。如果你希望提供一个修订版本范围,你可以提供用冒号隔开的两个修订版本,举个例子:
$ svn log -r 1729
$ svn log -r 1729:HEAD
$ svn log -r 1729:1744
$ svn log -r {2001-12-04}:{2002-02-17}
$ svn log -r 1729:{2002-02-17}
见“修订版本关键字”一节查看更多信息。
--revprop
操作针对修订版本属性,而不是Subversion文件或目录的属性。这个选项需要你传递--revision(-r)参数。
--show-updates (-u)
导致客户端显示本地拷贝哪些文件已经过期,这不会实际更新你的任何文件—只是显示了如果你运行svn update时更新的文件。
--stop-on-copy
导致Subversion子命令在传递历史时会在版本化资源拷贝时停止收集历史信息—也就是历史中资源从另一个位置拷贝过来时。
--strict
导致Subversion使用严格的语法,就是明确使用特定而不是含糊的子命令(也就是,svn propget)。
--targets FILENAME
告诉Subversion从你提供的文件中得到希望操作的文件列表,而不是在命令行列出所有的文件。
--username NAME
表示你要在命令行提供认证的用户名—否则如果需要,Subversion会提示你这一点。
--verbose (-v)
请求客户端在运行子命令打印尽量多的信息,会导致Subversion打印额外的字段,每个文件的细节信息或者是关于动作的附加信息。
--version
打印客户端版本信息,这个信息不仅仅包括客户端的版本号,也有所有客户端可以用来访问Subversion版本库的版本库访问模块列表。
--xml
使用XML格式打印输出。
下面是一些子命令:
svnadmin
svnadmin是一个用来监控和修改Subversion版本库的管理工具,详情请见“svnadmin”一节。
因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。
--bdb-log-keep
(Berkeley DB特定)关闭数据库日志文件的自动删除,保留这些文件可以帮助你在灾难性版本库故障时更加便利。
--bdb-txn-nosync
(Berkeley DB特定)在提交数据库事务时关闭fsync。可以在svnadmin create命令创建Berkeley DB后端时开启DB_TXN_NOSYNC(可以改进速度,但是有相关的风险)。
--bypass-hooks
绕过版本库钩子系统。
--clean-logs
删除不使用的Berkeley DB日志。
--force-uuid
缺省情况下,当版本库加载已经包含修订版本的数据时svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID。
--ignore-uuid
缺省情况下,当加载空版本库时,svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID(如果你的配置文件已经设置了--force-uuid,将会用于将其覆盖)。
--incremental
导出一个修订版本针对前一个修订版本的区别,而不是通常的完全结果。
--parent-dir DIR
当加载一个转储文件时,根路径为DIR而不是/。
--revision (-r) ARG
指定一个操作的修订版本。
--quiet
不显示通常的过程—只显示错误。
--use-post-commit-hook
当导入使用一个转储文件时,在每次新的修订版本产生时运行版本库post-commit钩子。
--use-pre-commit-hook
当加载一个转储文件时,每次新加修订版本之前运行版本库的pre-commit钩子。如果钩子失败,终止提交并中断加载进程。
名称
svnadmin create — 创建一个新的空的版本库。
svnadmin create REPOS_PATH
在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。[55]对于Subversion 1.2,svnadmin缺省使用fsfs文件系统后端创建版本库。
--bdb-txn-nosync
--bdb-log-keep
--config-dir DIR
例子
创建一个版本库就是这样简单:
$ svnadmin create /usr/local/svn/repos
在Subversion 1.0,一定会创建一个Berkeley DB版本库,在Subversion 1.1,Berkeley DB版本库是缺省类型,但是一个FSFS版本库也是可以创建,使用--fs-type选项:
$ svnadmin create /usr/local/svn/repos --fs-type fsfs
svnlook
svnlook是检验Subversion版本库不同方面的命令行工具,它不会对版本库有任何修改—它只是用来“看”。svnlook通常被版本库钩子使用,但是版本库管理也会发现它在诊断目的上也非常有用。
因为svnlook通过直接版本库访问(因此只可以在保存版本库的机器上工作)工作,所以他通过版本库的路径访问,而不是URL。
如果没有指定修订版本或事物,svnlook缺省的是版本库最年轻的(最新的)修订版本。
svnlook的选项是全局的,就像svn和svnadmin;然而,大多数选项只会应用到一个子命令,因为svnlook的功能是(有意的)限制在一定范围的。
--no-diff-deleted
防止svnlook打印删除文件的区别,缺省的行为方式是当一个文件在一次事物/修订版本中删除后,得到的结果与保留这个文件的内容变成空相同。
--revision (-r)
指定要进行检查的特定修订版本。
--revprop
操作针对修订版本属性,而不是Subversion文件或目录的属性。这个选项需要你传递--revision(-r)参数。
--transaction (-t)
指定一个希望检查的特定事物ID。
--show-ids
显示文件系统树中每条路径的文件系统节点修订版本ID。
名称
svnlook author — 打印作者。
svnlook author REPOS_PATH
打印版本库一个修订版本或者事物的作者。
--revision (-r) REV
--transaction (-t)
svnlook author垂手可得,但是并不令人激动:
$ svnlook author -r 40 /usr/local/svn/repos
sally
svnsync
svnsync是Subversion的远程版本库镜像工具,它允许你把一个版本库的内容录入到另一个。
在任何镜像场景中,有两个版本库:源版本库,镜像(或“sink”)版本库,源版本库就是svnsync获取修订版本的库,镜像版本库是源版本库修订版本的目标,两个版本库可以是在本地或远程—它们只是通过URL跟踪。
svnsync进程只需要对源版本库有读权限;它不会尝试修改它。但是很明显,svnsync可以读写访问镜像版本库。
警告
svnsync对于不能作为镜像操作一部分的修改非常敏感,为了防止发生这个情况,最好保证svnsync是唯一可以修改镜像版本库的进程。
--config-dir DIR
指导Subversion从指定目录而不是默认位置(用户主目录的.subversion)读取配置信息。
--no-auth-cache
阻止在Subversion管理区缓存认证信息(如用户名密码)。
--non-interactive
如果认证失败,或者是不充分的凭证时,防止出现要求凭证的提示(例如用户名和密码)。这在运行自动脚本时非常有用,只是让Subversion失败而不是提示更多的信息。
--password PASS
指出在命令行中提供你的密码—另外,如果它是需要的,Subversion会提示你输入。
--username NAME
表示你要在命令行提供认证的用户名—否则如果需要,Subversion会提示你这一点。
下面是一些子命令:
名称
svnsync copy-revprops — 从源版本库拷贝所有的修订版本属性到镜像版本库。
svnsync copy-revprops DEST_URL REV
因为Subversion修订版本属性可以在任何时候修改,很有可能有一些修订版本的属性会在已经同步后改变,因为svnsync synchronize不会对没有同步的修订版本范围进行操作,而不会注意修改范围之外的属性修改。这样导致了修订版本属性在源版本库与目标版本库的偏离,svnsync copy-revprops是这个问题的答案,用它可以同步特定修订版本的属性。
无
--non-interactive
--no-auth-cache
--username NAME
--password PASS
--config-dir DIR
为单个修订版本重新同步修订版本属性:
$ svnsync copy-revprops file:///opt/svn/repos-mirror 6
Copied properties for revision 6.
$
svnserve
当对远程源版本库使用svnsync时,使用Subversion的自定义网络协议。
svnserve允许Subversion版本库使用svn网络协议,你可以作为独立服务器进程运行svnserve,或者是使用其它进程,如inetd、xinetd(也是svn://)或使用svn+ssh://访问方法的sshd为你启动进程。
一旦客户端已经选择了一个版本库来传递它的URL,svnserve会读取版本库目录的conf/svnserve.conf文件,来检测版本库特定的设置,如使用哪个认证数据库和应用怎样的授权策略。关于svnserve.conf文件的详情见“svnserve,一个自定义的服务器”一节。
不象前面描述的例子,svnserve没有子命令—svnserve完全通过选项控制。
--daemon (-d)
导致svnserve以守护进程方式运行,svnserve维护本身并且接受和服务svn端口(缺省3690)的TCP/IP连接。
--listen-port=PORT
在守护进程模式时导致svnserve监听PORT端口。(FreeBSD守护进程缺省只监听tcp6—这个选项告诉他们监听tcp4。)
--listen-host=HOST
svnserve监听的HOST,可能是一个主机名或是一个IP地址。
--foreground
当与-d一起使用,会导致svnserve停留在前台,主要用来调试。
--inetd (-i)
导致svnserve使用标准输出/标准输入文件描述符,更准确的是使用inetd作为守护进程。
--help (-h)
显示有用的摘要和选项。
--version
显示版本信息,版本库后端存在和可用的模块列表。
--root=ROOT (-r=ROOT)
设置svnserve服务的版本库的虚拟根,客户端提供的URL中显示的路径会解释为这个根的相对路径,不会允许离开这个根。
--tunnel (-t)
导致svnserve以管道模式运行,很像inetd操作的模式(两种模式都维护标准输入/标准输出的连接),除了连接是用当前uid的用户名预先认证过的这一点。这个选项在客户端使用如ssh之类的管道时自动传递,这意味着你很少有必要再去传递这个参数给svnserve,所以如果你发现在命令行输入了svnserve --tunnel,并想知道接下来怎么做,可以看“穿越 SSH 隧道”一节。
--tunnel-user NAME
与--tunnel选项结合使用;告诉svnserve假定NAME就是认证用户,而不是svnserve进程的UID用户,当希望多个用户通过SSH共享同一个系统帐户,但是维护各自的提交标示符时非常有用。
--threads (-T)
当以守护进程模式运行,导致svnserve为每个连接产生一个线程而不是一个进程,svnserve进程本身在启动后会一直在后台。
--listen-once (-X)
导致svnserve在svn端口接受一个连接,维护完成它退出。这个选项主要用来调试。
名称
svnversion — 总结工作拷贝的本地修订版本。
svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]
svnversion是用来总结工作拷贝修订版本混合的程序,结果修订版本号或范围会写到标准输出。
通常在构建过程中利用其输出定义程序的版本号码。
如果提供TRAIL_URL,URL的尾端部分用来监测是否WC_PATH本身已经跳转(监测WC_PATH的跳转不需要依赖TRAIL_URL)。
当没有定义WC_PATH,会使用当前路径作为工作拷贝路径,如果没有显式定义WC_PATH,TRAIL_URL将无法定义。
像svnserve,svnversion没有子命令,只有选项。
--no-newline (-n)
忽略输出的尾端新行。.
--committed (-c)
使用最后修改修订版本而不是当前的(例如,本地存在的最高修订版本)修订版本。
--help (-h)
打印帮助摘要。
--version
打印svnversion,如果没有错误则退出。
如果工作拷贝都是一样的修订版本(例如,在更新后那一刻),会打印修订版本:
$ svnversion
4168
添加TRAIL_URL来展示工作拷贝不是从你希望的地方跳转过来的,注意这个命令需要WC_PATH:
$ svnversion . /repos/svn/trunk
4168
对于混合修订版本的工作拷贝,修订版本的范围会被打印:
$ svnversion
4123:4168
如果工作拷贝包含修改,后面会紧跟一个"M":
$ svnversion
4168M
如果工作拷贝已经跳转,后面会有一个"S":
$ svnversion
4168S
因此,这里是一个混合修订版本,跳转的工作拷贝包含了一些本地修改:
$ svnversion
4212:4168MS
如果从一个目录而不是工作拷贝调用,svnversion假定它是一个导出的工作拷贝并且打印"exported":
$ svnversion
exported
(。・v・。)