作者:​奋斗的点心要专注

在使用 SVN 的时候,偶尔会遇到这样的场景:

有一份公共代码或数据需要所有分支共享,如果存储在普通的目录下,切分支之后各个分支该目录可能会出现差异,为了避免这种差异,应该使用 SVN 的 externals 属性,确保在任意分支下的更改在所有分支下都能够生效。


这种场景其实很常见,例如有好几个 project 都使用同一份 framework 的代码,且需要同步更新,这时候就得将 framework 设置为外部引用,只需要在一个地方修改,所有 project 的 framework 都能更新。


具体可以参考 svn 的说明: ​​http://www.subversion.org.cn/svnbook/1.2/svn.advanced.externals.html​



对于 Tortoise SVN 这个图形化客户端,应用 externals 外部引用属性非常方便,下面用一个例子来说明吧。


假设有一份公共的数据需要所有分支共享,这时候应该创建一个特殊的分支用于存放这些公共数据,例如 data,它的地址为


http://svn.example.net/project/data


在这个分支下创建存放公共数据的目录,例如 public_data,然后将需要共享的公共数据存放到里面。


这时候回到主干分支,因为后续切出的分支都死从主干衍生出来的,应该在主干做相应改动。假设主干的地址是


http://svn.example.net/project/trunk


假设主干的地址是,它需要在 bin/data 下访问存放公共数据的引用。



这时候,需要在 bin/data 对应的本地目录上点击鼠标右键,选择 TortoiseSVN->Properties(属性),如下所示:



在出现的对话框中,找到右下角的  New(新建)... 按钮,在点击出现的菜单中选择  Externals(外部)

​​


在弹出的 svn:externals 对话框中,点击左下角的  New(新建)... 按钮新建外部引用目录,这时会弹出 Edit External(修改外部) 对话框,在  Local path(本地路径) 编辑框中输入生成的目录名,可以是 public_data 或其他,在 URL 中输入要引用的外部目录地址,在这个例子中,是 http://svn.example.net/project/data/public_data。完成后,一路 OK(确定) 关闭所有对话框。


​​



回到 bin/data 对应的本地目录,点击鼠标右键,选择 SVN Update(SVN 更新) 更新代码,SVN 会自动创建一个刚才在 Local path 中填入对应名称的目录,其下的数据就是刚填入的 URL 指向的外部引用内容。



一切搞定~赶快用 SVN Commit(SVN 提交)... 提交修改吧~!以后从主干切出来的分支就都共用一份 public_data 了!其他分支的修改类似。