SVN存储库中的外部库更新

时间:2009-07-22 16:40:53

标签: svn

在我的存储库中,我存储了几个外部库。当新版本的库可用时,我执行以下任务以在我的存储库中更新它:

  1. 结帐我的旧版本库
  2. 递归删除除 .svn 目录
  3. 之外的所有内容
  4. 复制新版本的库
  5. svn status以查看更改
  6. 添加新文件和目录,删除已删除的文件和目录
  7. 提交
  8. 是否有更好(或更简单)的方法来完成此任务?

    请注意,我不能使用svn:externals,因为我使用的只有少数几个库提供了SVN访问权限。

6 个答案:

答案 0 :(得分:3)

您所做的实际上是管理供应商分支的最简洁方法,尤其是如果您有自己的代码自定义。

在许多情况下,可能不需要跟踪外部lib的已删除文件,但OTOH很容易编写脚本,因此我会继续使用此过程。无论如何,我都是这样做的。

答案 1 :(得分:2)

如果您使用的是Mac并安装了XCode,我只是发现了一种非常快速的方法。我确信必须有其他文件比较应用程序可以做到这一点,但这是我拥有并测试它。

打开FileMerge(/ Developer / Applications / Utilities / FileMerge),在比较文件下,选择旧版本作为左侧,新版本作为右侧。点击比较,然后在结果屏幕上,选择左列中的所有目录和文件。然后,在“合并”下拉列表中,选择“使用权限”或按下Cmd-3。系统可能会要求您指定合并目录。如果是,请浏览到原始版本的目录并选择该目录。

如果您现在在库目录中svn status,您将看到已更改文件的列表。 svn addsvn delete标有?!的人。登记入住!

如果您在此过程中的任何时候搞砸了并想重新开始,那很简单:

find . -type f -not -path '*.svn*' -exec rm {} \;
svn update --depth=infinity .

答案 2 :(得分:1)

我认为svn externals正是你要找的。可以在此处找到一些好的文档:http://svnbook.red-bean.com/en/1.0/ch07s03.html

答案 3 :(得分:0)

您可以为每个库创建一个新的存储库。然后,当新版本到达时,只需将其复制到库存储库的主干中,您应该看到SVN识别的修改和新文件 - 不需要先删除旧文件。删除文件是另一回事 - 但我希望你的库不会像疯了一样丢失文件,所以你可以手工管理它。

然后,一旦检入了所有更改,您就可以将主干标记为更新版本(可能与库的版本相匹配),并将该标记作为消费项目的外部标记。

答案 4 :(得分:0)

您可以删除svn中的整个目录并使用新版本再次添加(假设库位于其自己的目录中而不与其他库混合)。无论如何,您不需要第三方库的制造历史记录。

答案 5 :(得分:0)

我做了类似的事情,我将一个源代码树复制到我设置的用于在本地跟踪它的仓库中。

当有新版本时:

  • 我直接在我的WC上获取库文件。
  • 我看到了一个变化(使用乌龟 - 很容易看出哪些已经改变, 叠加层改变)
  • 我提交了所有更改。

就这么简单。显然,您没有获得完整的更改历史记录,因为您一次只跟踪1个版本,提交最新更改,但除此之外它非常有效。