所以我有一个问题。我检查了我的冷冻宝石和铁轨,即使你不应该这样做。我认为这很容易,而且不会有那么大的问题。好吧,后来我更新了 rails 并删除了 vendor/rails 目录中的所有 .svn 文件。我听说我真正应该做的就是对我的供应商目录做一些与 svn:externals 相关的事情。我到底需要做什么,如果我的仓库中没有我的冷冻宝石,capistrano 还会使用它们吗?如果它不使用我冻结的宝石,我怎样才能正确地重新生成那些 .svn 文件,因为这会再次发生。
谢谢!
所以我有一个问题。我检查了我的冷冻宝石和铁轨,即使你不应该这样做。我认为这很容易,而且不会有那么大的问题。好吧,后来我更新了 rails 并删除了 vendor/rails 目录中的所有 .svn 文件。我听说我真正应该做的就是对我的供应商目录做一些与 svn:externals 相关的事情。我到底需要做什么,如果我的仓库中没有我的冷冻宝石,capistrano 还会使用它们吗?如果它不使用我冻结的宝石,我怎样才能正确地重新生成那些 .svn 文件,因为这会再次发生。
谢谢!
就个人而言,我偏爱使用Piston来管理供应商目录。
要恢复已删除的.svn
目录,只需运行svn update
. 他们会回来的。
我只是检查出口的宝石。我gem unpack <gemname>
在vendor/gems
目录中使用,svn add
然后commit
从那里使用。
我使用活塞跟踪的任何东西vendor/plugins
。vendor/rails
例如,这就是我在那里获取导轨的方式:
% piston import http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-2/ vendor/rails
得到活塞使用gem install piston
。
Note I'm going to have to find a different/better solution to replace piston as Rails continues to use git and may not update the subversion repository.
我不得不反对 svn:externals 有两个原因
您可能正在部署到无法访问这些 svn 服务的环境中
当您要部署并且那些 svn external 已关闭时会发生什么?
我的建议是使用活塞或宝石解包并管理供应商树中的生产依赖关系。
免责声明:我不了解 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 更新。