svn实现文件/目录共享

来源:互联网 发布:三维产品展示软件 编辑:程序博客网 时间:2024/05/22 06:21

1 svn实现文件/目录共享
 一、svn如何实现两个目录之间的共享呢?
  如下图:假设项目project1的构成需要用到project2的一个模块代码:project2/trunk/zhanghao/accessdata,如何简单地为project1提供这个组成模块,而不需要每个开发员都单独从project2中check out到自己的工作目录呢?

       ________________repos/_____________
       |                                 |
   project1/                        project2/
      |---trunk                          |--trunk
            |--zhanghao  <┈┈┈┈┈┈┐   |--zhanghao
            |--mycode                 └┈┈┈ |--accessdata
      |---tags                                       |---include
      |---branches                             |--deletedata

二、利用svn的属性svn:externals可简单实现共享效果。

  我们检出project1,并设置trunk的svn:externals属性:
  svn co http://www.scmbbs.com/repos/project1;
  cd project1/trunk;
  svn propset svn:externals "accessdata http://www.scmbbs.com/repos/project2/trunk/accessdata" zhanghao;

请注意:属性值"accessdata http://www.scmbbs.com/repos/project2/trunk/accessdata"由两个字段组成,第一个字段“accessdata”表示check out到本地时新文件夹名字,第二个字段URL指向要引用的源头地。如果漏设了一个字段,属性设置将会失败。

  属性设置完毕后,我们再来检出project1,发现trunk/zhanghao下多出了一个文件夹:accessdata,打开检查里面的内容,发现正是project2/trunk/zhanghao/accessdata里的内容。

另外,你可以对同一个目录设置多个svn:externals属性,以便在此目录下获得多个共享组件。如:
  svn propset svn:externals "accessdata   http://www.scmbbs.com/repos/project2/trunk/accessdata" zhanghao;
  svn propset svn:externals "deletedata   http://www.scmbbs.com/repos/project2/trunk/deletedata" zhanghao;
  这两条命令对project1/trunk/zhanghao目录设置了2个共享文件夹accessdata、deletedata。
更新project1/trunk/zhanghao时,文件夹结构如下:

    project1/
      |--trunk
            |--zhanghao
                 |--accessdata
                 |--deletedata

如果你对project2/trunk/zhanghao/acessdata文件夹有修改权限,则对project1下的acessdata的修改也会提交到project2中,实现真正的共享。