首页 > 系统 > 关键词  > linux服务器最新资讯  > 正文

LINUX作CVS服务器之三

2008-09-08 17:56 · 稿源:互联网

3.在管理中的相关技术

3.1在管理源文件的一种技术叫"关键字替换".在每次执行"cvscommit"操作后源文件的某些关键字会被替换为可用的词

$AUTHOR$用户名

$Data$登记时的时间

$Header$标准的首部,包含RCS的完整路径名,日期,作者

$Id$除RCS文件名不完整外与$Header$同.

$Log$包含RCS的完整路径名,版本号,日期,作者和在提交时提供的日志信息.

$RCSfile$包含RCS的文件名,不包括路径名

$Revision$分配的版本号

$Source$RCS文件的完整名

$State$分配的版本的状态,由cvsadmin-s分配.

例:在cvscommit之前,main.c里有

staticchar*rcsid="$Id$";

执行cvscommit后

main.c的改行变为:

staticchar*rcsid="$Id:main.c,v1.21999/04/2915:10:14trimblefExp$";

当然,这里只是一个演示.在实际的程序开发中,这种技术有非常有用的作用,在此不多赘述.有兴趣的朋友可参考相关书籍.

3.2创建分支可以使用户对一些文件使用命令commit进行修改时不会影响主干.创建分支应首先为拟作修改的那些文件创建一个标签(tag).

标签是赋于一个文件或一组文件的符号.在源代码的生命周期里,组成一组模块的文件被赋于相同的标签.在工作目录中执行

~usr/teat/$cvstagrelease-1-0

标签创建后,就可以为其创建一个分支:

~usr/teat/$cvsrtag-b-rrelease-1-0release-1-0-pathprint

-b:创建分支

-rrelease-1-0:指定存在的标签

releas-1-0-patch:分支

print:模块名

使用cvsupdate-j选项可以将分支上的改变与本地文件拷贝合并.

~usr/teat/$cvsupdate-jrelease-1-0print.c

对源文件作必要修改后,可以用cvsrelease删除本地工作拷贝

并通知其他开发者这个模块不再使用.

~use/$cvsrelease-dtest

3.3冲突解决

在有多个用户对同一个文件进行修改时,如果修改了其中的相同部分,而修改后的内容如果有不同的话,出现冲突是不可避免的。

例如在CVS文件仓库中有一个文件test.c,它的版本是1.4,用户A先检出该文件进行修改,而稍后有用户B检出该文件进行修改,并提前提交成1.5,这样在用户A再提交时就会出现冲突,这时CVS会提示需要手工解决。

例如,文件仓库中的版本1.4:内容为:

#include

main()

{

inti;

for(i=0;i<100;i++)

printf(“Count:%d
”,i);

}

用户B1.5:

#include

main()

{

inti;

for(i=0;i<10;i++)

printf(“Count:%d
”,i);

printf(“Over
”);

}

用户A:

#include

main()

{

inti;

for(i=0;i<50;i++)

printf(“Count:%d
”,i);

return;

}

提交时会提示有冲突,这样需要手工编辑,这时如果用户A运行了$cvsupdate之后,再编辑test.c,会看到test.c的内容是这样的:

#include

main()

{

inti;

<<<<<<
for(i=0;i<50;i++)

=======

for(i=0;i<10;i++)

>>>>>>>1.5

 

printf("Count:%d
",i);

<<<<<<
return;

=======

printf("Over
");

>>>>>>>1.5

}

这样就需要,根据任务的不同,来手工修改,这是比较麻烦的,所以在真正的协作开发中,很少,对同一个文件给与,很多人相同的提交权限.

3.4文件版本管理

版本管理系统,最重要的莫过于对文件版本的管理,系统默认的版本升级使用的版本号是一定的.如果由于特殊需要,要自己定义出文件的版本号时,你可以用一下命令:

cvslog[-lR][-rrev][-ddate][-wlogin][files…]

其中,参数的意义如下:

-l不处理子目录

-R对子目录做同样处理

-r指定版本号

-d指定时间

-w指定登录名

使用下面的命令可以参看当前模块的版本号或指定文件的所有历史版本信息。

cvsannotate[-lR][-rrev|-Ddate]files

其中,参数的意义如下:

-l不处理子目录

-R对子目录做同样处理

-r指定版本号

使用下面的命令可以参看指定文件(检出之后)的所有修改信息。

$cvsannotatecvstest/c/test.c

输出依次为:版本修改人修改时间源代码

1.1(tang18-Jan-00):#include

1.1(tang18-Jan-00):#include

1.1(tang18-Jan-00):

1.1(tang18-Jan-00):main()

1.1(tang18-Jan-00):{

1.1(tang18-Jan-00):inti=0;

1.1(tang18-Jan-00):

1.1(tang18-Jan-00):for(i=0;i<20;i++)

1.1(tang18-Jan-00):printf("Count:%d
",i);

1.1(tang18-Jan-00):

1.3(tang18-Jan-00):printf("222222
");

1.4(tang18-Jan-00):printf("333333
");

1.1(tang18-Jan-00):}

使用下面的命令可以生成相对于一个指定主版本的分支版本:

cvsrtag–b–rrev_rootrev_branchfile_name

其中,参数的意义如下:

-b指定生成一个分支版本

-r指定该分支的主干节点版本号

rev_root主干版本号

rev_branch分支版本号

file_name指定文件,使用“.”表示当前目录下所有文件

使用下面的命令可以生成一个对应版本号的分支版本,由于CVS版本号是用数字表示的,而且在同一个模块下不同文件的版本完全可能是不同的,所以使用标识会更方便。

例:

$cvsrtag–b–r1.2tlb-1SOURCE

以后要访问该分支版本,可以使用“-r”选项

$cvscheckout–rtlb-1SOURCE

从当前检出的版本切换到一个分支版本:

$cvsupdate–rtlb-1SOURCE

使用下面的命令可以看版本信息:

cvsstatus[–vlR]files

其中,参数的意义如下:

-v显示所有信息

-l不显示子目录信息

-R显示子目录信息

命令:cvsupdate–jrevmodule把当前所做的修改与指定版本的文件进行合并。

如:主干1.11.21.31.41.51.6↓

分支tlb-11.2.2.11.2.2.21.2.2.3

如果要合并分支tlb-1上的版本:

$cvsupdate–j1.2.2.3–jtlb-1test.c

其中1.2.2.3可以通过tag命令生成一个容易记忆的标识。

如果要合并分支tlb-1到主干上1.2:

$cvsupdate–jtlb-1test.c

如果要合并主干上的不同版本(注意顺序很重要,同时在指定版本之间的所有修改将被丢弃):

$cvsupdate–j1.5–j1.2test.c

如果在不同版本之间模块的文件有增减,则可以:

$cvsupdate–A

$cvsupdata–jbranch_name

四、命令集

在本章的例子中,介绍了很多,命令的详细用法,其大多数是以应用的角度,来分析的.实际上.cvs拥有,大量的命令.如gcc一样cvs常用的命令也不是很多,在本节中,我们列出了一些常用的命令.力图不和以上各节中介绍的相重复.当然,限于时间和水平,在此也不可能列出cvs所有的命令.有兴趣的朋友.可以,参考,cvs的说明文档,与linux的man文档,详细学习,也可来此做出指导

1.检出源文件

cvscheckout[-rrev][-Ddate][-ddir][-jmerg1][-jmerg2]modules

其中,参数的意义如下:

-r检出指定版本的模块

-D检出指定日期的模块

-d检出指定目录而不是模块

-j合并当前版本和指定版本

使用下面的命令会检出刚才生成的模块,并在当前目录下生成与文件仓库中完全一样的目录结构:

usr$cvscheckoutproject

usr$cvscheckou
  • 相关推荐
  • 大家在看
  • 腾讯云服务器12.12限时秒杀-1核2G首年50元

    腾讯云服务器12.12多种机型限时抢购,1核2G服务器4.17元/月,2核4G服务器6.17元/月,专业技术7*24小时在线服务,腾讯云为企业和个人提供快捷,安全,稳定的云服务!

    广告
  • 星与特斯拉合发布23个补丁 FSD开始适用主线Linux内核

    三星与特斯拉合作发布了一组23个补丁,用于使特斯拉的完全自动驾驶(FSD)SoC适用于主线Linux内核。这23个补丁使特斯拉的完全自动驾驶SoC能够从上游Linux内核启动,而目前使用的是下游内核构建。特斯拉不仅利用Coreboot支持开源的AMD GPU Linux驱动,甚至支持将其添加到主线Linux内核中。Tesla FSD SoC支持包括设备树的添加和对内核的各种修改,以提供这种基本支持,该技术主要是建立在现有的三星Exynos SoC驱动路径上。由于利用了

  • SUSE Liberty Linux:确保Linux安全性,避免供应商锁定

    原因显而易见——开源能够促进协作,加快速度并提升互操作性...如何使工作负载在最能发挥其效能的地方运行,并简化IT管理?...SUSE Liberty Linux是一种新技术和支持产品,旨在为客户管理异构IT环境提供统一的支持体验...SUSE Liberty Linux的三大核心特性:...SUSE 是全球范围内创新且可靠的企业级开源解决方案领导者,财富 500 强中有 60% 以上的企业依靠 SUSE 为其关键任务的工作负载赋能......

  • 阿里巴巴为Linux内核调度提出组平衡器(GB)概念

    随着越来越多的组织为了发展云计算等业务配置他们的服务器在应用程序之间共享CPU核心/资源,而不是专门分配CPU核心给单个应用程序/任务,中国公司阿里巴巴正在为Linux内核调度器提出一个新的"组平衡器"概念以提升系统资源利用表现。拟议中的的Linux组平衡器主要是在任务间共享资源时减少资源冲突。这个平衡器的重点是在各组CPU核心之间平衡各组任务。关于这个组平衡器(GB)的"征求意见"今天被发出,并被总结为:"我们需要的是一种

  • 距离Linux桌面元年越来越近了

    今年早些时候,TechRepublic 认为虽然 2021 年不是 Linux 桌面元年,但不可否认的是 Linux 在企业领域持续主导地位、而 Linux 在桌面上也缓慢(和微妙)增长...Sebastian 所做的实验似乎表明,虽然有些游戏使用 Proton(Valve 的 Windows 兼容层)确实运行良好,但也有同样多的游戏运行有问题...在他的视频中,Linus 提到阻碍“Linux 桌面元年”的主要问题是碎片化......

  • Canonical正在招聘Ubuntu Linux桌面游戏产品经理

    Canonical正在寻求围绕Linux游戏的兴趣群体,以及由于Valve的Steam Play允许越来越多的引人注目的Windows游戏在Linux上运行而带来的更大前景。因此Canonical现在正在招聘Ubuntu的桌面游戏产品经理的新职位。Canonical希望这位潜在的客户经理可以"使Ubuntu成为最适合游戏的Linux桌面。我们与业界的合作伙伴合作,确保内置最新的图形驱动和调整,以获得最佳的帧率和延迟,并与游戏行业的合作伙伴合作,确保反作弊功能等机制,以确保?

  • 微软重塑"DXGKRNL"驱动 欲将其纳入Linux内核中

    早在2020年,微软宣布DXGKRNL驱动为内核驱动组件,用于支持Windows Subsystem for Linux(WSL2)中的GPU加速用例。最初的DXGKRNL驱动很快就被上游内核开发者提出了各种问题,而现在,在过去的一年里,微软一直在重新制作这个内核驱动,并在周三发布了新版本。DXGKRNL是他们的"DirectX"内核驱动组件,用于Windows Subsystem for Linux(WSL2),支持Hyper-V环境下的图形加速和GPU计算。DXGKRNL也将用于他们即将推出的Android Window

  • 新的跨平台"SysJoker"后门同时影响macOS、Windows、Linux

    据报道,新的"SysJoker"后门可以攻击多个操作系统,包括macOS、Windows和Linux。来自Intezer的研究人员透露,他们发现了SysJoker,这个后门最初被发现是攻击Linux的。不久之后,同一后门的变种被发现,它们可以扩展出对Windows和macOS进行攻击。这一发现是不寻常的,因为发现可以同时攻击多个平台的恶意代码是很罕见的。通常情况下,恶意软件只为攻击一个平台的特定漏洞而生成,而不是以类似的方式同时为多个平台开发。根据研究人?

  • 性能增超25%!AMD Zen4/Zen 4C处理现身Linux:最大128核

    日前有开源技术社区发现,对Zen 4和Zen 4C的支持已经在Linux中得以实现,其中Zen 4最高用于96核Genoa EPYC处理器,识别信息为AMD Family 19h Models 10h-1Fh;Zen 4C则将用于128核Bergamo EPYC处理器,识别信息为AMD Family 19h Models A0h-AFh...外界解读为这是Zen 4类似于Alder Lake也要上马大小核的信号,使得整个家族产品更具适配弹性......

  • CleanCache在被夸大宣传了十年后将从Linux内核中被清除

    十年前,CleanCache补丁系列被并入Linux内核主线,但现在它将退役。今天,作为AndrewMorton补丁的一部分,合并到Linux-Next中的CleanCache被移除了。为什么?因为它已经没有用户了。自从2019年移除XenTranscendent Memory(TMEM)驱动代码后,CleanCache已经没有任何用户了,但代码仍然在内核中赋闲。CleanCache是由甲骨文的工程师开发的,在推出时,他们宣布它是"非常酷的东西,有巨大的潜力使运行的虚拟机大幅优化/性能/效率,是

  • 最“根正苗红”的手机Linux系统,最终还是倒下了

    因为Tizen虽然如今几乎已经没啥名气了,但无论从其技术特征、还是传承的“血统”来说,都完全可以称得上是有史以来最“根正苗红”的手机端Linux操作系统...使用Maemo的诺基亚N810,可能很多诺基亚手机的老用户也从未接触过...然后,还有Linux基金会在2007年开始推动,旨在探索Linux在手机端技术可能性的LinuxMobile系统......

这篇文章对你有价值吗?

  • 热门标签

热文

  • 3 天
  • 7天