关于颠覆,我应该如何处理供应商目录?

Posted

技术标签:

【中文标题】关于颠覆,我应该如何处理供应商目录?【英文标题】:What should I do with the vendor directory with respect to subversion? 【发布时间】:2010-09-12 06:02:18 【问题描述】:

所以我有一个问题。我检查了我的冷冻宝石和铁轨,即使你不应该这样做。我认为这很容易,而且不会有那么大的交易。好吧,后来我更新了 rails 并删除了 vendor/rails 目录中的所有 .svn 文件。我听说我真正应该做的只是对我的供应商目录中的 svn:externals 做一些事情。我到底需要做什么,如果我的仓库中没有我的冷冻宝石,capistrano 还会使用它们吗?如果它不会使用我冻结的 gem,我该如何正确地重新生成那些 .svn 文件,因为这再次发生。

谢谢!

【问题讨论】:

【参考方案1】:

就个人而言,我偏向于使用Piston 来管理供应商目录。

【讨论】:

【参考方案2】:

    要恢复已删除的 .svn 目录,只需运行 svn update。他们会回来的。

    我只是签入导出的 gem。我在vendor/gems 目录中使用gem unpack <gemname>,从那里使用svn addcommit

    vendor/pluginsvendor/rails 中的任何内容我都使用活塞进行跟踪。例如,这就是我在那里获取轨道的方式:

    % piston import http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-2/ vendor/rails

要获得活塞,请使用gem install piston

请注意,随着 Rails 继续使用 git 并且可能不会更新 subversion 存储库,我将不得不找到一个不同/更好的解决方案来替换活塞。

【讨论】:

我可以在窗户上安装活塞吗?我的颠覆是在 Windows 上。【参考方案3】:

我不得不反对 svn:externals 有两个原因

    您可能正在部署到无法访问那些 svn 服务的环境中

    当您要部署并且那些 svn external 已关闭时会发生什么?

我的建议是使用活塞或宝石解包并管理供应商树中的生产依赖关系。

【讨论】:

【参考方案4】:

免责声明:我不了解 Ruby/Rails,所以我不知道什么是冻结的 gem(尽管我假设它们是编译的二进制文件或标记化的源代码),但我很了解 Subversion。

.svn 目录只保存 Subversion 的“簿记”。里面没有什么是不可恢复的。

删除 .svn 文件根本不是问题。如果缺少 .svn 目录的目录位于 subversion 工作副本的目录树中的某个位置(您签出到的目录),只需删除这些目录,执行 svn 更新,它们就会被重新创建。

如果整棵树都缺少 .svn 文件,请删除整棵树并再次执行 svn 签出。

svn:externals 就像一个“符号链接”。你有项目 A 和项目 B,它使用项目 A。你所做的是添加一个引用项目 A 的库目录的 svn:external 属性,所以每当你签出项目 B 时,它会自动从项目 A 中放置库目录在里面。例如,我经常有一个名为“thirdparty”的目录,其中包含来自其他地方的库的外部文件,包括 evn:external 对 subversion 中其他项目的引用。

解决此类版本问题的一个技巧是为库(或冻结的 gem)设置单独的发布目录,并在需要它们的项目中使用 svn:external 对适当发布目录的引用。随着新版本的发布,只需将 svn:external 属性更改为指向新的发布目录和 svn update。

【讨论】:

以上是关于关于颠覆,我应该如何处理供应商目录?的主要内容,如果未能解决你的问题,请参考以下文章

srm软件如何处理好供应商关系

Jackson - 如何处理(反序列化)嵌套的 JSON?

为啥仍然使用EDI,如何处理?

材料已经入库,现在要降价,SAP如何处理

EBS订单关闭状态为已关闭,审批状态为要求重新审批,该如何处理。

Laravel 4 使用供应商类