同步库/项目subversion存储库

时间:2008-08-22 21:51:24

标签: svn synchronization

我正在开发一个库以及几个使用它的项目,我发现自己经常在项目的同时修改库(例如,向库中添加一个函数并立即在项目中使用它) 。
因此,该项目将不再使用以前版本的库进行编译。

因此,如果我需要回滚更改或测试项目的先前版本,我想知道在办理登机手续时使用了哪个版本的库。
我想我可以手动执行此操作(只需在日志文件中编写版本号),但如果这可能会自动发生,那就太棒了。

4 个答案:

答案 0 :(得分:3)

可能适合您的选项是使用对库的svn:external引用。标记项目时,您可以执行以下两项操作之一:

  • 更新svn:external以引用库的特定修订版; OR
  • 更新svn:external以引用您在库上创建的新标记。

由于svn:external元数据将成为主项目提交历史的一部分,因此您始终可以在主项目上获取该标记,并且它将引用该库的正确版本。我们做到了,效果很好。当您想要冻结您为准备发布而依赖的库代码版本时,它也会派上用场。

答案 1 :(得分:2)

我想如果我要这样做,我会使用标签。编写一个脚本会非常容易,每次升级库并在项目中使用它时,都会使用相同的ID标记两个存储库。然后,如果您需要回滚到以前的版本,只需看看它最新的标记是什么,然后将库回滚到该版本。

更新:对不起,我已经在Mercurial的土地上呆了一段时间,忘记了颠覆并不直接支持标记。假设您使用通常的subversion目录结构

/
  /trunk
  /tags
  /branches

你只需要运行

svn copy trunk/ tags/TagName
两个repos上的

,具有相同的标记名称。 Subversion非常适合智能副本,因此您无需担心磁盘空间。

答案 2 :(得分:2)

您可能会发现piston提供了解决方案

它主要用于在rails插件上导入ruby,但我不明白为什么它不适用于任何subversion存储库。

基本上它的作用是:

  • svn导出最新版本的远程路径
  • 将这些文件提交到本地svn,就像它们是本地文件一样
  • 以svn属性的形式附加有关远程路径和修订版
  • 的元数据

这意味着您可以保留对特定版本的远程仓库的引用,而不必像svn外部那样不断更新它。

如果您要将库的本地副本更新为最新的远程版本,只需执行piston update

您还应该能够查看更新的历史记录,只需查看元数据 - svn属性的版本化就像文件和其他所有内容一样

答案 3 :(得分:0)

一种选择是使用单个subversion存储库和签入更改同时影响库和项目。这样你就知道无论你所使用的项目的任何修订都需要相同的库版本。