一、svn命令操作
Steven在他的用户目录中有workplace目录,他想把DemoProject签出到他的workplace目录中,并进行操作:
0、 进入workplace目录,使用checkout命令签出:
# cd workplace
# checkout DemoProject
此时注意: 如果你的登陆的linux终端登陆用户和你的svn操作用户名同名(比如都是steven),则会提示你输入svn操作用户的密码,否则会先提示你输入linux终端用户密码,然后提示你输入svn操作用户名和密码
进行完上面操作后, 在workplace目录中就会出现DemoProject目录。
1、 单个文件的操作(hello.cpp) 进入到目录DemoProject/src/demo
A) 更新到本地
# svn up
B) 修改后提交到库
# commit hello.cpp
# svn up
C) 新增一个文件到库(进入src/include目录)
# svn up 更新本地工作目录
# svn add hello.h 添加到库
# commit hello.h 提交hello.h到库
# svn up 更新本地工作目录
D)删除库上一个文件(进入src/demo目录)
# svn del hello.cpp 删除库中的hello.cpp文件
# commit hello.cpp 提交到库
# svn up 更新本地工作目录
2、 文件夹的操作(这里需要考虑文件夹中还有子文件夹的情况)(src目录)
A) 更新指定文件夹到本地(进入DemoProject目录)
# svn up src //则src目录及目录下的所有子文件夹更新到DemoProject目录下
B) 提交修改过的整个文件夹到库(修改了文件夹include )
# svn up
# commit include
# svn up
C) 新增一个文件夹到库(DemoProject/lib)
进入DemoProject目录:
# svn mkdir lib 创建lib包
# commit lib 提交到库
# svn up 更新本地工作目录
D)删除库上一个文件夹(demo) 进入DemoProject/src/目录
# svn up 更新本地工作目录
# svn del demo 删除demo文件夹
# commit demo 将删除提交到库
3、 本地与库之间的操作
A) 查看库上目录结构(查看DemoProject目录结构)
# list DemoProject
B) 对比本地与库上某个文件或者整个文件夹(进入src/demo目录):
# svn diff hello.cpp
C) 查看库上某个文件提交记录(什么时间、什么人提交过)
# svn log –v hello.cpp
4、 其他操作
A) 查看src/demo目录下的文件的状态(是否修改后没有提交等)
# svn st
如果你的 hello.cpp修改后还没有提交,则使用svn st会在第一列显示hello.cpp的状态为M,表示项目已经修改但没有提交到库。
B) 查看svn命令的帮助
# svn help update 查看update命令的帮助.
C) 提交时冲突(没有更新本地工作目录而修改文件导致冲突)处理:
(1) 想使用项目仓库中的版本,而放弃本地拷贝的修改:
# svn revert hello.cpp
# svn up
(2) 想保留本地工作拷贝的修改,而放弃项目仓库中版本的修改:
# 当你解决了冲突的文件,就可以使用resolved
# svn resolved
# svn commit hello.cpp
D)checkout下来库的老版本
首先查看你需要checkout下来的DemoProject老版本,然后再checkout下来:
# svn log DemoProject 查看老版本,比如是4330版本
# checkout DemoProject –r 4330
二、文件状态
svn status打印五列字符,紧跟一些空格,接着是文件或者目录名。第一列告诉一个文件的状态或它的内容,返回代码解释如下:
A item
文件、目录或是符号链item
预定加入到版本库。
C item
文件item
发生冲突,在从服务器更新时与本地版本发生交迭,在你提交到版本库前,必须手工的解决冲突。
D item
文件、目录或是符号链item
预定从版本库中删除。
M item
文件item
的内容被修改了。
R item
文件、目录或是符号链item
预定将要替换版本库中的item
,这意味着这个对象首先要被删除,另外一个同名的对象将要被添加,所有的操作发生在一个修订版本。
X item
目录没有版本化,但是与Subversion的外部定义关联,关于外部定义,可以看“外部定义”一节。
? item
文件、目录或是符号链item
不在版本控制之下,你可以通过使用svn status的--quiet
(-q
)参数或父目录的svn:ignore
属性忽略这个问题,关于忽略文件的使用,见“svn:ignore
”一节。
! item
文件、目录或是符号链item
在版本控制之下,但是已经丢失或者不完整,这可能因为使用非Subversion命令删除造成的,如果是一个目录,有可能是检出或是更新时的中断造成的,使用svn update可以重新从版本库获得文件或者目录,也可以使用svn revert file恢复原来的文件。
~ item
文件、目录或是符号链item
在版本库已经存在,但你的工作拷贝中的是另一个。举一个例子,你删除了一个版本库的文件,新建了一个在原来的位置,而且整个过程中没有使用svn delete或是svn add。
I item
文件、目录或是符号链item
不在版本控制下,Subversion已经配置好了会在svn add、svn import和svn status命令忽略这个文件,关于忽略文件,见“svn:ignore
”一节。注意,这个符号只会在使用svn status的参数--no-ignore
时才会出现—否则这个文件会被忽略且不会显示!