我从Git仓库通过capistrano进行了简单部署。最初,我是从GitHub部署的,一切正常。但是后来我将存储库移至BitBucket,现在我得到了
fatal: Could not parse object '9cfb...'.
我换衣服后问题就消失了
set :deploy_via, :remote_cache
至
set :deploy_via, :copy
但这不能解决问题,只能绕过它。有什么办法可以告诉Capistrano删除旧的缓存?
我从Git仓库通过capistrano进行了简单部署。最初,我是从GitHub部署的,一切正常。但是后来我将存储库移至BitBucket,现在我得到了
fatal: Could not parse object '9cfb...'.
我换衣服后问题就消失了
set :deploy_via, :remote_cache
至
set :deploy_via, :copy
但这不能解决问题,只能绕过它。有什么办法可以告诉Capistrano删除旧的缓存?
Answers:
我得说不确定,因为我无法测试,但这应该可行:
cap deploy:cleanup -s keep_releases=0
由于它会擦除服务器上的每个版本(缓存)。
显然,您还需要删除shared/cached-copy
,因为根据下面的评论,上面的Capistrano调用似乎无法清除它。
shared/cached-copy
目录中新的回购地址即可。
Capistrano 2.X
使用新地址删除并重新克隆存储库:
cd $deploy_to/shared
rm -rf cached-copy
git clone ssh://git@example.org/new/repo.git cached-copy
修改您config/deploy.rb
以使用新的仓库:
set :repository, "ssh://git@example.org/new/repo.git"
set :scm, :git
set :deploy_via, :remote_cache
再次部署:
cap deploy
Capistrano 3.X
$deploy_to/repo
目录config/deploy.rb
(与2.X相同)cap deploy
:remove_cache
设置,则需要在缓存副本目录中放置某些内容,否则capistrano将不会部署。
shared/repo
而不是,shared/cached-copy
因此该答案虽然几乎是正确的,但应该进行更新。
$deploy_to/repo
文件夹的问题,因为repo
在中找不到任何文件夹shared
。
Capistrano 2及以下
SSH到您的服务器并更新./shared/cached-copy/.git/config
部署文件夹中的仓库,或者只是删除./shared/cached-copy
Capistrano 3及以上
SSH到您的服务器,并更新./repo/config
部署文件夹的存储库。
./repo/config
-> path_to_your_repo/repo/config
(开始
我用以下方法解决了这个问题deploy.rb
:
namespace :deploy do
task :cope_with_git_repo_relocation do
run "if [ -d #{shared_path}/cached-copy ]; then cd #{shared_path}/cached-copy && git remote set-url origin #{repository}; else true; fi"
end
end
before "deploy:update_code", "deploy:cope_with_git_repo_relocation"
这会使部署速度稍慢一些,因此一旦您满意所有部署目标都已完成,就值得删除。
您需要在/ shared / cached-copy文件夹中更改git origin
cd /var/www/your-project/production/shared/cached-copy
git remote remove origin
git remote add origin git@bitbucket.org:/origin.git
尝试进行上限生产部署
取决于您的版本Capistrano 3与它的较老祖先不同:
在这里阅读我的原始答案以及使用git更改存储库时如何解决类似问题Capistrano错误
这是此答案所讨论的Capistrano 3版本。在每个服务器上执行答案可能会很乏味。
因此,将其放入deploy.rb
然后运行cap <environment> deploy:fix_repo_origin
namespace :deploy do
desc 'Fix repo origin, for use when changing git repo URLs'
task :fix_repo_origin do
on roles(:web) do
within repo_path do
execute(:git, "remote set-url origin #{repo_url}")
end
end
end
end
对于Capistrano 3.0+
在您的config / deploy.rb中更改存储库URL
在服务器上的your_project / repo / config文件中更改存储库URL。
shared/cached-copy
,它现在就可以很好地部署了。