Saturday, October 17, 2009

[SVN]SVN速查

参考

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)

No comments: