开发人员常用SVN命令

(1) 导入项目

$ cd 
~
/project
$ mkdir -p svntest/
{ trunk , branches , tags }
$ svn
import svntest https : //localhost/test/svntest --message "Start project"
...
$ rm
- rf svntest

我 们新建一个项目svntest,在该项目下新建三个子目录:trunk,开发主干;branches,开发分支;tags,开发阶段性标签。然后导入到版 本库test下,然后把svntest拿掉。

(2) 导出项目

$ svn checkout https://localhost/test/svntest/trunk 修订版本号的指定方式是每个开发人员必须了解的,以下是几个参考例子,说明可参考svn推荐书。

$ svn diff 
--
revision PREV
:
COMMITTED foo
.
c

# shows the last change committed to foo.c

$ svn log 
--
revision HEAD

# shows log message for the latest repository commit

$ svn diff 
--
revision HEAD

# compares your working file (with local changes) to the latest version in the repository

$ svn diff 
--
revision BASE
:
HEAD foo
.
c

# compares your "pristine" foo.c (no local changes) with the latest version in the repository

$ svn log 
--
revision BASE
:
HEAD

# shows all commit logs since you last updated

$ svn update 
--
revision PREV foo
.
c

# rewinds the last change on foo.c (foo.c's working revision is decreased)

$ svn checkout 
--
revision 
3

# specified with revision number

$ svn checkout 
--
revision 
{
2002
-
02
-
17
}

$ svn checkout
-- revision { 15 : 30 }
$ svn checkout
-- revision { 15 : 30 : 00.200000 }
$ svn checkout
-- revision { "2002-02-17 15:30" }

$ svn checkout
-- revision { "2002-02-17 15:30 +0230" }
$ svn checkout
-- revision { 2002 - 02 - 17T15 : 30 }
$ svn checkout
-- revision { 2002 - 02 - 17T15 : 30Z }
$ svn checkout
-- revision { 2002 - 02 - 17T15 : 30 - 04 : 00 }

$ svn checkout
-- revision { 20020217T1530 }
$ svn checkout
-- revision { 20020217T1530Z }
$ svn checkout
-- revision { 20020217T1530 - 0500 }

(3) 日常指令

$ svn update

$ svn add foo
. file
$ svn add foo1
. dir
$ svn add foo2
. dir -- non - recursive
$ svn
delete README
$ svn copy foo bar
$ svn move foo1 bar1

$ svn status
$ svn status
-- verbose

$ svn status
-- verbose -- show - updates
$ svn status stuff
/ fox . c

$ svn diff
$ svn diff
> patchfile

$ svn revert README
$ svn revert

修 改冲突发生时,会生成三个文件:.mine, .rOLDREV, .rNEWREV。比如:

$ ls 
-
l
sandwich
. txt
sandwich
. txt . mine
sandwich
. txt . r1
sandwich
. txt . r2

解 决修改冲突方式之一:修改冲突的文件sandwich.txt,然后运行命令:

$ svn resolved sandwich
.
txt

方 式之二:用库里的新版本覆盖你的修改:

$ cp sandwich
.
txt
.
r2 sandwich
.
txt
$ svn resolved sandwich
. txt

方 式之三:撤销你的修改,这种方式不需要运行resolved子命令:

$ svn revert sandwich
.
txt
Reverted 'sandwich.txt'
$ ls sandwich
.*
sandwich
. txt

确 保没问题后,就可以提交了。

$ svn commit 
--
message 
"Correct some fatal problems"

$ svn commit
-- file logmsg
$ svn commit

(4) 检验版本历史

$ svn log
$ svn log
-- revision 5 : 19
$ svn log foo
. c
$ svn log
- r 8 - v

$ svn diff
$ svn diff
-- revision 3 rules . txt
$ svn diff
-- revision 2 : 3 rules . txt
$ svn diff
-- revision 4 : 5 http : //svn.red-bean.com/repos/example/trunk/text/rules.txt

$ svn cat
-- revision 2 rules . txt
$ svn cat
-- revision 2 rules . txt > rules . txt . v2

$ svn list http
: //svn.collab.net/repos/svn

$ svn list
-- verbose http : //svn.collab.net/repos/svn

$ svn checkout
-- revision 1729 # Checks out a new working copy at r1729

$ svn update
-- revision 1729 # Updates an existing working copy to r1729

(5) 其他有用的命令

svn cleanup 为失败的事务清场。

(6) 分支和合并

建立分支方法一:先 checkout然后做拷贝,最后提交拷贝。

$ svn checkout http
:
//svn.example.com/repos/calc bigwc

A  bigwc
/ trunk /
A  bigwc
/ trunk / Makefile
A  bigwc
/ trunk / integer . c
A  bigwc
/ trunk / button . c
A  bigwc
/ branches /

Checked out revision 340.

$ cd bigwc
$ svn copy trunk branches
/ my - calc - branch
$ svn status
A  
+   branches / my - calc - branch

$ svn commit
- m "Creating a private branch of /calc/trunk."

Adding         branches / my - calc - branch
Committed revision 341.

建 立分支方法二:直接远程拷贝。

$ svn copy http
:
//svn.example.com/repos/calc/trunk /

           http
: //svn.example.com/repos/calc/branches/my-calc-branch  /
     
- m "Creating a private branch of /calc/trunk."

Committed revision 341.

建 立分支后,你可以把分支checkout并继续你的开发。

$ svn checkout http
:
//svn.example.com/repos/calc/branches/my-calc-branch

假 设你已经checkout了主干,现在想切换到某个分支开发,可做如下的操作:

$ cd calc
$ svn info
| grep URL
URL
: http : //svn.example.com/repos/calc/trunk
$ svn
switch
http
: //svn.example.com/repos/calc/branches/my-calc-branch
U   integer
. c
U   button
. c
U  
Makefile
Updated to revision 341.
$ svn info
| grep URL
URL
:
http
: //svn.example.com/repos/calc/branches/my-calc-branch

合 并文件的命令参考:

$ svn diff 
-
r 
343
:
344
 http
:
//svn.example.com/repos/calc/trunk

$ svn merge
- r 343 : 344 http : //svn.example.com/repos/calc/trunk
$ svn commit
- m "integer.c: ported r344 (spelling fixes) from trunk."
$ svn merge
- r 343 : 344 http : //svn.example.com/repos/calc/trunk my-calc-branch

$ svn merge http
: //svn.example.com/repos/branch1@150 /
            http
: //svn.example.com/repos/branch2@212
 
/
           
my - working - copy
$ svn merge
- r 100 : 200 http : //svn.example.com/repos/trunk my-working-copy
$ svn merge
- r 100 : 200
http
: //svn.example.com/repos/trunk
$ svn merge
-- dry - run - r 343 : 344 http : //svn.example.com/repos/calc/trunk

最 后一条命令仅仅做合并测试,并不执行合并操作。

建立标签和建立分支没什么区别,不过是拷贝到不同的目录而已。

$ svn copy http
:
//svn.example.com/repos/calc/trunk /

           http
: //svn.example.com/repos/calc/tags/release-1.0  /
     
- m "Tagging the 1.0 release of the 'calc' project."

$ ls
my - working - copy /
$ svn copy
my - working - copy http : //svn.example.com/repos/calc/tags/mytag
Committed revision 352.

后 一种方式直接把本地的工作拷贝复制为标签。

此外,你还可以删除某个分支。

$ svn 
delete
 http
:
//svn.example.com/repos/calc/branches/my-calc-branch /

       
- m "Removing obsolete branch of calc project."

你可能感兴趣的:(开发人员常用SVN命令)