- 浏览: 4754677 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
bzhao:
你也应该可以这样:(not tested)./rbtunnel ...
在Bash脚本中怎么关闭文件描述符? -
bzhao:
如果有A进程原代码情况下,通过如下调用,把他的子进程继承关闭则 ...
在Bash脚本中怎么关闭文件描述符? -
Master-Gao:
楼主咋没分析下源码呢?
我使用过的Linux命令之dirname - 截取给定路径的目录部分 -
jiedushi:
tail -F 就可以吧
Linux下实时跟踪log4j日志文件的bash脚本 - 增强了tail -f的功能 -
java_is_new:
新手学习了,就是不明白为一个网卡配多个ip有什么用
我使用过的Linux命令之ifconfig - 网络配置命令
Linux下把多个子目录中的源代码添加到CVS仓库的Bash脚本
本文链接:http://codingstandards.iteye.com/blog/792113 (转载请注明出处)
要求描述
在src目录下,包含多个子目录,每个子目录下都有C/C++的源代码,现在要把它们自动加入到CVS仓库中,只能将源文件(比如.h文件,.c文件,.hpp文件,.cpp文件,makefile)提交,不能包含编译中间产生的临时文件(比如.o文件)和最终执行文件。
当把一个目录添加CVS仓库之后,目录中会增加一个CVS目录,CVS目录中的几个文件(Entries、Repository和Root)是用来保存一些cvs版本管理信息的。要注意的是cvs这个东西有个问题,使用cvs add CVS时也可以将CVS这个目录添加到CVS仓库中,因此要避免这种情况。
版本演化
版本0
基本思路:遍历每一个子目录,CVS目录除外,如果一个子目录中没有CVS子目录,那么需要添加该目录,否则忽略;然后把该子目录下的源文件添加到CVS仓库中。如下所示:
文件:add2cvs0.sh
#!/bin/sh for d in * do if [ -d "$d" -a "$d" != "CVS" ]; then if [ ! -d "$d/CVS" ]; then cvs add "$d" fi cvs add "$d/*.h" "$d/*.c" "$d/*.hpp" "$d/*.cpp" "$d/makefile" "$d/*.java" "$d/*.html" fi done cvs commit
试一下,发现它会把*.h本身作为一个文件名传递给cvs add命令,实际上并不是每个目录中都包含这几种扩展名的文件。因为有些是纯C编写的,有些是用C++的。
[root@rhel55 src]# ./add2cvs0.sh
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test0/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test1/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test2/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test3/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test4/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test5/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test6/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test7/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test8/*.h,v: Invalid argument
cvs commit: Examining .
cvs commit: Examining test0
cvs commit: Examining test1
cvs commit: Examining test2
cvs commit: Examining test3
cvs commit: Examining test4
cvs commit: Examining test5
cvs commit: Examining test6
cvs commit: Examining test7
cvs commit: Examining test8
[root@rhel55 src]#
版本1
改进思路:把cvs add 后面的那几种通配符表示的文件名,改用Bash中的大括号表示。比如*.{h,c}实际相当于$.h *.c的简写法。
文件:add2cvs1.sh
#!/bin/sh for d in * do if [ -d "$d" -a "$d" != "CVS" ]; then if [ ! -d "$d/CVS" ]; then cvs add "$d" fi #cvs add "$d/*.h" "$d/*.c" "$d/*.hpp" "$d/*.cpp" "$d/makefile" "$d/*.java" "$d/*.html" cvs add $d/*.{h,c,hpp,cpp,java,html,xml} fi done cvs commit
试一下,还是不行,跟上面一样。因为只是把参数改一下写法,实际上是等同的。
[root@rhel55 src]# ./add2cvs1.sh
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test0/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test1/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test2/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test3/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test4/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test5/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test6/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test7/*.h,v: Invalid argument
cvs [server aborted]: Couldn't open RCS file /CVSWEBX/web_spider/src/test8/*.h,v: Invalid argument
cvs commit: Examining .
cvs commit: Examining test0
cvs commit: Examining test1
cvs commit: Examining test2
cvs commit: Examining test3
cvs commit: Examining test4
cvs commit: Examining test5
cvs commit: Examining test6
cvs commit: Examining test7
cvs commit: Examining test8
[root@rhel55 src]#
版本2
改进思路:直接使用通配符表示的文件参数(比如*.h)在传递的时候,如果没有可以匹配的文件,那么Bash就会把该参数本身传递。因此想到先用ls命令把这些文件列出来,把输出作为参数来传递。
文件:add2cvs2.sh
#!/bin/sh for d in * do if [ -d "$d" -a "$d" != "CVS" ]; then if [ ! -d "$d/CVS" ]; then cvs add "$d" fi #cvs add "$d/*.h" "$d/*.c" "$d/*.hpp" "$d/*.cpp" "$d/makefile" "$d/*.java" "$d/*.html" cvs add $(ls $d/*.{h,c,hpp,cpp,java,html,xml,sh} $d/makefile) fi done cvs commit
试一下,发现效果还不错。如果匹配的文件不存在,ls会报错,错误信息是输出在标准错误设备上的,而$(ls *.h)只把标准输出的信息变成字符串。
[root@rhel55 src]# ./add2cvs2.sh
ls: test0/*.h: 没有那个文件或目录
ls: test0/*.hpp: 没有那个文件或目录
ls: test0/*.cpp: 没有那个文件或目录
ls: test0/*.java: 没有那个文件或目录
ls: test0/*.html: 没有那个文件或目录
ls: test0/*.xml: 没有那个文件或目录
ls: test0/makefile: 没有那个文件或目录
cvs server: test0/test0.c already exists, with version number 1.1
cvs server: test0/test0.sh already exists, with version number 1.1
ls: test1/*.h: 没有那个文件或目录
ls: test1/*.c: 没有那个文件或目录
ls: test1/*.hpp: 没有那个文件或目录
ls: test1/*.java: 没有那个文件或目录
ls: test1/*.html: 没有那个文件或目录
ls: test1/*.xml: 没有那个文件或目录
cvs server: test1/makefile already exists, with version number 1.1
cvs server: test1/test1.cpp already exists, with version number 1.1
cvs server: test1/test1.sh already exists, with version number 1.1
ls: test2/*.h: 没有那个文件或目录
ls: test2/*.c: 没有那个文件或目录
ls: test2/*.hpp: 没有那个文件或目录
ls: test2/*.java: 没有那个文件或目录
ls: test2/*.html: 没有那个文件或目录
ls: test2/*.xml: 没有那个文件或目录
ls: test2/*.sh: 没有那个文件或目录
cvs server: test2/makefile already exists, with version number 1.1
cvs server: test2/test2.cpp already exists, with version number 1.1
ls: test3/*.h: 没有那个文件或目录
ls: test3/*.c: 没有那个文件或目录
ls: test3/*.hpp: 没有那个文件或目录
ls: test3/*.java: 没有那个文件或目录
ls: test3/*.html: 没有那个文件或目录
ls: test3/*.xml: 没有那个文件或目录
ls: test3/*.sh: 没有那个文件或目录
cvs server: test3/makefile already exists, with version number 1.1
cvs server: test3/test3.cpp already exists, with version number 1.1
ls: test4/*.h: 没有那个文件或目录
ls: test4/*.hpp: 没有那个文件或目录
ls: test4/*.cpp: 没有那个文件或目录
ls: test4/*.html: 没有那个文件或目录
ls: test4/*.xml: 没有那个文件或目录
ls: test4/makefile: 没有那个文件或目录
cvs server: test4/test4.c already exists, with version number 1.1
cvs server: test4/Test4.java already exists, with version number 1.1
cvs server: test4/test4.sh already exists, with version number 1.1
ls: test5/*.h: 没有那个文件或目录
ls: test5/*.c: 没有那个文件或目录
ls: test5/*.hpp: 没有那个文件或目录
ls: test5/*.java: 没有那个文件或目录
ls: test5/*.html: 没有那个文件或目录
ls: test5/*.xml: 没有那个文件或目录
ls: test5/*.sh: 没有那个文件或目录
cvs server: test5/makefile already exists, with version number 1.1
cvs server: test5/test5.cpp already exists, with version number 1.1
ls: test6/*.h: 没有那个文件或目录
ls: test6/*.c: 没有那个文件或目录
ls: test6/*.hpp: 没有那个文件或目录
ls: test6/*.java: 没有那个文件或目录
ls: test6/*.xml: 没有那个文件或目录
ls: test6/*.sh: 没有那个文件或目录
cvs server: test6/index.html already exists, with version number 1.1
cvs server: test6/makefile already exists, with version number 1.1
cvs server: test6/test6.cpp already exists, with version number 1.1
ls: test7/*.h: 没有那个文件或目录
ls: test7/*.c: 没有那个文件或目录
ls: test7/*.hpp: 没有那个文件或目录
ls: test7/*.java: 没有那个文件或目录
ls: test7/*.html: 没有那个文件或目录
ls: test7/*.sh: 没有那个文件或目录
cvs server: test7/makefile already exists, with version number 1.1
cvs server: test7/spider.xml already exists, with version number 1.1
cvs server: test7/test7.cpp already exists, with version number 1.1
ls: test8/*.h: 没有那个文件或目录
ls: test8/*.c: 没有那个文件或目录
ls: test8/*.hpp: 没有那个文件或目录
ls: test8/*.java: 没有那个文件或目录
ls: test8/*.html: 没有那个文件或目录
ls: test8/*.xml: 没有那个文件或目录
ls: test8/*.sh: 没有那个文件或目录
cvs server: test8/makefile already exists, with version number 1.1
cvs server: test8/test8.cpp already exists, with version number 1.1
cvs commit: Examining .
cvs commit: Examining test0
cvs commit: Examining test1
cvs commit: Examining test2
cvs commit: Examining test3
cvs commit: Examining test4
cvs commit: Examining test5
cvs commit: Examining test6
cvs commit: Examining test7
cvs commit: Examining test8
[root@rhel55 src]#
版本3
改进思路:把ls的错误输出摒蔽掉,通过将标准错误输出重定向到/dev/null就可以做到了。
文件:add2cvs.sh
#!/bin/sh for d in * do if [ -d "$d" -a "$d" != "CVS" ]; then if [ ! -d "$d/CVS" ]; then cvs add "$d" fi #cvs add "$d/*.h" "$d/*.c" "$d/*.hpp" "$d/*.cpp" "$d/makefile" "$d/*.java" "$d/*.html" cvs add $(ls $d/*.{h,c,hpp,cpp,java,html,xml,sh} $d/makefile 2>/dev/null) fi done cvs commit
试一下,目标基本达到。
[root@rhel55 src]# ./add2cvs.sh
cvs server: test0/test0.c already exists, with version number 1.1
cvs server: test0/test0.sh already exists, with version number 1.1
cvs server: test1/makefile already exists, with version number 1.1
cvs server: test1/test1.cpp already exists, with version number 1.1
cvs server: test1/test1.sh already exists, with version number 1.1
cvs server: test2/makefile already exists, with version number 1.1
cvs server: test2/test2.cpp already exists, with version number 1.1
cvs server: test3/makefile already exists, with version number 1.1
cvs server: test3/test3.cpp already exists, with version number 1.1
cvs server: test4/test4.c already exists, with version number 1.1
cvs server: test4/Test4.java already exists, with version number 1.1
cvs server: test4/test4.sh already exists, with version number 1.1
cvs server: test5/makefile already exists, with version number 1.1
cvs server: test5/test5.cpp already exists, with version number 1.1
cvs server: test6/index.html already exists, with version number 1.1
cvs server: test6/makefile already exists, with version number 1.1
cvs server: test6/test6.cpp already exists, with version number 1.1
cvs server: test7/makefile already exists, with version number 1.1
cvs server: test7/spider.xml already exists, with version number 1.1
cvs server: test7/test7.cpp already exists, with version number 1.1
cvs server: test8/makefile already exists, with version number 1.1
cvs server: test8/test8.cpp already exists, with version number 1.1
cvs commit: Examining .
cvs commit: Examining test0
cvs commit: Examining test1
cvs commit: Examining test2
cvs commit: Examining test3
cvs commit: Examining test4
cvs commit: Examining test5
cvs commit: Examining test6
cvs commit: Examining test7
cvs commit: Examining test8
[root@rhel55 src]#
- add2cvs.rar (944 Bytes)
- 下载次数: 2
发表评论
-
在Linux下将整个目录的文件转换字符编码的脚本
2012-06-18 20:47 3656源文件编码:gbk 源文件名称模式:*.ftl.gbk 目 ... -
Bash小技巧(惯用法)-2
2012-05-12 07:17 2205读取文件的第一行 很简单: head -1 file.tx ... -
Bash小技巧(惯用法)-1
2012-05-10 20:55 2628Bash小技巧(惯用法) 退出码判断(命令执行成功与否的判断 ... -
写一个Bash脚本来计算母亲节和父亲节的日期(推荐)
2012-05-10 20:31 2805写一个Bash脚本来计算母亲节和父亲节的日期 母亲节(每年 ... -
推荐Bash提高资料:写出健壮的Bash脚本
2012-03-20 13:58 3478写出健壮的Bash脚本 本文链接:http://coding ... -
在Linux下使用top命令查看所有java进程的状态
2011-10-28 11:09 9696在Linux下使用top命令查 ... -
导入MySQL数据库模式及数据的Bash脚本 (导出的姊妹篇)
2011-10-11 09:48 2828导入MySQL数据库模式及数据的Bash脚本 本文链接:ht ... -
导出MySQL数据库模式及数据的Bash脚本 真的很好用!
2011-10-10 10:14 3980导出MySQL数据库模式及数据的Bash脚本 本文链 ... -
导出MySQL数据库模式及数据的Bash脚本
2011-10-08 14:41 0导出MySQL数据库模式及数据的Bash脚本 ... -
AA制消费金额统计的Bash脚本
2011-09-02 19:57 2088AA制消费金额统计的Bash ... -
AA制消费金额统计的Bash脚本
2011-09-02 16:27 0AA制消费金额统计的Bash ... -
Bash字符串处理总结(与Java对比)
2011-08-26 22:02 0。 Bash字符串处理总结(与Java对比) ... -
Linux下实时跟踪log4j日志文件的bash脚本 - 增强了tail -f的功能
2010-11-05 13:08 7787Linux下实时跟踪log4j日志文件的bash脚本 - 增强 ... -
用Google AJAX Search API对互联网上Linux命令出现次数排名
2010-10-31 14:30 3236用Google AJAX Search API对互联网上Lin ... -
我使用过的Linux命令之history
2010-09-30 14:03 0我使用过的Linux命令之history 本文链接: ( ... -
我使用过的Linux命令之g++
2010-09-29 13:51 0我使用过的Linux命令之g++ 用途说明 常用参数 使 ... -
我使用过的Linux命令之gzip
2010-09-29 13:51 0我使用过的Linux命令之gzip 用途说明 常用参数 ... -
我使用过的Linux命令之gunzip
2010-09-29 13:50 0我使用过的Linux命令之gunzip 用途说明 常用参数 ... -
我使用过的Linux命令之groups
2010-09-29 13:50 0我使用过的Linux命令之groups 用途说明 常用参数 ... -
我使用过的Linux命令之groupmod
2010-09-29 13:49 0我使用过的Linux命令之groupmod 用途说明 常用 ...
相关推荐
它主要用于管理软件项目中的源代码变更历史,支持多用户协作开发,能够有效地追踪文件或项目的修改历史。 在Red Hat 9系统上,可以通过以下方式检查是否已安装CVS: ```shell rpm -qa | grep cvs ``` 如果显示结果...
总的来说,Cvs作为一款历史悠久的源代码管理工具,虽然在某些方面已被现代工具超越,但在理解其基本原理和操作后,我们仍然可以从中学到很多关于版本控制的知识,这对于任何软件开发人员来说都是宝贵的。
- **CVS**(Concurrent Versions System)是一种源代码版本控制系统,主要用于软件开发过程中对多个版本进行管理和跟踪。 - 在Linux环境下安装并配置CVS,能够帮助团队更有效地管理代码版本和协同工作。 #### 二、...
`-m`与注释字符串之间必须留有一个空格,否则CVS会将当前目录下的所有文件递归签入库中,这可能会导致版本库中的代码被“污染”。 ##### 4. cvs up (Update) - **语法**: `cvs up [options] files` - `options`: ...
1. **选择一个目录作为CVS仓库**:在本例中,我们使用`/usr/local/cvsroot`作为仓库路径。 2. **初始化CVS仓库**:使用`cvs -d /usr/local/cvsroot init`命令初始化仓库。 #### 3. 配置SSH连接 为了确保CVS服务器...
Linux下的CVS(Concurrent Versions System)是一种广泛使用的源代码版本控制系统,它允许开发者在团队环境中协作开发软件项目。在Linux环境下,CVS的使用和维护涉及到多个方面,包括安装、库的创建、权限设置以及...
这将在当前目录下创建一个名为`my_project_checkout`的目录,包含从CVS仓库检出的最新项目文件。 ### 更新和同步 要获取仓库中的最新更改,使用`cvs update`命令: ```bash cd my_project_checkout cvs update ``...
【Linux下CVS服务器的配置】是指在Linux操作系统中设置和管理CVS(Concurrent Versions System)服务器的过程。CVS是一种版本控制系统,用于跟踪软件开发过程中文件的变更,便于团队协作。以下是详细的配置步骤: 1...
在IT行业中,源代码管理是开发团队协作的重要环节,它确保了代码的安全、版本控制以及团队成员间的同步。本教程将详细介绍如何在MyEclipse环境下配置CVS(Concurrent Versions System)服务器,以便进行有效的源代码...
- 通过WinCVS的“导入选项”导入现有项目到CVS仓库,或者直接在CVS仓库中创建新项目。 三、注意事项 - 确保Linux服务器上的防火墙设置允许CVS的TCP端口(默认为2401)通信。 - 在Windows客户端,使用`cvsnt-2.5....
cvs 将创建project_name目录,并将最新版本的源代码导出到相应目录中。这个checkout和Virvual SourceSafe中的check out不是一个概念,相对于Virvual SourceSafe的check out是cvs update, check in是cvs commit。
Linux 下 CVS 安装部署备份恢复等 本文档详细介绍了在 Linux 操作系统下安装、部署、备份和恢复 CVS 服务器的步骤,旨在帮助读者快速搭建 CVS 服务器环境。 一、安装 Linux 服务器 在安装 Linux 服务器时,需要...
在描述中提到的“linux下CVS的应用指南”,意味着我们将讨论如何在Linux系统上安装、配置和操作CVS。首先,你需要安装CVS客户端和服务器,通常可以通过Linux的包管理器(如apt-get或yum)轻松完成。安装完成后,可以...
总结起来,配置Linux下的CVS服务器涉及到下载源代码,编译安装,配置服务启动方式,创建Repository,设置权限,以及调整相关配置文件。这个过程虽然有些复杂,但是一旦完成,就能为团队提供一个可靠的版本控制基础...
本文主要介绍了在 Linux 系统中安装配置 CVS 服务器的全过程,从确认系统中是否已经安装了 CVS 服务到建立 CVSROOT 目录、配置 CVSROOT 目录权限、建立 CVS 仓库、配置 CVS 服务器和添加可以使用 CVS 服务的用户。
Linux 下 CVS 的配置与安装 安装 CVS 在 Linux 系统中,安装 CVS 服务器端非常重要。首先,需要确认系统是否已经安装了 CVS。如果没有安装,可以使用以下命令安装: ``` # yum install cvs ``` 配置 CVS 服务器 ...
### Linux下配置CVS服务器详解 CVS(Concurrent Versions System)是一款开源版本控制系统,在软件开发过程中被广泛用于代码管理。本文将详细介绍如何在Linux环境下配置CVS服务器,包括搭建环境、用户管理、权限...
在MyEclipse中配置CVS(Concurrent Versions System)源代码管理是一项重要的步骤,它能够帮助开发者有效地管理和协同开发项目代码。以下是一个详尽的配置流程: 首先,你需要在服务器上安装CVSNT-2.5.01,这是一个...
### Linux下CVS服务器的配置知识点详解 #### 一、验证是否已安装CVS 在开始配置CVS服务器之前,首先要确认系统是否已经安装了CVS。可以通过以下命令检查: ```bash # rpm -qcvs ``` 如果系统中已安装CVS,此命令...