参考
SVN refence
SVN: How to resolve a conflict
常用命令
1 创建工程myproject1
svnadmin create /home/svn/myproject1
在/home/svn目录底下, 你可以看见每个工程都对应一个目录. 目录里存放的是改工程的相关数据库.每个工程有不同的设置,也有自己独立的commit number.
2 导入目录mydir1进入myproject1
$ svn import -m "New import" /path/to/mydir1 file:///home/svn/myproject1/mydir1
Adding mydir1/file1
Adding mydir1/file2
…
Transmitting file data .........
Committed revision 1.
3 检出工程
svn co file:///home/svn/myproject1
或者
svn co svn+ssh://hostname/home/svn/myproject1
4 添加文件或者文件夹
svn add newfile
如果要添加文件夹newdir,但是不包括newdir底下的已有文件(默认是递归添加的)
svn add --depth empty newdir
5 提交更改
svn commit -m "add newfile"
6 查看本地或者网络svn工程目录的情况
svn list http://192.168.61.79/repos/server
svn list -v http://192.168.61.79/repos/server
7 查看服务器端foo.c的内容,保存到当前目录的foo.c.tmp中.
svn cat foo.c > foo.c.tmp
查看foo.c在111版本时的内容
svn cat foo.c -r 111
8 检出某一版本的工程文件
svn co http://192.168.61.79/repos/server -r 4
9 改变当前已存在的工程文件到某个版本
svn update -r 4
10 删除某个文件或者目录
svn delete foo.c
11 查看当前目录或者网络上的svn工程的情况
svn -v status
12 查看工程的更新信息
svn log
svn log http://192.168.61.79/repos/server
13 只更新某个文件(比如foo.c)
svn update foo.c
14 放弃foo.c中的地修改,将其恢复到服务器上的版本
svn revert foo.c
15 消除foo.c的conflict标记
svn revert foo.c
冲突解决
多人使用svn合作的时候,常常发生对文件修改的冲突.比如user1 checkout了foo.c的一个版本后,做了本地修改, 然后commit. 但是user2 在user1 commit之前也checkout 了foo.c.等到user2来commit的时候就会被告知:
svn: Commit failed (details follow):
svn: File or directory 'foo.c' is out of date; try updating
svn: resource out of date; try updating
user2这个时候运行
svn up
Conflict discovered in 'foo.c'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
这是因为svn发现了conflict, 需要user2采取措施解决. user2可以采取的动作总共包括
(e) edit - change merged file in an editor
(df) diff-full - show all changes made to merged file
(r) resolved - accept merged version of file
(dc) display-conflict - show all conflicts (ignoring merged version)
(mc) mine-conflict - accept my version for all conflicts (same)
(tc) theirs-conflict - accept their version for all conflicts (same)
(mf) mine-full - accept my version of entire file (even non-conflicts)
(tf) theirs-full - accept their version of entire file (same)
(p) postpone - mark the conflict to be resolved later
(l) launch - launch external tool to resolve conflict
(s) show all - show this list
这里我们的选择包括
- 如果接受user1的版本而放弃本地修改,选择tc或者tf. 使用tf的话会整个文件一起使用user1的版本,哪怕中间有不冲突的部分.
- 如果坚持本地修改,选择mc或者mf. mf就整个文件都使用user2的版本
- 如果想要手动修改解决冲突,就使用e (edit)
- 如果暂时不做决定,等一会再说, p (postpone)