1. 项目初期导入
1-1. 初始化一个版本库
版本库 repository 可以包含多个 模块 module, 每个模块可以当作一个项目树
$ cvs -d /path/to/repo init
1-2. 服务器端导入
$ cd /path/to/src
$ cvs -d /path/to/repo import -I "*.class" -m "pjname first import by local" pjname vender_tag release_tag
$ cd /path/to/src
$ export CVSROOT=/path/to/repo
$ cvs import -I "*.class" pjname vender_tag release_tag
1-3. 客户端导入
$ cd /path/to/src
$ cvs -d :pserver:go@hostname:/path/to/repo login
$ cvs -d :pserver:go@hostname:/path/to/repo import -m "pjname first import by remoting" pjname vender_tag release_tag
参数说明
cvs -d: 指定项目本地目录
-I: 指定被忽略的文件 (仅在本次操作时生效, 可设置 cvsignore, 所有处理都生效)
pjname: 导入模块名 (checkout 时将使用的模块名)
2. Checkout
$ cvs -d :pserver:go@localhost:/home/cvsroot/project1 co -d src_cvs src
cvs -d: 指定项目地址
co -d src_cvs: 指定 checkout 时本地工作目录
src: cvs 中的模块名 (import 时指定)
3. 设置 cvs 忽略文件或目录 ???
3-1. ~/.cvsignore
执行 cvs 命令的用户 home 目录, 对所有操作生效
3-2. .cvsignore
某用作目录 (子目录), 只对本目录生效, 不影响子目录
3-3. 内容
$ cat .cvsignore
.cvsignore
*.jar
*.class
4. 删除文件或文件夹
4-1. 删除项目仓库
直接在服务器上删除文件夹即可
4-2. 删除文件
$ cvs remove -f filename
$ cvs add filename (未 commit 之前, 撤消删除)
$ cvs commit
4-3. 删除文件夹
$ cvs remove -f dirname
$ cvs add dirname (未 commit 之前, 撤消删除)
$ cvs commit
$ cvs up -P
5. 添加文件或文件夹
5-1. 添加文件
$ cvs add filename
$ cvs remove -f filename (未 commit 之前, 撤消添加文件)
$ cvs commit filename
5-2. 添加文件夹 (文件, 子文件夹等要分别添加)
$ cvs add dirname
$ cvs remove -f dirname (未 commit 之前, 撤消添加文件夹)
$ cvs add dirname/*.java (最好指定后缀)
5-3. 添加二进制文件
5-3-1. 客户端提交时指定
$ cvs add -kb filename
5-3-2. 提交后指定在服务器端指定
$ cvs admin -kb filename
$ cvs up -A (之后需要更新客户端本地工作目录)
6. 修改文件或文件夹名称 (去旧加新)
$ mv oldname newname
$ cvs remove oldname
$ cvs add newname
$ cvs commit -m "renamed oldname to newname" oldname newname
7. 更新本地工作目录
7-1. 对比本地与服务器之间有无不同
$ cvs -q -n up
-q: 不显示一般信息
-Q: 显示更少的信息
-n: 不真正执行写入之类的操作
7-2. 强制更新本地文件, 覆盖本地
$ cvs up filename -C
7-3. 将 cvs 中添加删除文件夹反映到本地工作目录
$ cvs up -d -P
-d: 将 cvs 中增加的文件夹增加到本地工作目录
-P: 将 cvs 中删除的文件夹从本地工作目录删除
7-4. 改变本地工作目录所工作的分支
7-4-1. 指定分支
$ cvs up -r branch_name
7-4-2. 恢复到最新 HEAD 分支 (none)
$ cvs up -A
7. 2 版本间比较
$ cvs diff -r rev1 -r rev2 filename
8. 显示文件每行版本
$ cvs ann filename (显示文件中每行是最终是由哪个版本增加或更新的, 删除的行不显示)
9. 显示 tag, branch 等信息
$ cvs status -v
Sticky Tag: 当前本地工作目录工作在哪个 branch 上, 默认是 trunk (none)
10. 管理 tag 和 branch
10-1. 创建, 删除 tag
$ cvs tag tag_release_1_0
$ cvs tag -d tag_release_1_0 (删除)
10-2. 创建, 删除 branch
$ cvs tag -b branch_release_1_0 (以当前主干最新版本创建分支)
$ cvs tag -d -B branch_release_1_0 (删除)
11. 项目 release 之后的 bug 修改
为了项目发布后的 bug 修改, 创建版本分支, 3.1 版本的开发继续在 trunk 中进行
11-1. 从 tag_release_3_0 导出一个 branch_bugfix_3_0
$ cvs tag -b -r tag_release_3_0 branch_bugfix_3_0 [module]
11-2. checkout 出指定 branch 的代码 (按 tag checkout 的代码是只读的, 不能 commit)
$ cvs checkout -r branch_bugfix_3_0 [module]
11-3. 修改 bug 后, 创建新的 tag
$ cvs tag tag_release_3_0_1
11-4. 如果所修改的 bug, 在 3.1 版本中也需要对应, 可以合并修改到 3.1 当前代码中
进入 3.1 版本中所需要合并修改的目录
$ cvs update -j tag_release_3_0_1
$ cvs commit
12. 代理设置
$ cvs "-d:pserver;proxy=proxy.host.com;proxyport=80:anonymous@cvs.pgfoundry.org:/cvsroot/textsearch-ja" login
$ cvs "-d:pserver;proxy=proxy.host.com;proxyport=80:anonymous@cvs.pgfoundry.org:/cvsroot/textsearch-ja" checkout <module_name>
13. 查看 cvs 服务器 pserver 的 2401 端口是否打开
$ telnet www.cvs.com 2401
14. 帮助信息
$ cvs --help-options
$ cvs --help-commands
$ cvs --help import
15. 查看 CVS 中存在的分支 (Branch)
$ cvs log -h | awk -F"[.:]" '/^\t/&&$(NF-1)==0 { print $1}' | sort -u
16. 在 CVS 中使用 SSH
[客户端]
$ export CVS_RSH=ssh
$ cvs -d server:/proj/cvsroot co <module_name>
[服务器端设置 TODO]
17. 从服务器导出不包含 CVS 目录的文件
$ cvs --help export
18. $HOME/.cvsrc 文件
存在用户主目录下, 指定 cvs 命令默认执行的选项
$ cat $HOME/.cvsrc
cvs -q
diff -u -b -B
checkout -P
update -d -P
19. 修改提交后的注释
cvs admin -m 1.3:"write some comments here" file_name
1.3 : 版本号
20. rcsinfo rcstemplate
...
21. 恢复旧版本
21-1. 文本文件
$ cvs -Q update -p -r 1.35 file_name > file_name
$ cvs commit -m "コメント" file_name
21-2. 二进制文件 (手动恢复到旧版本)
$ mv file_name file_name.new
$ cvs up -r1.1 file_name
$ mv file_name file_name.old
$ cvs up -A file_name
$ mv file_name.old file_name
$ cvs commit file_name
0 件のコメント:
コメントを投稿