所以我有一个问题。我检查了我的冷冻宝石和铁轨,即使你不应该这样做。我认为这很容易,反正也不会那么大。好吧,后来我更新了rails并且这样做删除了vendor / rails目录中的所有.svn文件。我听说我真正应该做的事情只是与svn:externals到我的供应商目录。我究竟需要做什么,如果他们不在我的回购中,卡西斯特拉诺仍然会使用我的冷冻宝石?如果它不使用我的冷冻宝石,我怎样才能正确地重新生成这些.svn文件,因为这个将再次发生。
谢谢!
答案 0 :(得分:4)
就个人而言,我偏爱使用Piston来管理供应商目录。
答案 1 :(得分:3)
要恢复已删除的.svn
目录,只需运行svn update
即可。他们会回来的。
我只是检查导出的宝石。我在gem unpack <gemname>
目录中使用了vendor/gems
,在那里使用了svn add
和commit
。
vendor/plugins
或vendor/rails
中的任何内容我使用活塞进行跟踪。例如,这就是我在那里获得rails的方式:
% piston import http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-2/ vendor/rails
使活塞使用gem install piston
。
注意我将不得不找到一个不同的/更好的解决方案来替换活塞,因为Rails继续使用git并且可能不会更新subversion存储库。
答案 2 :(得分:2)
我必须提出反对svn:externals的建议有两个原因
您可能正在部署到无法访问这些svn服务的环境中
当您想要部署并且那些svn外部关闭时会发生什么?
我的建议是使用活塞或宝石解压缩并管理供应商树中的生产依赖性。
答案 3 :(得分:1)
免责声明:我不知道Ruby / Rails,所以我不知道冻结的宝石是什么(虽然我认为它们是编译的二进制文件或标记化的源代码),但我很了解Subversion。
.svn目录只保存Subversion“簿记”。那里什么都没有,这是不可恢复的。
删除.svn文件根本不是问题。如果缺少.svn目录的目录位于subversion工作副本中的目录树内(您执行结帐的目录),只需删除这些目录,执行svn更新,然后重新创建它们。
如果整个树都缺少.svn文件,请删除整个树并再次执行svn checkout。
svn:externals就像一个“象征性的链接”。您有项目A和项目B,它使用项目A.您要做的是添加一个引用项目A的库目录的svn:external属性,因此每当您签出项目B时,它将自动从项目A中放入库目录在里面。例如,我经常有一个名为“thirdparty”的目录,它保存来自其他地方的库的外部,包括evn:对subversion中其他项目的外部引用。
解决这类版本问题的一个技巧是为库(或冻结的宝石)提供单独的发布目录,在需要它们的项目中,使用对相应发行目录的svn:external引用。随着新版本的发布,只需将svn:external属性更改为指向新版本目录和svn update。