为同一个项目使用两个不同的 SVN 存储库
Using two different SVN repositories for the same project
作为一名顾问,我通常可以访问客户的 svn 存储库,以便签出、处理并最终提交项目。
最佳(是客户请求)是在客户的 svn 上只提交稳定版本并避免中间(即不可构建)提交,但我也想跟踪开发过程并享受版本控制的好处系统...
那么做这样的事情会很棒:
- 从客户的 svn 签出 PROJ
- 使用内部 svn 进行开发
- 在客户端的 svn 上提交稳定版本
我可以使用一些脚本(自动执行结帐、删除 .svn 内容、提交等)完成此任务,但这离顺利的过程还很远。
我试图寻找解决方案,但我还没有找到任何有用的东西。
有谁知道一种简单而高效的方法吗?
提前致谢。
很抱歉,我的回答暗示使用另一个 VCS,但是使用 git-svn 很容易做到这一点。在开发期间提交 git,将您的提交压缩为一次“干净”提交,然后 dcommit
将其发送到 SVN 服务器。
不过,如果您不是 git 用户,这对于您的目的来说可能过于复杂。
最好和最简单的解决方案是使用您身边的另一个 SCM + 桥接到 SVN(Mercurial + HGSubversion,不是 Git)
但即使使用纯 SVN,您至少有两个可行的解决方案:供应商分支和共享 UUID
供应商分支机构
- 阅读Vendor Branches topic from SVN Book (mostly Vendor Branches from Foreign Repositories part) and related Externals Definitions章
- 根据"Vendor Branches" 建议
构建您的 存储库,并链接到客户的存储库
- 在您的存储库的私有部分执行您的日常工作
- 将完善和完成的工作合并到 Vendor Branch 并将结果(一个大合并集)提交到客户的存储库(您必须在客户端拥有 RW 权限)
- (不时) 将来自客户回购的其他人提交合并到您回购中的私人分支
共享 UUID
您可以通过干净、合法的方式 (svn help relocate
) 更改(对于现有 WC)URL 相关 SVN 存储库,它主要用于基础架构管理,但对您也有用。
用于重定位的 FROM 和 TO 存储库假定为相同的存储库,通过检查存储库的 UUID 来验证身份,因此:对于两个不同的存储库(客户和您),您必须提供相同的 UUID。
它可以通过加载|转储循环轻松实现(svnadmin dump
客户端的回购/或只需要它的节点/,svnadmin load ... --force-uuid
到您的空存储库)之后您可以执行任何工作在您的存储库中。 "Ready to publish" 如果您满足以下条件,作品将出现在客户的仓库中:
- 将您的 WC 重新定位到客户的存储库
- 更新(半自动 - 你无法避免它,无冲突的合并将出现在你的 WC 中,无需你的干预),客户端遗漏了更改
- 在 WC 中提交您的(可能是长期的)更改(它将是 "Modified",与客户的回购相反)作为一个巨大的提交
- 将 WC 重新定位回您的存储库
PS:"Vendor Branches" 是我的 POV 更安全的方法,代价是 Subversion 的合并可能出现问题(仍然 没有 DVCS 世界那么漂亮)
作为一名顾问,我通常可以访问客户的 svn 存储库,以便签出、处理并最终提交项目。
最佳(是客户请求)是在客户的 svn 上只提交稳定版本并避免中间(即不可构建)提交,但我也想跟踪开发过程并享受版本控制的好处系统...
那么做这样的事情会很棒:
- 从客户的 svn 签出 PROJ
- 使用内部 svn 进行开发
- 在客户端的 svn 上提交稳定版本
我可以使用一些脚本(自动执行结帐、删除 .svn 内容、提交等)完成此任务,但这离顺利的过程还很远。
我试图寻找解决方案,但我还没有找到任何有用的东西。
有谁知道一种简单而高效的方法吗?
提前致谢。
很抱歉,我的回答暗示使用另一个 VCS,但是使用 git-svn 很容易做到这一点。在开发期间提交 git,将您的提交压缩为一次“干净”提交,然后 dcommit
将其发送到 SVN 服务器。
不过,如果您不是 git 用户,这对于您的目的来说可能过于复杂。
最好和最简单的解决方案是使用您身边的另一个 SCM + 桥接到 SVN(Mercurial + HGSubversion,不是 Git)
但即使使用纯 SVN,您至少有两个可行的解决方案:供应商分支和共享 UUID
供应商分支机构
- 阅读Vendor Branches topic from SVN Book (mostly Vendor Branches from Foreign Repositories part) and related Externals Definitions章
- 根据"Vendor Branches" 建议 构建您的 存储库,并链接到客户的存储库
- 在您的存储库的私有部分执行您的日常工作
- 将完善和完成的工作合并到 Vendor Branch 并将结果(一个大合并集)提交到客户的存储库(您必须在客户端拥有 RW 权限)
- (不时) 将来自客户回购的其他人提交合并到您回购中的私人分支
共享 UUID
您可以通过干净、合法的方式 (svn help relocate
) 更改(对于现有 WC)URL 相关 SVN 存储库,它主要用于基础架构管理,但对您也有用。
用于重定位的 FROM 和 TO 存储库假定为相同的存储库,通过检查存储库的 UUID 来验证身份,因此:对于两个不同的存储库(客户和您),您必须提供相同的 UUID。
它可以通过加载|转储循环轻松实现(svnadmin dump
客户端的回购/或只需要它的节点/,svnadmin load ... --force-uuid
到您的空存储库)之后您可以执行任何工作在您的存储库中。 "Ready to publish" 如果您满足以下条件,作品将出现在客户的仓库中:
- 将您的 WC 重新定位到客户的存储库
- 更新(半自动 - 你无法避免它,无冲突的合并将出现在你的 WC 中,无需你的干预),客户端遗漏了更改
- 在 WC 中提交您的(可能是长期的)更改(它将是 "Modified",与客户的回购相反)作为一个巨大的提交
- 将 WC 重新定位回您的存储库
PS:"Vendor Branches" 是我的 POV 更安全的方法,代价是 Subversion 的合并可能出现问题(仍然 没有 DVCS 世界那么漂亮)