CVS的常
用命令速查
手冊
本文出自:http://www.linuxforum.net 作者:車東 chedong@bigfoot.com
CVS環(huán)境初始
化:CVS環(huán)
境的搭建
CVS的
日常使用:日常開發(fā)中最常用的CVS命令
CVS的分支開發(fā):項目按照不同進度和目標并發(fā)進行
CVS的用戶認證:通過SSH的遠程用戶認證,安全,簡單
CVSWEB:CVS的WEB
訪問界面大大提高比較代碼修改的效率
CVS TAG:將$Id$加入代碼注釋中,方便開發(fā)過程的跟蹤
CVS環(huán)境初始化
===========
環(huán)境設置:
tcsh
setenv CVSROOT
/path/to/cvsroot
bash
CVSROOT=/path/to/cvsroot ; export
CVSROOT
初始化:
cvs init
項目首次導入
cvs import -m "write
some comments here" project_name vender_tag r_tag
項目導出:將代碼從CVS庫里導出
cvs
checkout project_name
CVS的日常使用
=============
確
認修改:確認自己的修改并寫入到CVS庫里
cvs commit -m "write some comments here" file_name
注
意:CVS的
很多動作都是通過cvs
commit進行最后確認并修改的,在確認的前,還需
要用戶填寫修改注釋,以幫助其他開發(fā)人員了解修改的原因。如果不用寫-m
"comments"
而直接確認`cvs commit file_name` 的話,cvs會自動調用系統(tǒng)缺省的文字編輯器(一
般是
vi)要求你寫入注釋。
注釋的質量很重要:所以不僅必須要寫,而且必須寫一些比較有意義的內容:以方便其
他開發(fā)人員能夠很好的理解
不好的注釋,很難讓其他的開發(fā)人員快速的理解:比如: -m "bug fixed" 甚至 -m ""
好的注釋,甚至可以用中
文: -m "在用戶注冊過程中加入了Email地址校驗"
同步最近修改:開始工作前和將自己的工作導入到CVS庫里前都要
做一次:先同步 后修改
cvs update -m "write some comments here" file_name
注
意:不要使用項目首次導出后,以后就要用cvs update在導出的項目目錄下進行同步了,
而不是每次重新cvs
checkout來同步文件了。如果導出后修改了文件,然后再次從導出的
項目目錄的上一級cvs checkout proj等于是刪除了proj目錄然后重新導出,上次導出后
的修改就全丟了。
修改某個版本注釋:每次
只確認一個文件到CVS庫
里是一個很好的習慣,但難免有時候忘
了指定文件名,把多個文件以同樣注釋commit到CVS庫里了,以下命令可以允許你修改某
個文件某個版本
的注釋:
cvs
admin -m 1.3:"write some comments here" file_name
刪除文件:文件刪除后,比
如:rm file_name
cvs rm file_name
cvs ci -m "write some
comments here"
注意:很多cvs命令都有縮寫形式:commit=>ci update=>up
checkout=>co remove=>rm
添加文件 文件添加后,比如:touch new_file
cvs add
new_file
cvs ci -m "write some comments here"
添加目錄:
cvs add
dir_name
查看修改歷史:cvs log file_name
cvs history file_name
查
看當前文件不同版本的區(qū)別
cvs diff -r1.3 -r1.5 file_name
查看當前文件(可能已經修改了)和庫中相應
文件的區(qū)別
cvs diff file_name
更方便的定位文件修改和比較版本區(qū)別的辦法請看后面的cvsweb使用
正確的通過CVS恢復舊版本的方法:
如果用cvs update -r1.2 file.name
這
個命令是給
file.name加一個STICK TAG: "1.2" ,雖然你的本意只是想將它恢復
到1.2版本
正確的恢復版本的方法是:cvs
update -p -r1.2 file_name >file_name
如果不小心已經加成STICK TAG的話:用cvs
update -A 解決
刪除,移動目錄:
最方便的方法是直接移動,刪除CVSROOT里相應目錄:CVS所有項目都
是按目錄獨立的:
好比一顆樹,其實砍下任意一枝都能獨立存活,對目錄修改后,要求其開發(fā)人員
cvs checkout
project_name 或者 cvs update -dP同步
CVS Branch:多分支同步開發(fā)
=========================
確認版本里程碑:多個文件各自版本號不一樣,項目到一定階段,可以給所有文件統(tǒng)一
指定一個階段里程碑版本號,方便以后按照
這個階段里程碑版本號導出項目,同時也是
項目的多個分支開發(fā)的基礎。
cvs tag release_1_0
在
開發(fā)proj的2.0版本的時候發(fā)現(xiàn)1.0有問題,但2.0又不敢用,則從release_1_0標記出
一個分支
release_1_0_patch
cvs rtag -b -r release_1_0 release_1_0_patch
proj
一些人先在另外一個目錄下導出這個分支:解決1.0中的緊急問題,而其他人員2.0仍舊
在項目的主干上開發(fā)
cvs
checkout -r release_1_0_patch
在release_1_0_patch上修正錯誤后,標記一個1.0的
錯誤修正版本號
cvs tag release_1_0_patch_1
如果2.0認為這些錯誤修改在2.0里也需要,就在
2.0的開發(fā)目錄下合并
release_1_0_patch_1中的修改到當前代碼中:
cvs update -j
release_1_0_patch_1
CVS的遠程認證:通過SSH遠程訪問CVS
================================
使用cvs本身的遠程認證很麻煩,需要定義服務器和用戶名密碼等,而且不安全,因此
和系統(tǒng)本地帳號結合并通過SSH進行認證
是比較好的辦法,通過在profile里設置一
下內容:
CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot
CVS_RSH=ssh;
export CVSROOT CVS_RSH
所有用戶都可以獲得CVS服務器的
如果CVS所在服務器
的SSH端口不在缺省的22,或者和客戶端與服務器端SSH缺省端口
不一致,則創(chuàng)建一個ssh_cvs腳本,有時候設置了:
:ext:$USER@test.server.address#port:/path/to/cvsroot
仍然不行,比如有以下錯誤信息:
ssh: 133.133.33.33#3333: Name or service not known
cvs
[checkout aborted]: end of file from server (consult above messages if
any)
解決的方法是做一個標本指定端口轉向(不能使用alias,會出找不到文件錯誤):
more ssh_cvs
#!/usr/bin/sh
ssh -p 34567 $*
然后:chmod +x /usr/bin/ssh_cvs
并CVS_RSH=ssh_cvs;
export CVS_RSH
CVSWEB:提高程序員比較文件的效率
===============================
CVSWEB
就是CVS的
WEB界面,可以大大提高程序員定位修改的效率:
使用的樣例可以看:http://www.freebsd.org/cgi
/cvsweb.cgi
CVSWEB的下載:CVSWEB從最初的版本已經演化出很多功能界面更豐富的版本,這個是我覺
得
安裝設置比較方便的:
http://www.spaghetti-code.de/software/linux/cvsweb/
tar
zxf cvsweb.tgz
修改:cvsweb.cgi
$config = $ENV{'CVSWEB_CONFIG'}
|| 'cvsweb.conf';
修改:cvsweb.conf
%CVSROOT = (
'Development'
=> '/path/to/cvsroot',
);
"hideattic" => "1",
CVSWEB
可不能隨便開放給所有用戶,因此需要使用WEB用戶認證:
先生成 passwd:
/path/to/apache/bin/htpasswd
-c cvsweb.passwd user
修改httpd.conf: 增加
<Directory
"/path/to/apache/cgi-bin/cvsweb/">
AuthName "CVS Authorization"
AuthType
Basic
AuthUserFile /path/to/cvsweb.passwd
require valid-user
</Directory>
CVS TAGS: 最后是誰,什么時間修改了文件
=====================================
將$Id$ 加在程序文件開頭的注釋里是一個很好的習慣,cvs能夠自動更新其中的內容成:
file_name
version time user_name 的格式,比如:
cvs_card.txt,v 1.1 2002/04/05
04:24:12 chedong Exp,可以這些信息了解文件的
最后修改人和修改時間
幾個常用的缺省文件:
default.php
<?php
/*
* Copyright (c) 2002 Company Name.
*
$Id$
*/
?>
Default.java: 注意文件頭一般注釋用 /* 開始
JAVADOC注釋用 /** 開始的區(qū)別
/*
* Copyright (c) 2002 Company Name.
*
$Id$
*/
package com.netease;
import java.io;
/**
* comments here
*/
public class Default {
/**
*
* @param
* @return
*/
public toString() {
}
}
default.pl:
# Copyright (c) 2002 Company Name.
#
$Id$
# file comments here
#!/usr/bin/perl -w
use
strict;
相關資源:
CVS HOME:
http://www.cvshome.org
CVS
FAQ:
http://www.loria.fr/~molli/cvs-index.html
相關網站:
http://directory.google.com/Top/Computers/Software/
Configuration_Management/Tools/Concurrent_Versions_System/
CVS
免費書:
http://cvsbook.red-bean.com/
CVS 速查卡片:
http://www.refcards.com/about/cvs.html
只有注冊用戶登錄后才能發(fā)表評論。 | ||
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
![]() |
||
相關文章:
|
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
27 | 28 | 29 | 30 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
11 | 12 | 13 | 14 | 15 | 16 | 17 | |||
18 | 19 | 20 | 21 | 22 | 23 | 24 | |||
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
常用鏈接
留言簿(10)
隨筆分類(307)
- Algorithm(22)
- apache(1)
- Assembly(1)
- browser(2)
- C++_BASIS(39)
- Compiling Theorem(1)
- CPU(1)
- cvs(3)
- Database(8)
- Designed Patterns(3)
- FileFormat(4)
- FileSystem(1)
- freebsd(1)
- Game(2)
- gdb(1)
- Gossips(12)
- GP_STL(3)
- interview(8)
- java
- life and living(1)
- linux kernel(12)
- Linux_Coding(43)
- Linux_Driver
- Linux_SysAdmin(26)
- makefile(3)
- misce(5)
- MultiCore(1)
- Network(14)
- OS(18)
- RegularExpression(1)
- schedule(1)
- SearchEngine(1)
- security(2)
- Shell(25)
- Socket(18)
- storage(2)
- Template(4)
- VC_MFC(4)
- vi(5)
- website(1)
- windows(7)
隨筆檔案(297)
- 2012年10月 (1)
- 2012年9月 (1)
- 2012年7月 (1)
- 2012年6月 (7)
- 2012年5月 (3)
- 2012年4月 (2)
- 2011年9月 (3)
- 2011年8月 (3)
- 2011年6月 (3)
- 2011年5月 (2)
- 2011年3月 (2)
- 2011年1月 (1)
- 2010年12月 (2)
- 2010年11月 (6)
- 2010年10月 (4)
- 2010年9月 (7)
- 2010年8月 (12)
- 2010年7月 (6)
- 2010年6月 (5)
- 2010年5月 (11)
- 2010年4月 (16)
- 2010年3月 (20)
- 2010年2月 (18)
- 2010年1月 (26)
- 2009年12月 (34)
- 2009年11月 (36)
- 2009年10月 (5)
- 2009年9月 (1)
- 2009年7月 (2)
- 2009年6月 (3)
- 2009年5月 (6)
- 2009年4月 (6)
- 2009年3月 (11)
- 2009年2月 (6)
- 2008年11月 (1)
- 2008年10月 (1)
- 2008年9月 (3)
- 2008年8月 (4)
- 2008年7月 (16)
algorithm
- andytan
- algorithm, linux, os, network,etc
- EXACT STRING MATCHING ALGORITHMS
- httperf -- a web perf test tool
- Java多線程
- 編程夜未眠
- 布薩空間
- 結構之法
- 沈一峰 google技術博客
- 小兵的窩
Books_Free_Online
C++
- Bjarne Stroustrup's C++ Style and Technique FAQ
- boyplayee column
- C Plus Plus
- CPP Reference
- LearnC++Website
- Welcome to Bjarne Stroustrup's homepage!
database
Linux
Linux shell
linux socket
misce
- cloudward
- 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的
network
OSS
- Google Android
- Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
- os161 file list
overall
搜索
最新評論

- 1.?re: memcached完全剖析系列教程《轉》
- mark
- --zgpxgame
- 2.?re: 用prctl給線程命名
- 評論內容較長,點擊標題查看
- --none
- 3.?re: 用prctl給線程命名
- 請問大俠: 用top命令的時候可以顯示修改后的線程名么?如何做呢?
- --dhao123@sina.com
- 4.?re: 解決Linux pthread_create內存泄漏問題
-
我試過,每一種方法有的時候不行。
第二種是可以的。
- --朱先生
- 5.?re: 著名程序庫的比較和學習經驗
- 評論內容較長,點擊標題查看
- --buy dissertation
- 6.?re: linux的消息隊列與共享內存編程
- 內容選擇得很好,謝謝
- --朱志超
- 7.?re: 著名程序庫的比較和學習經驗
- 評論內容較長,點擊標題查看
- --LillianHancock
- 8.?re: 解決Linux pthread_create內存泄漏問題[未登錄]
- 不錯,支持一個。
- --jack
- 9.?re: 淺談游戲服務器---功能模塊上來看[未登錄]
- 不錯 好文!! 期待博主繼續(xù)
- --cppexplore
- 10.?re: 全面整理的C++面試題
- 評論內容較長,點擊標題查看
- --chatler
- 11.?re: 微軟面試中簡單的算法題目(轉)
- 評論內容較長,點擊標題查看
- --chatler
- 12.?re: Browsers, processes, cookies and session state
- 每個IE Instance該是不同的進程吧,可以獲取進程ID,在每個instance里建一個名稱包含進程id的目錄名,就可以分目錄存儲了吧。
- --chatler
- 13.?re: Browsers, processes, cookies and session state
-
文章說的很清楚,多謝
我有一個問題:
如何為每個ie instance ie實例的 Persistent cookies cookie 指定不同的存儲目錄? - --domolo
- 14.?re: 從一道面試題看指針與數(shù)組的區(qū)別
- 一個字,強!
- --路過
- 15.?re: 一個關于單向鏈表的面試題
- 評論內容較長,點擊標題查看
- --chatler
閱讀排行榜
- 1.?Windows Socket五種I/O模型(8330)
- 2.?最大公約數(shù)(Gcd)兩種算法(Euclid && Stein)<轉>(5485)
- 3.?用prctl給線程命名(5047)
- 4.?Linux core dump file詳解 <轉>(4483)
- 5.?算法面試題(3393)
- 6.?64位與32位編程的數(shù)據(jù)類型區(qū)別(3230)
- 7.?解決Linux pthread_create內存泄漏問題(3119)
- 8.?NUMA與英特爾下一代Xeon處理器學習心得<轉>(2987)
- 9.?c語言抓取網頁數(shù)據(jù)(2825)
- 10.?CVSNT服務器配置——添加用戶、解決無法登陸(2731)
- 11.? pthread_join函數(shù)及l(fā)inux線程(2638)
- 12.?一個基于Event Poll(epoll)的TCP Server Framework,淺析epoll(2556)
-
13.?為 C/C++ 項目構建您自己的內存管理器
(2549) - 14.?memcached完全剖析系列教程《轉》(2499)
- 15.?G++編譯選項(2398)
- 16.?STL容器 erase的使用陷井<轉載>(2184)
- 17.?epoll使用例子(2109)
- 18.?linux的消息隊列與共享內存編程(2061)
- 19.?gdb帶參數(shù)調試(2057)
- 20.?The Linux Kernel Module Programming Guide(2003)
- 21.?一個關于單向鏈表的面試題(1903)
- 22.?c中strncmp與memcmp的區(qū)別(1877)
- 23.?優(yōu)化Derby數(shù)據(jù)庫技巧(1821)
- 24.?一個基于完成端口的TCP Server Framework,淺析IOCP(1750)
- 25.?自己整理的指令(1740)
- 26.?autotools制作Makefile 和configure文件(1623)
- 27.?Google C++ Style Guide(1616)
- 28.?linux系統(tǒng)調用函數(shù)(1614)
- 29.?An In-Depth Look into the Win32 Portable Executable File Format(1591)
- 30.? vim大小寫轉換(1576)
- 31.?淺談游戲服務器---功能模塊上來看(1543)
- 32.?教你用c實現(xiàn)http協(xié)議(1491)
-
33.?MIPS architecture
(1486) - 34.?Aix下查看占用端口的進程(1470)
- 35.?史上最強bash函數(shù)庫(1401)
- 36.?linux trap詳解(1338)
- 37.?ms,google,vmware,nvidia美國總部面試題(1318)
- 38.?多CPU上的原子操作(1313)
- 39.?power函數(shù)寫法《轉》(1274)
-
40.?Critical Section
(1245)
評論排行榜
- 1.?著名程序庫的比較和學習經驗(3)
- 2.?解決Linux pthread_create內存泄漏問題(2)
- 3.?用prctl給線程命名(2)
-
4.?Browsers, processes, cookies and session state
(2) - 5.?全面整理的C++面試題(1)
- 6.?linux的消息隊列與共享內存編程(1)
- 7.?一個關于單向鏈表的面試題(1)
- 8.?從一道面試題看指針與數(shù)組的區(qū)別 <轉>(1)
- 9.?淺談游戲服務器---功能模塊上來看(1)
- 10.?微軟面試中簡單的算法題目(轉)(1)
- 11.?memcached完全剖析系列教程《轉》(1)
- 12.?死鎖和活鎖 deadlock and livelock(0)
- 13.?IT公司筆試算法題(0)
- 14.?effective c++(0)
-
15.?為 C/C++ 項目構建您自己的內存管理器
(0) -
16.?Comparing Two High-Performance I/O Design Patterns
(0) - 17.?boost 庫 enable_shared_from_this 實現(xiàn)原理分析<轉>(0)
-
18.?Which is asymptotically larger: lg(lg* n) or lg*(lg n)$? <
>(0) - 19.?TCMalloc : Thread-Caching Malloc(0)
- 20.?有抗癌效果的神奇食物(0)
- 21.?ubuntu下編譯內核(0)
- 22.?MySQL索引背后的數(shù)據(jù)結構及算法原理(0)
- 23.?wget進行整站下載<轉>(0)
- 24.?What are the difference between DDL, DML and DCL commands?<轉載>(0)
- 25.?通過證書方式實現(xiàn)ssh的無密碼登陸<轉>(0)
- 26.?50個有關編程的至理名言<轉>(0)
- 27.?How I explained Design Patterns to my wife《reprint》(0)
- 28.?How to explain OOD to my wife-code project《轉載》(0)
- 29.?ifconf.c《轉載》(0)
- 30.?vim configuration(0)
- 31.?<轉>how to start a kernel thread(0)
- 32.?Linux系統(tǒng)性能指標介紹(0)
- 33.?Linux進程的狀態(tài)和調度(0)
- 34.?關鍵字的作用 auto static register const volatile extern (0)
- 35.?epoll使用例子(0)
- 36.?Windows Socket五種I/O模型(0)
- 37.?TCP的流量控制 (0)
- 38.?Linux下各類TCP網絡服務器的實現(xiàn)源代碼《轉》(0)
- 39.?fopen 文本文件與二進制文件區(qū)別(0)
- 40.?Linux目錄掃描程序(0)