20
11

svn命令diff使用

0
归档:2012年11月分类:LAMP开发

名称

svn diff — 比较两条路径的区别。

概要

diff [-r N[:M]] [TARGET[@REV]...]
diff [-r N[:M]] --old OLD-TGT[@OLDREV] [--new NEW-TGT[@NEWREV]] [PATH...]
diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]

描述

显示两条路径的区别,svn diff有三种使用方式:

svn diff [-r N[:M]] [--old OLD-TGT] [--new NEW-TGT] [PATH...]会显示OLD-TGTNEW-TGT的区别。如果给定路径PATH,它会被看作OLD-TGTNEW-TGT的相对路径,输出也会限制在这些路径的区别上。OLD-TGTNEW-TGT可以是工作拷贝路径或者是URL[@REV]OLD-TGT缺省是当前工作目录,而NEW-TGT缺省是OLD-TGTN缺省是BASEM缺省时当前目录的版本,但如果NEW-TGT是一个URL,则默认是HEADsvn diff -r N设置OLD-TGT的修订版本为Nsvn diff -r N:M设置NEW-TGT的修订版本是M

svn diff [-r N[:M]] URL1[@N] URL2[@M]svn diff [-r N[:M]] --old=URL1 --new=URL2的缩写。

TARGET是一个URL,然后可以使用前面提到的--revision或“@”符号来指定N和M。

如果TARGET是工作拷贝路径,则--revision选项的含义是:

--revision N:M
服务器比较 TARGET@NTARGET@M

--revision N
客户端比较TARGET@N和工作拷贝。

(无--revision
客户端比较base和 TARGETTARGET

如果使用其他语法,服务器会比较URL1URL2各自的NM。如果省掉NM,会假定为HEAD

缺省情况下,svn diff忽略文件的祖先,只会比较两个文件的内容。如果你使用--notice-ancestry,比较修订版本(也就是,当你运行svn diff比较两个内容相同,但祖先历史不同的对象会看到所有的内容被删除又再次添加)时就会考虑路径的祖先。

别名

di

变化

是否访问版本库

获得工作拷贝非BASE修订版本的区别时会

选项

--revision (-r) REV
--old OLD-TARGET
--new NEW-TARGET
--extensions (-x) "ARGS"
--non-recursive (-N)
--diff-cmd CMD
--notice-ancestry
--username USER
--password PASS
--no-auth-cache
--non-interactive
--no-diff-deleted
--config-dir DIR

例子

比较BASE和你的工作拷贝(svn diff最经常的用法):

$ svn diff COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 4404)
+++ COMMITTERS	(working copy)

察看你的工作拷贝对旧的修订版本的修改:

$ svn diff -r 3900 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3900)
+++ COMMITTERS	(working copy)

使用“@”语法与修订版本3000和35000比较:

$ svn diff http://svn.collab.net/repos/svn/trunk/COMMITTERS@3000 \
http://svn.collab.net/repos/svn/trunk/COMMITTERS@3500
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 3500)
…

使用范围符号来比较修订版本3000和3500(在这种情况下只能传递一个URL):

$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 3500)

使用范围符号比较修订版本3000和3500trunk中的所有文件:

$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk

使用范围符号比较修订版本3000和3500trunk中的三个文件:

$ svn diff -r 3000:3500 --old http://svn.collab.net/repos/svn/trunk COMMITTERS README HACKING

如果你有工作拷贝,你不必输入这么长的URL:

$ svn diff -r 3000:3500 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 3500)

使用--diff-cmd CMD -x来指定外部区别程序

$ svn diff --diff-cmd /usr/bin/diff -x "-i -b" COMMITTERS 
Index: COMMITTERS
===================================================================
0a1,2
> This is a test
20
11

svn命令delete使用

0
归档:2012年11月分类:LAMP开发

名称

svn delete — 从工作拷贝或版本库删除一个项目。

概要

svn delete PATH...
svn delete URL...

描述

PATH指定的项目会在下次提交删除,文件(和没有提交的目录)会立即从版本库删除,这个命令不会删除任何未版本化或已经修改的项目;使用--force选项可以覆盖这种行为方式。

URL指定的项目会在直接提交中从版本库删除,多个URL的提交是原子操作。

别名

del, remove, rm

变化

如果操作对象是文件则是工作拷贝变化,对象是URL则会影响版本库。

是否访问版本库

对URL操作时访问

选项

--force
--force-log
--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--targets FILENAME
--username USER
--password PASS
--no-auth-cache
--non-interactive
--editor-cmd EDITOR
--encoding ENC
--config-dir DIR

例子

使用svn从工作拷贝删除文件只是预定要删除,当你提交,文件才会从版本库删除。

$ svn delete myfile
D         myfile

$ svn commit -m "Deleted file 'myfile'."
Deleting       myfile
Transmitting file data .
Committed revision 14.

然而直接删除一个URL,你需要提供一个日志信息:

$ svn delete -m "Deleting file 'yourfile'" file:///tmp/repos/test/yourfile

Committed revision 15.

如下是强制删除本地已修改文件的例子:

$ svn delete over-there 
svn: Attempting restricted operation for modified resource
svn: Use --force to override this restriction
svn: 'over-there' has local modifications

$ svn delete --force over-there 
D         over-there
20
11

svn命令copy使用

0
归档:2012年11月分类:LAMP开发

名称

svn copy — 拷贝工作拷贝的一个文件或目录到版本库。

概要

svn copy SRC DST

描述

拷贝工作拷贝的一个文件或目录到版本库。SRCDST既可以是工作拷贝(WC)路径也可以是URL:

WC -> WC
拷贝并且预定一个添加的项目(包含历史)。

WC -> URL
将WC或URL的拷贝立即提交。

URL -> WC
检出URL到WC,并且加入到添加计划。

URL -> URL
完全的服务器端拷贝,通常用在分支和标签。

注意

你只可以在单个版本库中拷贝文件,Subversion还不支持跨版本库的拷贝。

别名

cp

变化

如果目标是URL则包括版本库。

如果目标是WC路径,则是工作拷贝。

是否访问版本库

如果目标是版本库,或者需要查看修订版本号,则会访问版本库。

选项

--message (-m) TEXT
--file (-F) FILE
--revision (-r) REV
--quiet (-q)
--username USER
--password PASS
--no-auth-cache
--non-interactive
--force-log
--editor-cmd EDITOR
--encoding ENC
--config-dir DIR

例子

拷贝工作拷贝的一个项目(只是预定要拷贝—在提交之前不会影响版本库):

$ svn copy foo.txt bar.txt
A         bar.txt
$ svn status
A  +   bar.txt

拷贝你的工作拷贝的一个项目到版本库的URL(直接的提交,所以需要提供一个提交信息):

$ svn copy near.txt file:///tmp/repos/test/far-away.txt -m "Remote copy."

Committed revision 8.

拷贝版本库的一个项目到你的工作拷贝(只是预定要拷贝—在提交之前不会影响版本库):

提示

这是恢复死掉文件的推荐方式!

$ svn copy file:///tmp/repos/test/far-away near-here
A         near-here

最后,是在URL之间拷贝:

$ svn copy file:///tmp/repos/test/far-away file:///tmp/repos/test/over-there -m "remote copy."

Committed revision 9.

提示

这是在版本库里作“标签”最简单的方法—svn copy那个修订版本(通常是HEAD)到你的tags目录。

$ svn copy file:///tmp/repos/test/trunk file:///tmp/repos/test/tags/0.6.32-prerelease -m "tag tree"

Committed revision 12.

不要担心忘记作标签—你可以在以后任何时候给一个旧版本作标签:

$ svn copy -r 11 file:///tmp/repos/test/trunk file:///tmp/repos/test/tags/0.6.32-prerelease -m "Forgot to tag at rev 11"

Committed revision 13.
16
11

svn命令blame使用

0
归档:2012年11月分类:LAMP开发

名称

svn blame — 显示特定文件和URL内嵌的作者和修订版本信息。

概要

svn blame TARGET...

描述

显示特定文件和URL内嵌的作者和修订版本信息。每一行文本在开头都放了最后修改的作者(用户名)和修订版本号。

别名

praise、annotate、ann

变化

是否访问版本库

选项

--revision (-r) REV
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR
--verbose

例子

如果你希望在测试版本库看到blame标记的readme.txt源代码:

$ svn blame http://svn.red-bean.com/repos/test/readme.txt
     3      sally This is a README file.
     5      harry You should read this.
16
11

svn命令commit使用

0
归档:2012年11月分类:LAMP开发

名称

svn commit — 将修改从工作拷贝发送到版本库。

概要

svn commit [PATH...]

描述

将修改从工作拷贝发送到版本库。如果你没有使用--file--message提供一个提交日志信息,svn会启动你的编辑器来编写一个提交信息,见“config”一节editor-cmd小节。

提示

如果你开始一个提交并且Subversion启动了你的编辑器来编辑提交信息,你仍可以退出而不会提交你的修改,如果你希望取消你的提交,只需要退出编辑器而不保存你的提交信息,Subversion会提示你是选择取消提交、空信息继续还是重新编辑信息。

别名

ci(“check in”的缩写;不是“checkout”的缩写“co”。)

变化

工作拷贝,版本库

是否访问版本库

选项

--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--non-recursive (-N)
--targets FILENAME
--force-log
--username USER
--password PASS
--no-auth-cache
--non-interactive
--encoding ENC
--config-dir DIR

例子

使用命令行提交一个包含日志信息的文件修改,当前目录(“.”)是没有说明的目标路径:

$ svn commit -m "added howto section."
Sending        a
Transmitting file data .
Committed revision 3.

提交一个修改到foo.c(在命令行明确指明),并且msg文件中保存了提交信息:

$ svn commit -F msg foo.c
Sending        foo.c
Transmitting file data .
Committed revision 5.

如果你希望使用在--file选项中使用在版本控制之下的文件作为参数,你需要使用--force-log选项:

$ svn commit --file file_under_vc.txt foo.c
svn: The log message file is under version control
svn: Log message file is a versioned file; use '--force-log' to override

$ svn commit --force-log --file file_under_vc.txt foo.c
Sending        foo.c
Transmitting file data .
Committed revision 6.

提交一个已经预定要删除的文件:

$ svn commit -m "removed file 'c'."
Deleting       c

Committed revision 7.
16
11

svn命令checkout使用

0
归档:2012年11月分类:LAMP开发

名称

svn checkout — 从版本库取出一个工作拷贝。

概要

svn checkout URL[@REV]... [PATH]

描述

从版本库取出一个工作拷贝,如果省略PATH,URL的基名称会作为目标,如果给定多个URL,每一个都会检出到PATH的子目录,使用URL基名称的子目录名称。

别名

co

变化

创建一个工作拷贝。

是否访问版本库

选项

--revision (-r) REV
--quiet (-q)
--non-recursive (-N)
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

例子

取出一个工作拷贝到mine

$ svn checkout file:///tmp/repos/test mine
A  mine/a
A  mine/b
Checked out revision 2.
$ ls
mine

检出两个目录到两个单独的工作拷贝:

$ svn checkout file:///tmp/repos/test  file:///tmp/repos/quiz
A  test/a
A  test/b
Checked out revision 2.
A  quiz/l
A  quiz/m
Checked out revision 2.
$ ls
quiz  test

检出两个目录到两个单独的工作拷贝,但是将两个目录都放到working-copies

$ svn checkout file:///tmp/repos/test  file:///tmp/repos/quiz working-copies
A  working-copies/test/a
A  working-copies/test/b
Checked out revision 2.
A  working-copies/quiz/l
A  working-copies/quiz/m
Checked out revision 2.
$ ls
working-copies

如果你打断一个检出(或其它打断检出的事情,如连接失败。),你可以使用同样的命令重新开始或者是更新不完整的工作拷贝:

$ svn checkout file:///tmp/repos/test test
A  test/a
A  test/b
^C
svn: The operation was interrupted
svn: caught SIGINT

$ svn checkout file:///tmp/repos/test test
A  test/c
A  test/d
^C
svn: The operation was interrupted
svn: caught SIGINT

$ cd test
$ svn update
A  test/e
A  test/f
Updated to revision 3.
16
11

svn命令add使用

0
归档:2012年11月分类:LAMP开发

名称

svn add — 添加文件、目录或符号链。

概要

svn add PATH...

描述

添加文件、目录或符号链到你的工作拷贝并且预定添加到版本库。它们会在下次提交上传并添加到版本库,如果你在提交之前改变了主意,你可以使用svn revert取消预定。

别名

变化

工作拷贝

是否访问版本库

选项

--targets FILENAME
--non-recursive (-N)
--quiet (-q)
--config-dir DIR
--auto-props
--no-auto-props
--force

例子

添加一个文件到工作拷贝:

$ svn add foo.c 
A         foo.c

当添加一个目录,svn add缺省的行为方式是递归的:

$ svn add testdir
A         testdir
A         testdir/a
A         testdir/b
A         testdir/c
A         testdir/d

你可以只添加一个目录而不包括其内容:

$ svn add --non-recursive otherdir
A         otherdir

通常情况下,命令svn add *会忽略所有已经在版本控制之下的目录,有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add--force递归到版本化的目录下:

$ svn add * --force
A         foo.c
A         somedir/bar.c
A         otherdir/docs/baz.doc
[...]
16
11

svn命令cleanup使用

0
归档:2012年11月分类:LAMP开发

名称

svn cleanup — 递归清理工作拷贝。

概要

svn cleanup [PATH...]

描述

递归清理工作拷贝,删除未完成的操作锁定。如果你得到一个“工作拷贝已锁定”的错误,运行这个命令可以删除无效的锁定,让你的工作拷贝再次回到可用的状态。

如果,因为一些原因,运行外置的区别程序(例如,用户输入或是网络错误)有时候会导致一个svn update失败,使用--diff3-cmd选项可以完全清除你的外置区别程序所作的合并,你也可以使用--config-dir指定任何配置目录,但是你应该不会经常使用这些选项。

别名

变化

工作拷贝

是否访问版本库

选项

--diff3-cmd CMD
--config-dir DIR

例子

svn cleanup没有输出,没有太多的例子,如果你没有传递路径,会使用“.”。

$ svn cleanup

$ svn cleanup /path/to/working-copy
Page1of1

公告栏

欢迎大家来到我的博客,我是dodoro,希望我的博客能给你带来帮助。