3

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

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

4

4 回答 4

3

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

  • 更新 svn:external 以引用库的特定版本;或者
  • 更新 svn:external 以引用您在库上创建的新标签。

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

于 2008-08-23T01:04:38.943 回答
2

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

更新:抱歉,我在 Mercurial 领域待了一段时间,忘记了颠覆不直接支持标记。假设你使用通常的 subversion 目录结构

/
  /trunk
  /tags
  /branches

你只需要运行

svn copy trunk/ tags/TagName

在两个 repos 上,具有相同的标签名称。Subversion 在智能副本方面非常出色,因此您无需担心磁盘空间。

于 2008-08-22T22:56:52.743 回答
2

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

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

基本上它的作用是这样的:

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

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

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

您还应该能够通过简单地查看元数据来查看更新历史 - svn 属性就像文件和其他所有内容一样被版本化

于 2008-08-23T01:16:19.930 回答
0

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

于 2008-08-22T22:05:07.097 回答