重构CVS存储库并保留历史记录

时间:2011-06-07 13:45:32

标签: repository cvs history

目前,我们的CVS信息库中包含以下内容:

Module1
  |
  |
  +-----A
  |
  +-----B

我们希望重组此模块,使子目录A和B显示为高级模块。我能做的是检查Module1然后拉出A和B,然后分别为A和B做一个新的cvs add,从而使它们成为新的cvs模块。但我相信如果我这样做,我将失去历史记录以及我必须删除A和B下的所有内部CVS文件夹。

Q1:那么有没有办法重组并保留历史记录?

我基本上要做的是过滤掉A和B之间的访问权限。 所以 -

Q2:有没有办法设置安全性,以便某些用户只能查看Module1 / A而不是Module1 / B?反之亦然?

1 个答案:

答案 0 :(得分:2)

Q1: So is there a way to restructure this and retain the history?

就像你在评论中写的那样,如果你有sys privs,你可以在存储库周围mv模块,并保留A和B下面所有文件的历史记录,但这样做会丢失/ A的历史记录曾经是Module1 / A和/ B曾经在Module1 / B中(更不用说构建脚本现在可能会破坏)。 Subversion通过提供move(或重命名)命令来解决此问题,该命令会记住模块的移动/重命名历史记录。

Q2: Is there a way to set up security so that certain users can check out Module1/A only and not Module1/B ? and vice-versa?

确实有,使用了组权限。从这个页面, http://www.linux.ie/articles/tutorials/managingaccesswithcvs.php 这是我所指的那个片段,以防页面消失

  

向其所有模块

     

我们之前看到过如何创建一个   cvsusers小组帮助了   协调几项工作   开发人员。我们可以扩展这一点   允许目录级别的方法   办理登机手续的限制。

     

在我们的例子中,让我们说吧   模块“cujo”是插孔的r / w   和约翰,以及“carrie”模块   r / w为约翰和吉尔。我们将创造   两组,g_cujo和g_carrie,和   将相应的用户添加到每个 - 中   / etc / group我们添加

g_cujo:x:3200:john,jack
g_carrie:x:3201:john,jill> 
  

现在在存储库中(以root身份),运行

find $CVSROOT/cujo -exec chgrp g_cujo {} \;
find $CVSROOT/carrie -exec chgrp g_carrie {} \;
  像以前一样确保所有   目录中设置了gid位。

     

现在,如果我们看一下   库...

   john@bolsh:~/cvs$ ls -l 
   total 16
   drwxrwsr-x    3 john     cvsadmin     4096 Dec 28 19:42 CVSROOT
   drwxrwsr-x    2 john     g_carrie     4096 Dec 28 19:35 carrie
   drwxrwsr-x    2 john     g_cujo       4096 Dec 28 19:40 cujo
  

如果杰克试图改变   凯莉......

   jack@bolsh:~/carrie$ cvs update
   cvs server: Updating .
   M test
   jack@bolsh:~/carrie$ cvs commit -m "test"
   cvs commit: Examining .
   Checking in test;
   /home/john/cvs/carrie/test,v  <--  test
   new revision: 1.2; previous revision: 1.1
   cvs [server aborted]: could not open lock file
   `/home/john/cvs/carrie/,test,': Permission denied
   jack@bolsh:~/carrie$ 
  

但是在cujo,没有问题。

   jack@bolsh:~/cujo$ cvs update
   cvs server: Updating .
   M test
   jack@bolsh:~/cujo$ cvs commit -m "Updating test"
   cvs commit: Examining .
   Checking in test;
   /home/john/cvs/cujo/test,v  <--  test
   new revision: 1.2; previous revision: 1.1
   done
   jack@bolsh:~/cujo$ 
  

现在添加用户的过程   它有点复杂   可能。为了创建一个新的CVS用户,我们   必须创建一个系统用户,添加它们   对应的组   他们可能写的模块,(如果   你正在使用pserver方法)   为他们生成密码,然后添加   CVSROOT / passwd的一个条目。

     

要添加项目,我们需要创建一个   组,导入源,更改   组中的所有文件   存储库并确保设置gid   在执行位上设置所有   模块内的目录,并添加   该组的相关用户。

     

毫无疑问会有更多   政府需要做到这一切   比起我们用尖尖刺戳人的时候   棒。在那种方法中,我们从来没有   添加系统用户或组或   更改目录上的组 - 全部   一旦我们成立,这就得到了照顾   存储库。这意味着一个   未成熟的用户可以是CVS管理员   没有根本权利   机器。